写点什么

爬虫逆向之 Mytoken,技巧 + 经验快速解决 JS 机密算法

作者:梦想橡皮擦
  • 2022 年 5 月 15 日
  • 本文字数:1198 字

    阅读完需:约 4 分钟

《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 加密形式。


my_str = "347881f07057eb2eb6949d6a4e6efac4"
print(len(my_str))
复制代码


当你随着 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 源码,这部分自己来干吧~


发布于: 刚刚阅读数: 3
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
爬虫逆向之Mytoken,技巧+经验快速解决JS机密算法_5月月更_梦想橡皮擦_InfoQ写作社区