js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

时间:2024-01-18 23:28:08

-1.目录

0.参考

1.页面表现

2. 慢镜头观察:低速网络请求

3. 从头到尾调试:Fiddler 拦截 index.html 并添加 debugger;

4. 快速定位 js 代码

5. 还原被混淆压缩的 js

0.参考

https://developers.google.com/web/tools/chrome-devtools/javascript/step-code 如何单步调试代码

https://bindog.github.io/blog/2017/02/02/battle-with-front-end-engineer/ 与前端工程师的较量——Chrome调试工具进阶技巧

1.页面表现

1.1 定位目标元素

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

1.2 查看源代码

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

1.3 全局搜索 port 或 .port 或 GEA

无果,所以才有下文。。。

2. 慢镜头观察:低速网络请求

2.1 Network 面板将 Online 切换到 Slow 3G

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

2.2 硬性刷新,观察到慢速下载和加载 js 代码

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

2.3 等待所有 js 文件下载并加载完毕,端口信息发生了变化

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

另外,也可以使用录制功能观察吧

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

3. 从头到尾调试:Fiddler 拦截 index.html 并添加 debugger;

3.1 Fiddler 添加规则

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

3.2 刷新网页,修改拦截的 index.html 响应

3.2.1 在 <html> 标签之后立马添加 <script>debugger;</script>

3.2.2 将上一步设置的 rule 修改为默认值 Disabled

3.2.3 点击下图的绿底按钮 Run to Completion,恢复正常下载状态

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

3.3 浏览器自动进入调试暂停状态,根据需要步进观察 js 加载顺序

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

4. 快速定位 js 代码

4.1 手动修改 html 目标元素文本

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

4.2 (可选)找到目标元素的父节点,右键添加断点:在子节点发生变化时中断

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

Sources 面板可以看到启用的 DOM 断点

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

4.3 手动再一次执行 js 代码

4.3.1 Sources > Network > 竖三点菜单 > 取消勾选 分组显示, 找到加载的所有 js 文件

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

4.3.2 依次点击浏览 js 文件,ctrl+a 全选代码,右键选择执行代码

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

4.4 运气好的话找到目标 js 文件导致浏览器进入调试暂停状态(之前如果没有在父节点添加断点,则直接观察 html 目标元素文本是否发生变化)

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

4.5 运气不好的话,只能在 html 代码中搜索 js 脚本,逐段复制到 console 执行

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

5. 还原被混淆压缩的 js

5.1 通过在线工具还原

http://jsbeautifier.org/

5.2 通过 console 还原

5.2.0 参考

JS混淆openlaw反爬破解实践 https://zhuanlan.zhihu.com/p/32344678    将eval改为console.log,新建snippet拷贝这一段内容,运行该脚本,在Chrome的console中输出js代码输出结果。

jspacker压缩及解压缩研究(js eval) http://www.cnblogs.com/cc11001100/p/8468508.html    将原文提到的小工具放在了 https://kaisla.top/eval/

5.2.1 使用 Pretty print 重排单行代码

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

5.2.2 将全部代码复制粘贴至 console,并将开头的 eval 修改为 console.log,回车执行

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

5.2.3 console 输出开头依旧是 eval,重复上一步直到输出开头不是 eval

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

5.2.4 取得 console 最终输出代码段,新建代码片段,粘贴并重排,还原第一行的变量定义 _$

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

5.2.5 根据上一步 console 输出还原 js 代码段,适当添加 console.log 观察中间变量输出,运行代码段

js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

5.3 python 模拟 js 代码还原端口信息

In [1]: letter = 'GEGEA'

In [2]: port = ''.join([str('ABCDEFGHIZ'.index(s)) for s in letter])

In [3]: int(port) >> 3
Out[3]: 8080