> 技术文档 > 爬虫逆向之加速乐案例(某某人民网站)

爬虫逆向之加速乐案例(某某人民网站)

#代码星辉·七月创作之星挑战赛#

声明:本文仅作学习交流,请遵守法律法规

案例:aHR0cHM6Ly93d3cuZGFmZW5nLmdvdi5jbi9jb2wvY29sMjU4MzkvaW5kZXguaHRtbA==

请用base64解码

加速乐特征:

三次请求

第一次请求状态码512

第二次请求状态码512

第三次请求200

抓包时候请务必点击保留日志,前两次512就相当于重定向,没点击保留日志是抓不到512的状态的。观察最终生成cookies值

首三位字母是jsl也就是对应加速乐拼音首字母 

第一次请求

查看第一个512的cookies的生成

只响应了一个cookie ,对他第一次请求,并返回了一大段JS代码

 观察第二次512响应

http打勾✔则大概率是接口返回的,也就是第一次512返回的,__jsluid_s值是第一次响应512返回cookies。

__jsl_clearance_s则是第一次512响应返回的js代码生成的cookies

先用正则提取关键js代码,再用execjs.eval方法执行js代码

 最终返回,

进一步处理

         

由第一次请求获取的响应cookies和第一次请求响应文本JS执行获取cookies,携带两者可进行第二次请求

 第二次请求

 请求的是一大坨混淆的JS代码

 我们只需要这一坨

 第三次请求

开始hook cookies

(function () { cookieTemp = document.cookie; Object.defineProperty(document, \'cookie\', { set: function (val) { { //v为监测cookie的键 if (val.includes(\'__jsl_clearance_s\')){ debugger; } } console.log(\'Hook捕获到cookie设置->\', val); cookieTemp = val; }, get: function () { return cookieTemp; }, });})();

先清除cookies 

再打开脚本刷新

脚本断住时,运行 代码段里hookcookies脚本,再把脚本断开,断住

右键点击替换内容,因为加速乐环境会变,但原理一样。

把这一大坨js代码放进nodejs环境里,接下里随便补几个环境

window = globalnavigator = {};navigator.userAgent = \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36\'location = { \"ancestorOrigins\": {}, \"href\": \"https://www.dafeng.gov.cn/col/col25839/index.html?uid=66892&pageNum=4\", \"origin\": \"https://www.dafeng.gov.cn\", \"protocol\": \"https:\", \"host\": \"www.dafeng.gov.cn\", \"hostname\": \"www.dafeng.gov.cn\", \"port\": \"\", \"pathname\": \"/col/col25839/index.html\", \"search\": \"?uid=66892&pageNum=4\", \"hash\": \"\"}document = {}

加速乐补环境毫无难度,比起瑞数来说,瑞数真的补到怀疑人生,不过瑞数大同小异.。

当你补完环境输出的是undefined

但回过头看看定位生成的cookies,有个定时器

把定时器去掉,在引用在自己的环境改为这样即可

 

 引用使用

得出结果

除此之外,加速乐还有一个多哈希特性

 

就是你每次第二次请求这个ha会变成md5,sha1,sha256

搜索hash

 

这个相当于原生库sha1的内容了 

正确做法,先定义需要的哈希

var cryptojs = require(\'crypto-js\')hash1 = { \'sha1\': function (_0x25ab0f) { return cryptojs.SHA1(_0x25ab0f).toString() }, \'md5\': function (_0x432264) { return cryptojs.MD5(_0x432264).toString() }, \'sha256\': function (_0x432264) { return cryptojs.SHA256(_0x432264).toString() }}

 把原本哈希函数删掉

搜索go

go传参的名字是_0x5cbe14,在前面加上

 if (_0x5cbe14[\'ha\'] === \'sha1\') { hash = hash1[\'sha1\'] } ; if (_0x5cbe14[\'ha\'] === \'md5\') { hash = hash1[\'md5\'] } ; if (_0x5cbe14[\'ha\'] === \'sha256\') { hash = hash1[\'sha256\'] } ;

hash函数最后会被调用

 接下来求第二段请求响应go里面内容

 先把node环境改为这样子,便于替换

最后一本,替换go参数,进行第三次请求 

 

完美得出结果

 

总结:

三次请求,得出三次cookie

第一次请求,获取第一次响应cookie,响应内容js执行获取第二次响应cookie 

第二次请求,携带第一次请求获取的两次cookie,得出第三次cookie的获取过程

第三次请求携带第一次请求响应cookie和第三次请求获取的cookie完美得出

总而来说,加速乐没有难度,非常简单。

中国茶文化