1.解决网站的反爬机制,无限debugger以及检测到非法调试(这里以msedge浏览器为例)
第一步
点击右上角三个点——更多工具——开发人员工具
第二步
点击开发者工具右上角三个点,然后点击左边的(进入独立窗口)也就是下图的第2步
点击后我们发现我们要调试的网站和开发工具变成了2个独立的窗口页面,如下图:
第三步
在我们的debugger左边单击右键,然后选择永不在此处暂停,如下图:
第四步
回到我们的网站窗口,点击左上角的刷新按钮进行刷新,如图:
此时我们就可以进入调试阶段了
到此该网站的反爬机制,无限debugger以及检测到非法调试解决
2.对该网站进行抓包分析
当我们进行抓包分析时,发现该网址的数据是经过加密的,具体是什么加密,我们需要一步步来,具体分析。
首先我们要做的就是拿到这一串加密数据。该数据是通过发送post请求得到的.
那么这时我们就需要找到他的在发送请求是所携带的参数,也就是Form Data(负载),该网址的参数为 hq4D4VYuB,一般来说参数名是不变的,参数值是变化的,但是这个网址是一个动态的js,是在不停变化的,大约10分钟,Form Data(负载)里面的参数值和参数名都会变化.
那么难度可想而知.
废话少说,我们进行参数的搜索,看他怎么加密的,这里可以通过全局搜索进行查找,也可以通过调用栈分析,进入如下图第三个调用栈
进入后 ctrl + f 进行搜索hq4D4VYuB,找到它的位置打上断点进行调试,
3.通过断点调试进入函数,分析函数的加密方法
注意在这里我们不能点击刷新调试,点击它我们是不会再断点处停止的.
正确的调试方法为选择其他城市,进行断点的调试
很好我们已经成功进入到了调试阶段
打上断点调试发现hq4D4VYuB由pbPc80T得到,而pbPc80T又是通过函数pbPc80T = pT7KIOse9j0ACVM(m0VmdwcJ2, oEmiM1HfK4)得到,我们通过测试台打印发现
m0VmdwcJ2为固定参数:GETDATA 而oEmiM1HfK4为我们所选的城市构成的一个键值对,即pbPc80T = pT7KIOse9j0ACVM('GETDATA', {city: '北京'}),所以pT7KIOse9j0ACVM是我们需要还原的加密函数.
进入pT7KIOse9j0ACVM加密函数,如下图所示,其中的hex_md5和BASE64均为正常的MD5和BASE64,而AES加密,进行了修改,如下图,传入AES的key与iv进行了md5运算,并截取的不同的部分。
1.这里所需appId,及AES所需的key和iv都是动态的,这里放到加解密所需的参数获取里一起解决。
2.上图中最后一步是对param的AES加密,并不一定,还可能是DES,也可能直接经过base64加密就可以了,既没有AES也没有DES,如下图是我抓的两次对比,可以发现不一样,这里的解决方式也放到加解密所需的参数获取里一起解决
第一种情况:BASE与AES加密
第二种情况:BASE与DES加密
第三种情况:只有BASE加密
这里我们先告一段落
4.寻找数据的加密函数
数据的加密位置:
通过调试我们发现dpWrq为一串加密码文。
在控制台打印dZ1ISMEqP328PD2Ytc(dpWrq),我们发现他变成了明文,也就是说这里就是数据的加密解析。
进入dZ1ISMEqP328PD2Ytc解密函数:
解密函数简单:分别经过AES解密—DES解密—base解密
同之前请求参数加密一样AES,DES的key与iv经过MD5处理了,且是动态变化的,在加解密所需的参数分析
5.加解密所需的参数获取(思路分析)
因为参数是变化的,我们也不知道要去哪里获取,这时我们就要通过大量的分析与寻找试错,功夫不负有心人,
经过不断努力,正确思路如下:
去我们获取数据也网址找到他的Referer
故接下来分析中国空气质量在线监测分析平台|实时监控|PM2.5在线监测这个请求包,同样发现返回的页面信息并没有直接的我们需要的key啊,iv啊,appID啊,继续分析script标签引入的js,如下框的src=/js/encrypt_的链接发现可疑。(注意,这个src后面的v=的数字是变化的,故需从此处页面源代码正则匹配获得)
同理我们在去找到1644988961对应的包看看里面的内容:分析发现这是一个eval加密的内容
在浏览器执行eval后,如下图(代码太长,仅仅截取的部分),发现还有eval,但是eval(dswejwehxt(…))的js代码,是不是眼熟,dswejwehxt是之前分析的一个Base64解密函数.
故在本地将上述代码Base64解密,并eval后的部分js代码如下
终于找到我们所需的KEY,iv,appid了,这些参数都在里面。
故此,所需的均分析完毕,这里再梳理一遍流程:
6.思路流程梳理
1.通过这个中国空气质量在线监测分析平台|实时监控|PM2.5在线监测链接,正则匹配得到js/encrypt_的动态url。
2.请求上面得到的动态url,获得响应数据,响应数据类似于这样eval(dswejwehxt(…))的字符串。
3.解密eval(dswejwehxt(…))字符串,得到明文js代码,并从中解析得到加解密所需的参数,包括aes的key,iv;des的key,iv;appid。
4.加密请求数据,并封装成需要的post请求格式。
5.带着第4步的加密数据,对返回所需接口url:https://www.aqistudy.cn/apinew/aqistudyapi.php发送请求。
6.得到返回的密文数据
7.解密返回的密文数据得到明文。