该文章主要提供交流学习使用。严禁用于商业用途,否则由此产生一切后果与作者无关,如有侵权请联系作者进行删除。
一. 找到切入点。
window.byted_acrawler.sign("", __ac_nonce);这个就是生成__ac_signature的方法了。
二. 打日志点分析。
断点打完总共输出了1万多行的日志。最终得到'_02B4Z6wo00f018rArUgAAIDCy0Kqc2ebPfvK4KnAAJTEc3'
日志我们从头分析。
获取当前10位数的时间戳。
然后看到对时间戳进行遍历对每个字符进行charCodeAt获取Unicode编码进行运算获取最终值2469814081
接着往下看发现对当前域名也进行了同样的遍历预算并且是从2469814081开始的最后获得值为4293367130
然后把4293367130进行运算得出4071631698然后转成二进制为11110010101100000010101101010010在转成1000000011000011110010101100000010101101010010用parseInt方法最后得到35394602150738
同样的遍历得到47708564
后面日志大部分都是环境检测可以先跳过。
来着这边看到5个字符一组生成了3组字符,跟我们最终结果要的__ac_signature部分一致。
往下看到根据user-agent用上面同样的方便进行遍历并且是从上面得到47708564开始运算得到2985782231。
接着对__ac_nonce一样的遍历方式也是从47708564运算得到3999389437
接着又生成三组字符拼接。
前面这个版本可以固定测试不校验。
最后把拼接成的这个进行同样的遍历但运算方法跟上面的稍有不同得出3343502787
在进行toString(,16)的方法得出的数进行截取6-8在拼接前面的得出完整的结果_02B4Z6wo00f018rArUgAAIDCy0Kqc2ebPfvK4KnAAJTEc3
ps:对运算过程不清楚的可以根据前面的索引进行打断点一步步跟
三. 生成流程。
1.对时间戳进行遍历运算从0开始。
2.在用1得出来的结果对当前域名进行同样的遍历运算。
3.在用2得出来的结果进行遍历运算得到一串二进制
在把这串二进制同样进行遍历运算从0开始。
4.对UA进行遍历运算从3得出的数开始。
5.然后进行6组字符串的运算每组需要用的起始数字,都是从1-4得出的数运算而来。每组都是5个字符串其中第二组是6个字符
6.最后用_02B4Z6wo00f01和第5步得出数拼接成一个字符串,在进行遍历运算转化截取最后两位拼接成最终结果。ps:00f有可能会变动但是测试不影响。
最后测试下生成一样,请求也可以用。