有效地进行前端JS逆向需要结合工具使用、调试技巧和系统化的分析方法。以下是关键步骤和技巧总结:
1. 基础准备
掌握JavaScript基础:熟悉变量、函数、闭包、异步编程等核心概念5。
熟练使用浏览器调试工具(Chrome DevTools/Firefox Developer Tools):
Sources面板:格式化代码(点击
{}
)、设置断点(XHR/事件/条件断点)1。Network面板:捕获加密请求,分析参数(如
token
、sign
)19。Console面板:动态执行函数或Hook关键方法9。
2. 逆向核心流程
(1) 定位加密入口
全局搜索:在Sources面板按
Ctrl+Shift+F
搜索参数名(如"nonce"
、password:
)1。调用栈追踪:通过Network请求的
Initiator
标签回溯加密逻辑触发点19。XHR断点:针对特定URL拦截请求,分析参数生成过程4。
(2) 调试与分析
代码格式化:美化压缩代码以提高可读性1。
断点类型:
事件断点:监听
click
、submit
等DOM事件1。条件断点:在加密函数内设置条件(如
param === "target"
)1。Scope面板:查看局部变量、闭包中的关键值(如密钥、盐值)1。
(3) 模拟执行
扣取JS代码:直接提取加密函数(如MD5、RSA),通过
execjs
(Python)调用17。RPC通信:复杂混淆或浏览器依赖场景下,使用
Sekiro
等工具桥接1。无头浏览器:
PlayWright
/Selenium
模拟完整渲染流程1。
3. 实战技巧
(1) Hook技术
拦截关键函数:如
btoa
、encrypt
,通过Tampermonkey注入脚本监听输入输出1,6。
(function() { Var originBtoa = window.btoa; window.btoa = function(data) { console.log("base64 input:", data); return originBtoa(data); } })();
对象属性Hook:使用
Object.defineProperty
监听对象属性变化2。
(2) 反混淆方案
控制流平坦化:使用AST工具(如Babel)还原代码逻辑1。
字符串解密:动态执行提取真实字符串(如数组化字符串)1。
(3) 反调试对抗
绕过
debugger
:右键选择“一律不在此处暂停”或设置条件断点(如
false
)。Hook
Function.Constructor
拦截debugger
语句:
var _constructor = Function.prototype.constructor; Function.prototype.constructor = function(d) { if (d == "debugger") return null; return _constructor(d); };
定时器干扰:清除所有setInterval
:
for (var i = 1; i < 99999; i++) window.clearInterval(i);
4. 常见加密类型与对策
哈希算法(MD5/SHA1):扣取标准实现(如汽车之家MD5案例)1。
RSA加密:提取公钥,使用
rsa
库模拟加密(如苏宁易购登录)1。动态参数:
时间戳:同步生成。
随机数:固定盐值或重放
Math.random()
1。自定义编码:Hook
charCodeAt
分析变异Base64/移位编码1。
5. 高级场景
微信小程序逆向:
解密
.wxapkg
包,反编译源码后导入微信开发者工具调试10。Webpack代码抠取:
提取目标模块,补全依赖后通过
__webpack_require__
调用8。
6. 注意事项
合法性:遵守
robots.txt
,避免高频请求1。维护成本:网站JS更新后需重新分析1。
性能权衡:简单加密扣代码,复杂方案用RPC/无头浏览器1。
通过以上方法,可以系统化地突破前端加密。实际案例中需灵活组合工具与技巧,如汽车之家登录的MD5逆向1或对抗反调试6。更多实战代码可参考腾讯云开发者社区的教程1。