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

-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张图片

 

1.2 查看源代码

1.3 全局搜索 port 或 .port 或 GEA

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

 

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

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第2张图片

 

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第3张图片

 

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第4张图片

 

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第5张图片

 

 

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

3.1 Fiddler 添加规则

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第6张图片

 

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

3.2.1 在 标签之后立马添加  

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

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第7张图片

 

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第8张图片

 

4. 快速定位 js 代码

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第9张图片

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第10张图片

 

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第11张图片

 

4.3 手动再一次执行 js 代码

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第12张图片

 

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第13张图片

 

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第14张图片

 

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第15张图片

 

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 代码_第16张图片

 

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第17张图片

 

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第18张图片

 

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第19张图片

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

[JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码_第20张图片

 

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

 

转载于:https://www.cnblogs.com/my8100/p/js_analysis.html

你可能感兴趣的:([JS 分析] 快速定位 JS 代码,还原被混淆压缩的 JS 代码)