Python 爬虫进阶必备 | 某网络广播电视台 header 加密参数逻辑分析

2022-12-10 16:07:18 浏览数 (1)

图源:极简壁纸

今日网站

aHR0cHM6Ly93d3cuZ2R0di5jbi9zZWFyY2g/a2V5PSVFNSVBNCVBNyVFNiU5NSVCMCVFNiU4RCVBRQ==

抓包分析

搜索关键词,可以抓到上面的请求

可以看到在 header 中的几个字段应该都是加密的

加密定位

直接检索关键词 x-itouchtv-ca-signature

可以找到下面的文件

在文件中的位置上直接断点,然后点击下一页,就可以看到已经断上了

加密分析

X-ITOUCHTV-Ca-Timestamp

这个见名知义,就是时间戳,并且在上面也可以看到代码

代码语言:javascript复制
d = (new Date).getTime()
"X-ITOUCHTV-Ca-Timestamp": d
X-ITOUCHTV-Ca-Signature

这个字段,涉及到了 o.default 还有 l.default.stringify 还有 v

代码语言:javascript复制
l.default.stringify((0,o.default)(v, "dfkcY1c3sfuw0Cii9DWjOUO3iQy2hqlDxyvDXd1oVMxwYAJSgeB6phO8eW1dfuwX"))

传入的参数 v 是由下面的代码计算出来的

代码语言:javascript复制
var v = "".concat(t, "n").concat(n, "n").concat(d, "n").concat(_);

由上下文可以知道

代码语言:javascript复制
t = 当前请求的方法 post/get
n = 当前请求的链接
d = 时间戳
_ = l.default.stringify(p))
p = (0,r.default)(a)
a = 当前的请求提交的参数

所以目前需要知道的是参数 a 经过的两个方法 l.default.stringify 还有 r.default 分别为什么

单步进入可以看到,这里的 r.default 是一个 md5

经过计算之后的结果,传入 l.default.stringify,继续调试

可以看到这里的 l.default.stringify 就是一个 base64 的编码

经过这样计算之后的结果,和上面的 t,n,d 用 n 拼接到一起,得出参数 v

然后这个 v 经过了 o 之后得到最终的结果

单步进去可以看到

先是进行了一次 hmac

这里的 key 是 dfkcY1c3sfuw0Cii9DWjOUO3iQy2hqlDxyvDXd1oVMxwYAJSgeB6phO8eW1dfuwX

加密的 msg 是 POSTnhttps://gdtv-api.gdtv.cn/api/search/v1/newsn1663207996688nfGfnMG3h1j/3YxyPfIJ2Ag==

ps:注意这里的 msg 拼接使用的是 n

在计算之后使用了 base64 也就是 l.default.stringify进行了编码

最终得出请求需要的 X-ITOUCHTV-Ca-Signature

带入 python 测试结果如下

End.

以上就是全部的内容了,咱们下次再会~

0 人点赞