猿人学做题笔记

2023-11-18

简单记录一下做题的思路步骤

1、第一题说的是无混淆加密(简单):

刚开始观察请求,发现链接和请求携带的参数都没有什么异常,然后直接请求会拿不到数据,于是仔细看了一下请求包,发现请求头里面有些东西比较异常,里面有一个safe参数和timestamp,经过多次请求发现这两个参数值会变化。

那么就很明显了,请求的时候需要带上这两个参数,那么我们接下来就可以去搜索一下这两个参数,因为是headers里的参数,也可以搜索一下setRequestHeader,或者直接跟调用栈,从发包位置向前找。

这里我搜索没有搜到结果,不确定是不是js在html文件中,在查看页面源码的时候就直接找到了加密位置。关键的位置如下图所示:到这一步基本就解完了。(如果算法被改了就要复杂一点,这里没改)
在这里插入图片描述

2、动态的cookie生成,每次请求返回不同的cookie(简单)

该题是要得到在特定时间戳下生成的sign值,很明显和时间戳有关系。这里找加密位置可以根据关键字cookie去搜索,或跟栈,但比较麻烦,这里我直接hook了cookie的赋值位置。很快就能跟到加密位置。

加密js做了一些混淆,不过问题不大,因为涉及加密代码量并不是很多,直接在控制台一个一个调试即可,最终得到加密。(原生加密算法)
在这里插入图片描述

这里第二题还可以直接扣代码(假动态,就是服务器不会检测js对应关系,就是它不知道js是哪个)
(缺啥补啥,这个比较简单,有空可以试试)

3、动态cookie加强版(中等)
和第二题差不多,稍微难一点。首先和第二题一样,找到cookie的加密逻辑位置(直接hook就行)。如下图所示:在这里插入图片描述
采取和之前一样的方式,可以直接在控制台将该句核心代码中的混淆进行还原。可以得到如下代码:

document['cookie'] = A['ogQYB'](A['lPwrf']('lPwrf'](A['fYwOF'](A['csxCT']('m', A['HVWlm'](M)) + '=', V(Y)), '|'), Y), '; path=/');

然后,接下来我们就需要进一步分析了。在扣代码的过程中有时候执行会一直在执行,很长时间不停止,也不报错,这时候要注意可能是有些检测这时候需要打断点逐步缩小可疑位置。比如在上个断点还是正常的,但在下一个断点处错误了,那就很明显错误在两者之间。

另外需要补一些环境,基本上都很简单。就是有一个setinterval,当时报的错是xxx需要返回一个方法,而不是xxx,这个地方是根据缩小法发现的。

而且,调试代码时发现js代码会变化,两次的js不能混用,但是测试结果,都是一样的。所以这里可以把js直接写死。不想写死的话,可以将每次的js和补的环境拼接,也能拿到结果。

最后还有一个坑,当时报 history未定义,补上这个对象之后,还是报错。于是去找那里用到了history发现如下图所示:
请添加图片描述
源代码把console重新定义了(应该是在eval里执行了),而且里面用到了history对象**(在外面补的history 在虚拟机里好像找不到这个history???)**。我们在调试时,最后执行了console.log方法,所以报错了。但是正常return是没问题的。所以这里改不改都行。

想改的话也行,应该在开始位置先将原console对象和log方法保存一下,最后输出的时候,调用我们保存的方法即可。

4、IP封禁(简单)
没什么好说的,换代理IP就行了,不过IP比较垃圾的话会很折磨人(需要多次执行,因为一次全部成功的可能性不大)。

6、session保持检测(简单)

题目提示的很明显了,直接用session去请求即可。

刚开始没有使用session,去请求前几页的时候并没有发现问题,后面的页数会返回脏数据。具体可以自己测试一下,在发包前把cookie中的sign删掉试试,就会返回错误数据。至于服务器那边咋检测的就不清楚了,sign是会变化的。

7、请求规律检测(简单)

抓包并没有发现加密参数,而且题目也说了没有加密,通过观察发现请求数据时,每次都会发两个包。于是通过session去保持连接,成功得到数据。

一般使用session是因为请求数据前会做一些其他请求,可能得到一些特征值,后面请求数据时会进行判断,可能不只是cookie。

8、控制台呼出检测 (简单)

控制台呼出检测,相当于反调试,这里是使用location.href进行跳转,跳转到空白页面。(之前没遇到过,大多都是无限debug,卡死之类的)。刚开始有点不知所措,因为打开控制台直接就空白了,没法做操作。

后来想了一下,它页面跳转会执行js代码,于是加了一个js断点,在第一句js加载时就断住,这样就可以看到具体的代码了。可以看到跳转操作,其对控制台进行了监控,打开的话就会执行get方法。
在这里插入图片描述
这里可以直接监控threshold的值,单步往下执行js代码就能找到其结果值。代码混淆了,如果想看具体的赋值代码可能就稍微麻烦一点,因为搜索不到,不过一步一步跟也是能找到的。或者可以hook一下window对象,也能找到赋值逻辑位置(window.threshold)。
在这里插入图片描述
9、更复杂的动态js加密(第二题加强版)(中等)

和第二题差不多的思路,应该就代码混淆的更严重点,检测多一些。

10、请求规律检测(中等)

这道题主要是检测请求规律(慢慢找,分析抓到的数据包(发现没有加密))
11、jsl(简单)
首先要清楚加速乐的逻辑,通过抓包对比两次请求的差别,发现第二次拿到真实数据的请求里面的cookie有一个__jsl_clearance,变化的,而且第一次请求返回了一段js代码。

那么就很明显了,执行第一次请求返回的js得到第二次请求时携带的cookie。(这里应该也可以hook一下,去找cookie的设置位置),那么我们的主要目标就是这段js代码了。

可以大概看一下逻辑,前面的逻辑就是在赋值,核心的位置应该是在 eval函数里面执行的。那么我们可以直接把eval改为console.log 将其代码输出出来。如下图:
在这里插入图片描述
这时就能很明显的看出来其设置cookie的位置了。剩下的就是补环境了。这里比较简单,不想写了。
补完环境,就能拿到cookie的值了。

最后,把原始的js放在补的环境下运行,如果成功就没什么问题了。(因为js是变化的,所以最好要保证不修改原js代码,就能拿到结果),后面直接用正则表达式提取js和补的环境放在一起运行即可。

12、静态css字体加密(简单)
静态字体加密,请求数据返回的响应内容不是明文,需要和字体文件对应解密。本题是静态的字体加密,(且只有数字)。直接把数字明文和密文对应关系写出来,然后拿响应结果替换即可。

14、jsfuck 核心代码加密(简单)

跟到加密逻辑位置,有一段用jsfuck语法写的js逻辑,具体没什么特别简便的方法,只能打断点单步往下执行看逻辑。这个jsfuck内部有很多单独的逻辑块,利用eval、Function特征好像也没什么用。只能一步一步执行,跟逻辑。

可以先让js代码报个错,看看能不能拿到解码后的js。(这里是可以的)。

不过在跟逻辑的时候,可以先把jsfuck代码去掉。在本地执行后报错,说缺少一个word对象,可以大胆猜测一下jsfuck里面肯定构建了这个参数,且调用了加密函数。直接拿到浏览器里面执行时的work参数值,调用该函数,就直接拿到加密结果了。不需要再去跟代码逻辑了。(不行的话还是要单步跟流程的)

16、表情包(AAEncode)+sojson6.0(简单)
首先抓包,可以发现请求中的safe参数很明显是做过处理的,然后就是找到加密位置,(可以找关键字 request.setRequestHeader,直接搜safe应该也行)。

可以看到执行了一段AAEncode的代码,这里直接把所有代码拿下来,在控制台上让其报错或者去掉最后一个括号(特征)。就能拿到解码后的代码了。如下图:
在这里插入图片描述
然后在关键位置打断点,跟流程扣代码即可。基本没什么难度。

// 在代码里面应该是做了些检测,window 和 global ,检测判断了环境。但是这里并不影响,也就是没有做一些处理,让我们拿不到正确的结果。
var _0xcc8d5f = typeof window !== 'undefined' ? window : typeof process === 'object' && typeof require === 'function' && typeof global === 'object' ? global : this;

注意点:sojson里面有格式化检测,在本地报了个溢出的错,把这个检测处理掉,基本就没什么难度了,补了一个window。

24、万籁俱寂(骚操作 简单)
正常的抓包,对比分析。发现并没有什么加密操作。但是用requests请求拿不到结果。当时以为是检测了请求头里面元素的顺序,hook了一下setRequestHeaders方法,发现里面只设置了三个属性,而且设置顺序后请求也不对(因为requests更底层的还是session嘛,在session这里改动会使得headers的发送的顺序不再改变)。

session.headers=headers

session.headers.clear()
session.headers.update(
    headers
)

后面想到是不是协议的问题,因为之前抓包的时候没有设置显示协议这一项,所以就忽略了。设置之后重新抓包,可以看到走的是h2协议。如下图:
在这里插入图片描述
这样就很明确了,requests不支持h2请求。所以要用httpx。这里在使用httpx的时候报了个错。(大概是未知的协议)

httpcore.ConnectError: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:833)

上网查找资料发现httpx默认支持tls1.2以及以上版本协议。所以这里还需要设置一下,让其支持较低版本的协议。

ssl_context = httpx.create_ssl_context()
ssl_context.options ^= ssl.OP_NO_TLSv1
client = httpx.Client(http2=True, verify=ssl_context)

最后请求即可拿到正确结果。

34、js加课例题(简单)
cookie加密,可以直接hook document.cookie,能够直接找到赋值位置。如下图:
主要是hex_1和hex_2两个函数。同时 sct 是第一次请求时设置的一个cookie。
在这里插入图片描述

接下来,就是扣代码了,在扣代码过程中,会遇到rnns 和 rind 未定义,但是在浏览器里面是有值的(但在代码中搜不到赋值逻辑),那么可以肯定的是,这两个应该都是全局变量,在别的地方赋值了,在加密时用到了。

那么我们就要找这两个参数在哪赋值的,在此处可以hook 一下windows对象,然后在重新打开网页,就可以找到其赋值地方。就是在第一次请求时返回的响应内容里面,如下图。(经过测试,发现这两个值是会变得,但是算法不变(应该和第一次请求返回的cookie是配套的,只有匹配才能拿到正确的加密结果)),最后就是提取出这两个值,然后解密即可。
在这里插入图片描述
剩下的就没什么难度了,用正则提取数据时可能稍微麻烦点,主要有干扰字符

55、返回结果加密跟值(入门)

抓包后观察返回结果,是密文,但是密文肯定会有解密的位置,这时候找解密位置可以从发包后一步一步往后跟,看是在哪里解密的,但这种方法我个人觉得不太好,有时候跟不到,而且往后跟会执行很多步操作,我们并不清楚在哪里做了操作,还有就是没法根据关键字的结果值去定位,因为有时候从发包开始跟,单步执行直接就出结果了(不知道为啥),实在没办法的话就只能一步一步去执行了。

或者搜索一些关键字,比如success,readystatechange等或者 resolveWith这个关键字,因为做了好几个结果加密的,都会有这个关键字,但混淆的话就搜不到了。核心位置如下:
在这里插入图片描述

另外一个小技巧,通过页面显示的数据,判断解密位置是否已经错过。

还有一个问题,就是在跟到解密位置后,进到文件内是空白的。个人觉得可能是因为该js在html文件内,这里我在加载第一句js代码时设置断点,之后再跟到解密位置时就可以看到具体的解密代码了。

56、数据结果加密(简单)
和55类似,返回结果加密,具体找解密位置和55也类似,这里感觉和55题差不多,感觉位置没咋变,直接久能找到对应位置。发现是rsa解密,好像也没什么混淆,字面量好像都是十六进制,问题不大,使用ast解混淆也行,直接用也行。可以直接调包去执行,(可惜我不会,python和js都不会),那就只能扣代码了(这就是不好好学习的下场),拿了一万多行的js代码(最好还是调库,不然效率啥的可能都不友好),最后成功解密。
在这里插入图片描述

注意点: 扣代码的话需要补一些环境,毕竟那么多代码,不可能一点浏览器环境都用不到,所以最好是学习一下怎样调包。

57、返回数据加密 (入门)
和之前两个类似,加密算法是原生AES,代码混淆了,但问题不大,主要逻辑代码量不大,直接浏览器执行即可。
在这里插入图片描述
最后直接调包即可,crypto-js包直接用就行。

58、请求参数加密(入门)
通过抓到的数据包发现,该题是对请求参数进行加密,如下图:

在这里插入图片描述
这时候可以直接搜索token, 或者根据堆栈进行查找,从发包位置往前找。
找到加密位置发现可能是md5加密,但是通过原生md5加密算法得不到相同的结果,那就只能扣代码了。

在这里插入图片描述

关键代码就一个函数md5,直接拿下来就行,在运行的时候会报一些undefined的环境错误,这就是扣代码的缺点,有些环境必不可少的需要我们去补。不过这个补环境相对简单。补完环境之后直接执行即可。

59、脏数据 (入门)
首先观察抓到的数据包,没有发现加密,而且响应数据和页面加载的数据是一样的。于是直接写代码去获取数据,最终结果不正确。

所以肯定还是对响应数据做处理了。从发包位置向后跟,或者通过关键字success等查找。处理逻辑代码如下:在满足条件的情况下对某一个数据做处理了,这样就很清晰了。这里可以直接拿到对应页数的数据进行分析,发现只是在原有数据的基础上加了一。
在这里插入图片描述
当然,也可以把处理逻辑写到js代码中。然后对每次请求进行判断。(在这里可能就复杂了,所以就没写)

60、轻度混淆url加密 (简单)
url加密,首先找到加密位置,这里找加密位置可以从发包位置往前找,跟栈就能找到对应的位置。关键逻辑如下:

在这里插入图片描述

大概看一下代码,发现是AES加密,这时可以直接调包去试一下,这里试过了不是原生的AES算法,那就只能扣代码了。

刚开始简单跟了一下js代码,发现扣代码有点麻烦,于是便把所有的代码都拿下来了,放在本地执行是有结果的,但是请求时并不对。

所以说,很大概率是有检测,那就必须要去详细跟一下js代码执行逻辑了,由上可知,这里的关键位置是V这个函数,我们可以跳到该位置,经过调试,发现其最后执行了j方法,然后我们就单步往下执行。
在这里插入图片描述
这里我们要注意最后的return 语句,因为最终的返回值就是这里产生的。
在这里插入图片描述
一直往下跟,我们大概就明白了,在这里会生成一系列对象,当然,我们最关心的是最后返回的那个对象,那么在跟流程的过程中,我们会发现一些检测点:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这些检测点并不会报错,但是会改变一些值,最终造成生成的加密对象错误,但是还是能计算出值,但请求时就会出错。所以如果代码执行得到的结果和浏览器不相同,那么就需要详细跟一下流程,在跟流程过程中特别注意这些和分支代码有关的环境对象(因为可能会走向错误逻辑,不容易发现)

注意点: 真正的加密对象在第一次请求时已经生成,后面在换页的时候其实只是把之前生成的对象返回了,所以如果这样跟流程的话会找不到加密错误原因,因为根本就没有执行加密对象的生成过程。(所以有时候如果找不到错误原因,跟代码也没有明显的处理逻辑,可以尝试刷新页面从头加载js执行)

61、千山鸟飞绝(中等)

其实该题跟60题差不多,加密算法被修改了,只不过相对60题,混淆要更严重一点,具体方法还是拿全部代码,然后修改。因为代码直接运行是可以的,但是结果不对。所以可以判定内部是做了一些检测的。这就要一步一步去看逻辑了。我这里先用AST 简单解混淆了一下,删除了一下无用代码。最后用解混淆之后代码去跟逻辑。这样比较容易一点。

在跟流程过程中,发现了一些检测点,例如location等,(跟流程是一个枯燥耗时的事情,需要有耐心而且细心,不然可能发现不了检测点),把检测点过掉之后执行,结果还是不正确。

在这里插入图片描述

后来发现加密位置的parse执行后结果不一样,于是直接跟到该函数,单步往下执行,发现了buffer这个检测点。(buffer在浏览器为undefined),改掉之后久能获取到正确的结果。

注意: 跟流程可以先跟一遍大的逻辑,然后如果需要就要细跟(一步一步跟逻辑)

63、传输数据和返回数据为二进制(简单)
该题就是请求和响应的数据都是二进制,浏览器显示直接是乱码那种。其实也简单,管他是不是乱码,直接找发包位置,就可以找到请求参数的生成逻辑以及响应内容的解密逻辑。(不过这里的算法好像也被改了,需要扣代码)。

在扣代码过程中,发现少了一个window.crypto对象的getRandomValues方法。听说node 16 版本之上会自带。在本地执行时报错,于是自己补了一个getRandomValues方法。就可以拿到对应结果了。(代码逻辑里面好像做了检测,log好像也做处理了,输出不了东西,需要自己改改代码,相对比较简单,觉得不对劲的地方删了再试试)

TextDecode 可以将array Buffer 转为字符

var s = 'â,¤Å‘íÈ™õ×µ˜oiǶ5?ÎÀ¿a€$/»®ú°@9¥¼4»V'
var encoder = new TextEncoder()
console.log(encoder.encode(s))

/* Uint8Array(67) [
  195, 162,  44, 194, 164, 195, 133,  22, 194, 145, 195,
  173, 195, 136,  18, 194, 153, 195, 181,  24,  15, 195,
  151, 194, 181, 194, 152, 111, 105, 195, 135, 194, 182,
   53,  63, 195, 142, 195, 128,  17, 194, 191,  26,  97,
  194, 128,  36,  47, 194, 187,  25, 194, 174, 195, 186,
  194, 176,  64,  57, 194, 165, 194, 188,  52, 194, 187,
   86
]
*/

var u8 = new Uint8Array([
    195, 162,  44, 194, 164, 195, 133,  22, 194, 145, 195,
    173, 195, 136,  18, 194, 153, 195, 181,  24,  15, 195,
    151, 194, 181, 194, 152, 111, 105, 195, 135, 194, 182,
     53,  63, 195, 142, 195, 128,  17, 194, 191,  26,  97,
    194, 128,  36,  47, 194, 187,  25, 194, 174, 195, 186,
    194, 176,  64,  57, 194, 165, 194, 188,  52, 194, 187,
     86]
);
var decoder = new TextDecoder();
console.log(decoder.decode(u8));
// â,¤Å‘íÈ™õ×µ˜oiǶ5?ÎÀ¿a€$/»®ú°@9¥¼4»V

最后,在用python执行js时,拿不到对应的结果,后来找到原因是因为js返回的是一个字节数组对象,在python里面用不了于是将js返回值修改为数组对象的二进制数据,直接返回二进制数据在python里面就可以正常拿到了。同时在处理响应数据时,由于python拿到的是二进制数据,所以在js里面直接用js数据解密即可,将原有的处理逻辑进行适当修改。

注意点:不同语言数据结构之间的转换要特别注意

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

猿人学做题笔记 的相关文章

  • Python CSV Writer 在文件末尾留下一个空行

    以下代码在 txt 文件末尾留下一个空白行 我怎样才能不让 writerows 不终止最后一行 with open fname wb as myFile Start the CSV Writer wr csv writer myFile d
  • 如何将人物传奇带到前台?

    我有一系列子图 其中每个子图都有一个图例 我想在每个子图之外与相邻子图重叠 问题在于图例位于其自己的图的 顶部 但位于相邻图的下方 Legend 不将 zorder 作为参数 所以我不知道如何解决这个问题 这是我使用过的代码 import
  • 如果每个区域内至少有 5 个连续行,如何在每个标题区域的末尾使用 Title[Name]2 发布新行?

    我想在每个 Title 区域的末尾使用 Title Name 2 发布新行的最简单方法是通过一个计算连续行数的变量 其中至少有 5 个连续行包含 1 1 1 1在每个 标题区域内 我不确定我对计数变量做错了什么 也许 确实必须在每个 Tit
  • 将 2D Panda 的 DataFrame 列表转换为 3D DataFrame

    我正在尝试创建一个将标签值保存到 2D DataFrame 的 Pandas DataFrame 这是我到目前为止所做的 我正在使用读取 csv 文件pd read csv并将它们附加到列表中 出于这个问题的目的 让我们考虑以下代码 imp
  • 使用 Matplotlib 的范围绘制图像的 3D 轮廓

    正如我所介绍的here https stackoverflow com questions 18792624 fits image input to a range in plot python 在二维中 我想知道如何 缩放 要绘制到绘图中
  • Tensorflow 训练期间 GPU 使用率非常低

    我正在尝试为 10 类图像分类任务训练一个简单的多层感知器 这是 Udacity 深度学习课程作业的一部分 更准确地说 任务是对各种字体呈现的字母进行分类 数据集称为 notMNIST 我最终得到的代码看起来相当简单 但无论如何我在训练期间
  • 手动安装开放多语言世界网 (NLTK)

    我正在使用一台只能访问专用网络并且无法从命令行发送指令的计算机 因此 每当我必须安装 Python 包时 我都必须手动安装 我什至不能使用 Pypi 幸运的是 NLTK 允许我手动下载语料库 从here https www nltk org
  • 完全定制的Python帮助用法

    我正在尝试使用 Python 创建完全自定义的 帮助 用法 我计划将其导入到许多我想要具有风格一致性的程序中 但遇到了一些麻烦 我不知道为什么我的描述忽略换行符 尝试过 和 我无法让 出现在 ARGS 行的 换行符之后 显然它们坐在自己的行
  • Django Rest Framework 序列化器中的聚合(和其他带注释的)字段

    我正在尝试找出添加带注释字段的最佳方法 例如将任何聚合 计算 字段添加到 DRF 模型 序列化器 我的用例只是一种情况 端点返回的字段未存储在数据库中 而是从数据库计算得出 让我们看下面的例子 模型 py class IceCreamCom
  • 为什么最简单的 requests_mock 示例在 pytest 中失败?

    我有一个特殊的问题requests mock 我想用它pytest测试我的 API 包装器库 我尝试过使用requests mock 文档中的第一个示例 http requests mock readthedocs io en latest
  • python:UnboundLocalError:赋值前引用的局部变量“open”[重复]

    这个问题在这里已经有答案了 def read lines readFileName readfile txt f open readFileName r contents f read and so on read lines 当我运行这个
  • 模拟类:Mock() 还是 patch()?

    我在用mock http www voidspace org uk python mock index html使用Python 想知道这两种方法中哪一种更好 阅读 更Pythonic 方法一 只需创建一个模拟对象并使用它 代码如下 def
  • 如何连接多个字符串? [复制]

    这个问题在这里已经有答案了 如何将 stringList 中的所有字符串合并为一个而不打印它 例如 s joinStrings very hot day returns string print s Veryhotday 感觉有点倒退 但是
  • 如何在 matplotlib 中第一个 x 轴的底部添加第二个 x 轴?

    我指的是已经提出的问题here https stackoverflow com questions 10514315 how to add a second x axis in matplotlib 在此示例中 用户通过将第二个轴添加到与标
  • Python 包安装:pip 与 yum,还是两者一起安装?

    我刚刚开始管理 Hadoop 集群 我们使用 Bright Cluster Manager 直至操作系统级别 CentOS 7 1 然后使用 Ambari 以及适用于 Hadoop 的 Hortonworks HDP 2 3 我不断收到安装
  • Python 中的颜色处理

    对于我的聚类 GUI 我目前对聚类使用随机颜色 因为我事先不知道最终会得到多少个聚类 在 Python 中 这看起来像 import random def randomColor return random random random ra
  • Pandas:按日历周分组,然后绘制真实日期时间的分组条形图

    EDIT 我找到了一个非常好的解决方案并将其发布在下面作为答案 结果将如下所示 您可以为此问题生成一些示例数据 codes list ABCDEFGH dates pd Series pd date range 2013 11 01 201
  • python 相当于 sed

    有没有一种方法 无需双循环即可完成以下 sed 命令的操作 Input Time Banana spinach turkey sed i Banana s Toothpaste file Output Time BananaToothpas
  • Python Web 编程的不同方法的优缺点

    我想使用 Python 编写一些服务器端脚本 但我对这样做的方法有点迷失了 它从 DIY CGI 方法开始 似乎以一些相当强大的框架结束 这些框架基本上可以自己完成所有工作 中间有很多东西 比如web py http webpy org P
  • 真实值与预测值的降维可视化

    我有一个数据框 如下所示 label predicted F1 F2 F3 F40 major minor 2 1 4 major major 1 0 10 minor patch 4 3 23 major patch 2 1 11 min

随机推荐

  • Linux下日志分析--Linux日志

    简介 我们在企业里面 当我们把服务器放到了互联网当中去了以后 我们的服务器就可能被入侵 这就需要服务器的运维人员定期的对企业的服务器做定期的入侵检测 排查服务器是否被入侵 下面将介绍入侵检测所用到的方法有 查看系统日志 查看异常流量 检查可
  • 【Python】插入sqlite数据库

    import sqlite3 from datetime import datetime conn sqlite3 connect data db print Opened database successfully for i in ra
  • QT 在静态函数中发送信号

    今天在使用QT官方提供的函数qInstallMessageHandler输出日志时 因为这个函数的参数需要传的是一个函数 当这个函数是成员函数的时候需要是一个静态函数 但同时当我又需要在这个静态函数中发送消息 这时候就出现问题了 在静态函数
  • ICL8038信号发生器 正弦波 方波 三角波 低频信号发生 波形发生 原理图和PCB

    ICL8038信号发生器 正弦波 方波 三角波 低频信号发生 波形发生 原理图和PCB 目录 ICL8038信号发生器 正弦波 方波 三角波 低频信号发生 波形发生 原理图和PCB 基本原理 芯片选型 原理图 3D PCB 具体讲解 模块原
  • 干货!影视剪辑高清视频素材如何下载?大神精选7大影视网站

    影视剪辑 高清素材这里都有 hi 您好 我是您们的老朋友 覃小龙 您可以称呼我为覃总 今天分享一个主题 干货 影视剪辑高清视频素材如何下载 大神精选10大影视网站 很多账号不想真人出镜 都会选择做影视剪辑 当然作为一名视频剪辑初学者 很多小
  • Cookie 和 Session、实现用户登录逻辑

    Cookie 和 Session 一 回忆 Cookie 二 理解会话机制 Session 三 Cookie 和 Session 的区别 四 核心方法 4 1 HttpServletRequest 类中的相关方法 4 2 HttpServl
  • linux下挂载img方法

    目的 在linux下挂载img文件 以实现对img文件的修改 fdisk lu arch live usb img You must set cylinders You can do this from the extra function
  • 接口测试教程(一看就会)

    前言 掌握了http协议 就掌握了接口测试 笔者在网络上看过不少接口测试教程 一上来就开始讲怎么操作工具 而不告诉读者为什么要这么操作 读者可能照猫画虎成功了 也可能操作失败了但不知为何出错 因此 本文作为接口测试的入门第一课首先会给大家了
  • Jupyter默认存储目录修改 换地址记得换‘/‘

    Jupyter的默认目录修改 Jupyter的默认目录为 C Users MyThinkpad 启动cmd 或Anaconda propt 执行以下命令 查看 jupyter 配置文件路径 jupyter notebook generate
  • Qt学习笔记——对release版本的.exe添加图标 程序发布

    Qt程序发布 1 将 ico图标文件拷贝到工程目录helloworld下 并重命名为Myico ico 2 在此工程目录下新建一个txt文档 输入 IDI ICON1 ICON DISCARDABLE Myico ico 另存为后缀名为pr
  • 起名字老重名?使用这款利器可以快速帮你查询有哪些站点用了你的名字!

    作者 弗拉德 来源 弗拉德 公众号 fulade me 不知道有没有小伙伴跟我一样 常常在注册账号的时候输入了昵称往往会反回一个 用户名已存在 然后尝试了好几个昵称之后才能成功 今天介绍的这款工具可以帮助我们迅速的检索各大网站有没有我们自己
  • selenium.common.exceptions.WebDriverException: Message: ‘chromedriver‘ executable needs to be in P

    selenium在liunx下配置报错解决方式 1 首先 打开浏览器 输入 chrome version 可以看到版本号 2 打开这个链接 http chromedriver storage googleapis com index htm
  • 大数据导论习题_hive SQL基础经典练习题(上)

    练习题改自经典 练习题 原作者用的是MySQL环境 现笔者所写码环境为Hive hive SQL 入门容易 精通很难 基础的巩固相当重要 看起来简单易入门的SQL其实是千变万化的 能一次写正确SQL的工程师 亦然遵守二八法则 编程环境 hi
  • Java虚拟机篇

    1 组成 1 JVM 是由哪几部分组成的 JVM Java virtual machine 是 Java 程序的运行环境 它同时也是一个操作系统的一个应用程序 因此 JVM 也有他自己的运行生命周期 也有自己的代码和数据空间 image p
  • 每一座屎山代码背后,都藏着一堆熟读代码规范的研发

    导读 韩寒在 他的国 中写道 我们懂很多道理 却依然过不好这一生 人们虽然知道很多道理 但并不一定能将这些道理应用到实际生活中 这种现象在生活中很常见 我们听了很多的成功学的道理 但实际上 成功和幸福不是仅仅靠这些道理就能实现的 需要不断地
  • Linux脚本错误:没有那个文件或目录

    linux下执行脚本的时候报错 没有那个文件或目录 ls看一下 是有文件的 原因 文件格式错误 首先 vim filename查看文件 然后用命令 set ff看文件格式 可看到dos或unix的字样 如果的确是dos格式的 需要改成uni
  • 判断是否为二分图的两种算法 dfs/bfs

    判断是否为二分图的两种算法 dfs bfs 判断一个无向图是不是二分图 使用染色法 对每个顶点的相邻顶点染与顶点不同的颜色 如果染过色且与顶点颜色相同 则不是二分图 author 熊谦智 判断该图是否为二分图 1 判断无向图是否有环 如果图
  • MySQL 优化

    一 服务器配置优化 1 增加内存容量 内存容量是影响MySQL性能的重要因素之一 在MySQL中 有一个名为 缓冲池 的内存区域 用于缓存数据和索引 如果缓冲池太小 MySQL将频繁地从磁盘中读取数据 从而导致性能下降 因此 增加内存容量可
  • linux 修改密码命令

    1 passwd命令 脚本中语法 echo password passwd testuser stdin gt dev null 2 gt 1 或 echo newpasswd sleep 1 echo newpasswd passwd g
  • 猿人学做题笔记

    简单记录一下做题的思路步骤 1 第一题说的是无混淆加密 简单 刚开始观察请求 发现链接和请求携带的参数都没有什么异常 然后直接请求会拿不到数据 于是仔细看了一下请求包 发现请求头里面有些东西比较异常 里面有一个safe参数和timestam