爬虫逆向之 Mytoken,技巧 + 经验快速解决 JS 机密算法
《Python 爬虫 120》专栏目前进展到 70+文章,接下来的一段过程我们将重点关注 JS 加密,APP 逆向相关内容
📢📢📢这个阶段会反复的涉及部分版权问题,所以我们会隐藏部分数据,目标关键词采用 Urlencode,例如:✋小红书 =
%E5%B0%8F%E7%BA%A2%E4%B9%A6
✋目标网址 统一采用 中文转 Unicode,例如本节课的案例 https://www.mytokencap.com/ =
\u0068\u0074\u0074\u0070\u0073\u003a\u002f\u002f\u0077\u0077\u0077\u002e\u006d\u0079\u0074\u006f\u006b\u0065\u006e\u0063\u0061\u0070\u002e\u0063\u006f\u006d\u002f
如果大家觉得好麻烦,请直接查看置顶评论,里面会直接展示相关数据。
📢📢📢
⛳️ 实战场景
在今天的目标站点(请自行转码: \u0068\u0074\u0074\u0070\u0073\u003a\u002f\u002f\u0077\u0077\u0077\u002e\u006d\u0079\u0074\u006f\u006b\u0065\u006e\u0063\u0061\u0070\u002e\u0063\u006f\u006d\u002f
)的请求参数中,出现了如下参数:
code: 347881f07057eb2eb6949d6a4e6efac4
首先看一下该加密内容的长度,如果未 32,那大概率就是 md5 加密形式。
当你随着 Python 爬虫程序越写越多,你将能一眼识别出 md5 加密,毕竟这种格式太常见了。
⛳️ 加密参数解析流程
当你通过参数值推断出大概的加密方式之后,顺着这个思路就可以去求解加密算法了。
首先使用开发者工具检索参数名 code
,如果可以直接定位到参数生成地址,本案例的 JS 加密,直接解决。
唤醒开发者工具之后,发现无法直接定位,code 参数还是太常见了。
如果工期不是很紧张,你可以一个个的点击进行检索,总有发现的时候。
直接第二种思路,关键请求打断点
随意找到一个带 code
参数的请求,然后提取其请求地址中的关键值,例如下图所示内容。
上图展示的关键参数是 tucker/currencylist
,其中域名相关信息因版权问题已经隐藏。
切换到开发者工具的 Sources
选项卡,同时在右侧的 XHR/fetch Breakpoints
中添加一个 URL contains
断点。
实现效果如下所示:
接下来回到网页,刷新一下,一般我喜欢强制刷新,防止读取缓存。
进入网页断点当出现如下所示界面时,表示 JS 已经进度断点模式,剩下的就是一步步跟进调试。
格式化下代码,点击上图蓝色按钮。
鼠标移动到关键参数,发现已经存在值,此时证明在之前的代码中有赋值操作,继续翻阅代码。
此时还需要注意一下右侧 Call Stack
相关内容。
Call Stack
执行顺序是从下至上,所以在查找代码的时候,依次点击向下查询即可。
在点击代码的时候,要随时注意区域的上下文,例如当翻找到 e.$get
的时候,发现下述代码出现了 t.data.code=o
的代码块,此时如果
既然发现了,立马把断点打在这里的前后文,还有一个知识点需要注意,一般 JS 的加密会写在 app.js 中,顺着找基本都能找到。
取消请求断点,再次刷新页面,等待进入到参数加密代码块。
o=r()
就是我们解题的关键点了
剩下的在 JS 逆向中叫扣 JS 源码,这部分自己来干吧~
版权声明: 本文为 InfoQ 作者【梦想橡皮擦】的原创文章。
原文链接:【http://xie.infoq.cn/article/bcb40745a140f222170524838】。文章转载请联系作者。
评论