有这么一种网站,访问请求会发送三次,第三次才能返回响应结果,并且前两次返回521状态码,那么这个网站就是采用了加速乐Cookie反爬。
首先看第一次请求,响应的是一段js代码,这段js代码执行后是设置cookie的。
然后是第二次请求,响应的也是段js,这段js是设置第二次的cookie的(__jsluid_s由第一次访问url后服务器那边返回设置的)。第二次的请求需要携带第一次请求返回js执行后设置的cookie。即__jsl_clearance_s为第一次返回内容js执行后的结果。
第三次请求,变的只有__jsl_clearance_s,也就是第二次返回的js执行的一些操作导致cookie的更变。所以我们要逆向的目标就是第二次返回的js内容。
把js复制下来然后贴到控制台代码段那里分析
因为该代码更改的是cookie,所以我们提前控制台输入hook cookie代码,然后提前下断点。
// hook cookie代码
(function () {
'use strict';
var org = document.cookie.__lookupSetter__('cookie');
document.__defineSetter__('cookie', function (cookie) {
if (cookie.indexOf('__jsl_clearance_s') != -1) {
debugger;
}
org = cookie;
});
document.__defineGetter__('cookie', function () {
return org;
});
})();
然后执行代码段,发现断下来了,往前面翻。
跳到这里,发现是由 _0xf60207 返回的,往上找。
发现是由 _0x2a62d8[0x0] 返回的,那么我们找 _0x2a62d8
找到后分析参数,发现参数来源于最下面的ct和bts
那么我们继续找函数,函数在上面
复制到本地然后分析,一步步的从[]那里分析,把混淆值恢复为原始值。
看最后一个判断,发现这个方法是判断arg1是否等于arg2(ct).
再把arg1拆解。
那么第一个参数是hash,第二个参数是_0x3824c6,所以调用的结果就是hash(_0x3824c6)
所以这里的if就是 hash(_0x3824c6) == arg2(ct)。
其实外边无非套两层for循环,然后中间加个判断,判断hash那个值是否等于arg2(ct),相等就返回那个值。
多看两遍,就明白了。