案例地址:/page/topics/
x-s
x-s比较藏的比较隐晦,找了好一会儿,根据经验找 e.headers 找到的。
最终位置在window.sign(d, e.data)中返回。
可以看到window.sign(d, e.data)返回了x-s和x-t。
并且 d 是 '/api/store/abtest/v3' ,e.data 是undefined。
接下来查看window.sign方法。
把这一整段都拿下来运行,删除无用代码。
运行,成功返回x-s和x-t。
x-b3-traceid
全局搜索x-b3-traceid。找到位置后断点调试。
查看te方法。
math.random()返回选取大于等于 0.0 且小于 1.0 的伪随机值
math.floor(x)返回小于参数x的最大整数,即对浮点数向下取整
charAt(int index)方法是用通过下标取字符
x-b3-traceid 的生成,翻译为python代码:
import random,math
e = ""
for t in range(16):
e+="abcdef0123456789"[math.floor(16 * random.random())]
print(e)
很遗憾,如果这三个参数只是这么构造的话就错了,最后还有一步处理。
最终生成
我测试了之后,发现并没有结束。
经过对比可以发现,最终的x-s和window.sign(d, e.data)的不同,还需要一些处理。
先看e.headers = Ke(Ke(Ke({}, e.headers), f), v)调试。
f是之前生成的x-s和x-t , e.headers是x-b3-traceid。
ke方法。
流程分析完成,后续需要按步骤扣代码补环境。
暂时记录到这里,祝各位五一假期愉快