JS 逆向与代码混淆还原相关方法、资源及思路总结

约 6 分钟读完

JS 逆向与代码混淆还原相关方法、资源及思路总结

一、核心目标与场景

  1. 核心目标:破解客户端加密逻辑(如签名、参数加密)、绕过安全验证机制,常见于 API 签名(sign)、数据加密(AES、HMAC 等)分析
  2. 应用场景:网站、微信小程序等,需处理混淆代码还原、加密算法逆向、签名生成逻辑分析等问题

二、代码混淆类型及还原方法

1. 常见混淆类型及特征

混淆类型 特征 还原方法
eval 混淆 eval关键字 去除eval()后在控制台输出,新建 JS 文件优化
JJEncode 包含很多$ 复制代码到控制台执行,查看结果
AAEncode 包含大量颜文字 去掉结尾括号后在控制台执行
JSFuck 包含大量[]()+! 保存到本地,在 node 环境运行
Obfuscator 包含大量0x开头无意义字符串 控制台输出美化代码后断点调试;利用 AST 技术;在线工具(如https://webcrack.netlify.app/、https://deli-c1ous.github.io/javascript-deobfuscator/);结合 AI 还原

2. 混淆基本技术

  • 变量和函数重命名:将有意义的名称改为ab等短名称
  • 字符串编码:将字符串转为十六进制等编码形式
  • 控制流混淆:改变代码执行流程结构,如将if语句转为自执行函数形式

3. 高级混淆技术

  • 代码压缩和优化:移除空白、注释,缩短变量名,简化表达式
  • 代码拆分和重组:拆分成多部分,动态加载执行
  • 自我修改代码:运行时解密并执行自身

三、JS 逆向关键技术与工具

1. AST 技术

  • 定义:抽象语法树,是源代码的树状结构表示,将代码分解为语法单元并展示层次关系

  • 主要用途

    • 代码反混淆:还原变量名、解析控制流混淆、展开常量表达式
    • 代码分析:识别关键函数、提取加密算法、分析数据流
    • 代码修改:插入调试代码、移除反调试代码、修改业务逻辑
  • 常用工具和库:Babel、Esprima、acorn、recast、jscodeshift

  • 基本工作流程:解析(将代码转为 AST)→ 遍历(访问 AST 节点)→ 修改(转换 AST)→ 生成(将 AST 转回代码)

  • 在线工具https://astexplorer.net/、https://www.kitboxpro.com/tools/js-reverse

2. 逆向辅助工具

  • v-jstools
    • 安装:下载项目后,在浏览器开发者模式添加
    • 配置:按自身需求在浏览器中进行相关设置
    • 用途:辅助定位加密逻辑,通过控制台标注加密函数,简化断点调试
  • JSRpc
    • 项目地址:https://github.com/jxhczhl/JsRpc
    • 使用流程:植入 JSEnv 并启动 ws 服务端→本地替换加密函数 JS 文件→访问注册接口测试加密
    • 联动使用:启动 jsrpc 后,将相关代码粘贴到浏览器控制台,替换加密位置内容并调试
  • Autodecode插件(burp插件)

3. 微信小程序相关工具

4. Yak 脚本

  • 特点:专为网络安全测试设计,易于学习,支持热加载,集成能力强
  • 用途:可用于自动测试网站漏洞、模拟攻击验证防御措施等,如在 JS 逆向中配置热加载处理加密逻辑

四、签名绕过相关

1. 常见签名绕过方法

  • 直接提取签名算法:静态分析 JS 代码定位签名生成函数,提取逻辑用其他语言重实现(适用于算法不依赖环境变量的情况)

2. 网站防御措施

  • 将核心算法放在 WebAssembly 中
  • 使用代码混淆增加分析难度
  • 绑定用户会话和设备指纹
  • 设置短时效的签名
  • 服务端加强验证逻辑

五、微信小程序逆向流程

  1. 反编译
    • 运行 wedecode 工具,选择对应选项
    • 对于加密的小程序,先用另一款工具解密
    • 回到 wedecode 工具,输入解密后文件夹路径进行解密
  2. 调试
    • 使用 WechatOpenDevTools-Python 工具,运行后打开微信小程序进行调试
    • 结合反编译代码,分析加密手法、sign 签名等(与浏览器调试类似)

六、案例思路总结

  1. 加密逻辑分析:通过定位数据包,分析启动器,设置断点调试,追踪加密函数及参数(如密钥、向量等)
  2. 混淆代码还原:根据混淆类型特征,选择对应还原方法(控制台执行、在线工具、AST 技术、AI 辅助等)
  3. 工具联动使用:如结合 JSRpc 和魔术方法,利用 v-jstools 辅助定位加密位置,通过 Yak 脚本热加载配置处理加密逻辑
  4. 验证加密逻辑:逆向得到加密算法后,通过测试数据验证,确保还原正确

七、注意事项

  1. 混淆可能轻微影响代码执行性能,且使调试困难
  2. 混淆不是加密,有经验的开发者仍可逆向工程
  3. 确保混淆代码不违反任何开源许可证
  4. 混淆是保护前端代码的有效手段,但不能替代服务器端的安全措施
← JavaScript代码混淆与还原技术 JS逆向-安全辅助项目&Yakit热加载&魔术方法&模版插件语法&JSRpc进阶调用&接口联动 →