经过上次对与头条进行分析过后,发现_signature的规律不唯一,此研究的目的是为了找到问题的根本。
现将分析步骤总结如下:
- 当使用webdriver 执行js脚本,模拟下滑操作时, “$_cdc....” in document 为True
- 经过几次运算后使用 k[5] = 4 正常应该为0
- _signature[22]开始生成前会进行以下运算
- 首先会将k[5]取出,然后进行 k[5] << 8 (模拟时k[5]=4, 结果为1024;正常情况k[5] =0,结果为0, 并将结果存入v[1]变量中)
- 然后 [v1] | 16 , 让v[1]与 16 进行或运算(模拟结果为1040,正常结果为16,并将结果存入v[1])
- 然后e=一个14位的数据(例如17673016596089), 然后 e | v[1] (模拟结果为:-773827991, 正常结果为:-773826951,将结果存入v[1]中)
- 将得到的结果 v[1] >>>4 (模拟结果为:220071206,正常结果为220071271)
- 然后将上步骤中结果 与 一个十位数值 进行或运算(例如1610612736) (模拟结果为:1830693942, 正常结果为1830684007)
- 第二十五位结果分别是将第8 步中的结果右移6位 然后与63 想与,随后加上一个数值 ,最后将数值转换为字符
模拟结果 1830683942 >> 6 = 28604436
28604436 & 63 = 20
正常结果 1830684007 >> 6 = 28604437
28604437 & 63 = 21
注(23位为右移24, 24位为右移12)
结论: 第六步给定的16位数据e 二进制后第11位为1 则模拟的_signature[25]结果小于正常;当第一位为0 则模拟结果_signature[25]大于正常。
1040 = d’10000010000’
16 = d’10000’
第六步中给定数据 e 是由字符串t截取一个片段,然后用u(parseint(t[],36))
解决办法:1. 通过mitmproxy 对请求的signature进行替换,
2. 通过mitmproxy 对 $cdc...进行字段进行处理
方法是指为了学习,未能完全整理好,如果有错误,欢迎指正。
如需转载,请注明出处! 谢谢!