Python 爬虫进阶必备 | 手撕 jsvmp 之某乎请求头签名算法分析
前言
之前写过关于某乎的文章,是通过补环境完成的感兴趣的可以看看下面的文章
今天推荐一下小小白大佬写的关于这个网站的算法分析文章,xdm 可以卷起来了
网站
aHR0cHM6Ly93d3cuemhpaHUuY29tL3NlYXJjaD90eXBlPWNvbnRlbnQmcT1weXRob24=
加密定位
需要分析的接口以及加密参数 x-zse-96 如下图
直接搜关键字 x-zse-96,发现一个文件,点进去
格式化后再搜索x-zse-96,发现两个可疑入口,分别是这两个
重新刷新网站,可以看到断点断在下图这个地方,选中执行函数可以发现加密入口就是这里
加密分析
s 明文数据:
s = '101_3_2.0+'(版本号) +
'/api/v4/search_v3?t=general&q=python&correction=1&offset=0&limit=20&filter_fields=&lc_idx=0&show_all_topics=0&search_source=Normal+'(接口后缀) +
'"AIAf1GdgbRSPTtoYPsJrpvRp_MB-_8SxwGQ=|1643717522"'(dc0 cookie)
第一层加密
l()(s) = '7dd6414484df2c210ddbb996c55cf64c' -> md5_str
a()(md5_str) = 'a0xqSQe8cLYfSHYyThxBHD90k0xxN9xqf_tqr6UqH9Op'
然后就单步跟,跟到这里就先别跟了,这里正是jsvmp循环一条条执行指令的地方,下面的代码会根据时间来检测调试
"索引:", this.C, " 值:", JSON.stringify(this, function(key, value) {if (value == window) {return undefined} return value})
fix_str = "RuPtXwxpThIZ0qyz_9fYLCOV8B1mMGKs7UnFHgN3iDaWAJE-Qrk2ecSo6bjd4vl5"
3433258 >> 18 = 13
1. 25386 + 3407872 = 3433258
2. 25386 ^ 3407872 = 3433258
3. 25386 | 3407872 = 3433258
最后验证:
可以发现,算法还原下来只有短短的50几行,而且最后本地生成的加密参数跟浏览器生成的完全一致,完结撒花
好了,以上就是今天的全部内容了。
我是没有更新就在摸鱼的咸鱼
收到请回复~
我们下次再见。
对了,看完记得一键四连,这个对我真的很重要。
评论