前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 爬虫进阶必备 | 某网络广播电视台 header 加密参数逻辑分析

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

作者头像
咸鱼学Python
发布2022-12-10 16:07:18
5380
发布2022-12-10 16:07:18
举报
文章被收录于专栏:咸鱼学Python

图源:极简壁纸

今日网站

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 是 POST\nhttps://gdtv-api.gdtv.cn/api/search/v1/news\n1663207996688\nfGfnMG3h1j/3YxyPfIJ2Ag==

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

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

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

带入 python 测试结果如下

End.

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 咸鱼学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 今日网站
    • 抓包分析
      • 加密定位
        • 加密分析
          • X-ITOUCHTV-Ca-Timestamp
          • X-ITOUCHTV-Ca-Signature
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档