JSHookMCP JS Hook与LLM反混淆:如何定位加密函数并还原混淆逻辑
【免费下载链接】jshookmcpjs hook toolkit that all you need项目地址: https://gitcode.com/gh_mirrors/js/jshookmcp
面对一段被压缩、变量名全被改写成_0x1a2b的 JS 代码,手动找加密函数几乎是不可能的。开源项目JSHookMCP是一个为 AI 智能体打造的 JS Hook 与前端逆向工程工作台,内置detect_crypto(加密算法检测)、deobfuscate(webcrack 反混淆)、js_deobfuscate_pipeline(三段式还原管线)等工具,还能借助LLM 反混淆能力自动给混淆标识符起出有意义的名字——把"定位加密函数 + 还原混淆逻辑"变成一条可复现的自动化流水线 🧩。
为什么传统方式很难还原混淆代码?
前端反混淆通常卡在三道坎上:
| 难题 | 表现 | 手工破解的痛点 |
|---|---|---|
| 字符串数组加密 | 所有字符串被移入数组并旋转,运行时再解码 | 要自己写解码器还原上千个字符串 |
| 控制流平坦化 | 直线逻辑被拆成巨型switch派发循环 | 肉眼无法还原原始执行顺序 |
| VM 字节码保护 | 真实逻辑藏在自定义虚拟机指令里 | 需要手工逆向整个解释器 |
JSHookMCP 的思路是让 AI Agent 直接调用结构化的分析工具,每个环节都有对应的专门工具,而不是一句"帮我分析"全靠模型猜。
第 1 步:收集脚本并定位加密函数 🔍
先用collect_code从目标页面收集全部脚本(含内联脚本、动态加载脚本),再用search_in_scripts按关键词检索encrypt、AES、sign、token等线索,最后调用detect_crypto检测加密算法与使用模式。这套"收集 → 搜索 → 识别"的组合拳,工具定义在 definitions.ts,语义分析的执行逻辑在 code-understanding.ts。
定位到疑似加密函数后,understand_code会从结构、业务、安全三个维度做语义分析,帮你判断"这个函数到底是不是签名核心",避免在几十个候选函数上逐一死磕。
第 2 步:按混淆类型选择还原工具 🛠️
detect_obfuscation会先告诉你代码用了哪些混淆技术,再对症下药:
- 普通打包混淆(webpack/browserify):
deobfuscate走 webcrack 引擎,解包 bundle、取消压缩、还原 JSX,实现见 deobfuscation.ts 与 webcrack.ts。 - 字符串数组 + 控制流平坦化:
js_deobfuscate_pipeline提供"预处理 → 反混淆 → 人类化(变量重命名)"三段管线;单点问题也可用analysis_decode_string_array解码字符串数组、analysis_deflat_control_flow拍平 switch 派发。 - JSVMP 虚拟机保护:先用
js_analyze_vm分析解释器结构、派发类型和操作码表,再用js_deobfuscate_jsvmp提取 VM 字节码并还原原始逻辑;detectOnly参数支持只检测不动手,见 jsvmp.ts 与 JSVMPDeobfuscator.ts。
第 3 步:LLM 反混淆——让模型给_0x1a2b起名字 🤖
规则引擎能解开结构,但"这个变量到底叫什么"需要语义理解。JSHookMCP 的llm_suggest_names工具通过 MCP 的sampling/createMessage机制,把任务委托给你客户端里已经连好的 LLM:
- 发送混淆代码片段与标识符列表;
- LLM 按"专家级 JS 逆向工程师"角色返回
{ original, suggested, confidence }结构化的改名建议; - 采样不可用时优雅降级,不影响主流程。
核心实现是 LLMDeobfuscator.ts,通信桥在 LLMSamplingBridge.ts。这样_0x3f2a会恢复成encryptPayload、_0xb9c1变成buildSignUrl这类可读名字——混淆逻辑从此能像普通代码一样读懂。
进阶:动态 Hook 验证 + 符号执行兜底 🧪
静态还原不确定时,还有两条后手:
- 运行时 Hook:
manage_hooks支持对函数、XHR、fetch、WebSocket、localStorage、Cookie 建立 log/block/modify 型钩子,直接在活页面里抓加密函数的真实入参出参,实现见 hooks.ts。 - 符号执行:
js_symbolic_execute遍历所有可行路径并求解路径约束,专治控制流平坦化的复杂分支;js_solve_constraints则负责求解不透明谓词与常量表达式。
一条完整的分析动线速查 ✅
| 阶段 | 工具 | 作用 |
|---|---|---|
| 收集 | collect_code→search_in_scripts | 拿到脚本、锁定线索 |
| 定位 | detect_crypto+understand_code | 识别加密算法与函数语义 |
| 诊断 | detect_obfuscation | 判断混淆类型 |
| 还原 | deobfuscate/js_deobfuscate_pipeline/js_deobfuscate_jsvmp | 按类型解包、管线化还原 |
| 人类化 | llm_suggest_names | LLM 恢复变量与函数名 |
| 验证 | manage_hooks/js_symbolic_execute | 动态抓参、符号执行兜底 |
更多工具细节可查阅官方文档中的 core 域参考 与 transform 域参考。
结语
JSHookMCP 把"JS Hook + 静态反混淆 + LLM 语义还原"整合进同一套 MCP 工具面:detect_crypto帮你定位加密函数,deobfuscate与三段式管线帮你剥掉混淆外壳,llm_suggest_names让 LLM 把代码"翻译回人话"。对新手来说,最大的价值是——你不需要先精通反混淆,只要会按顺序调用这些工具,AI 智能体就能替你完成整条还原链路 🚀。
【免费下载链接】jshookmcpjs hook toolkit that all you need项目地址: https://gitcode.com/gh_mirrors/js/jshookmcp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考