渗透测试-进阶|适合新手小白:JS算法逆向,断点调试,真实案例
字数 2384 2025-08-30 06:50:27
JS算法逆向与断点调试实战教学文档
一、前言
本教学文档将系统讲解JS算法逆向的核心技术,包括加密算法定位、逆向分析、断点调试等关键技能,适合网络安全初学者快速掌握Web应用安全测试中的JS逆向技术。
二、核心知识点
1. 加密算法定位方法
1.1 网络请求分析法
操作步骤:
- 打开浏览器开发者工具(F12)
- 切换到"网络(Network)"选项卡
- 筛选XHR请求
- 查看请求标头(Headers)、载荷(Payload)和响应(Response)
- 识别加密参数(如手机号、密码等)
关键点:
- 重点关注登录、注册等敏感操作的请求
- 对比明文输入和网络请求中的参数差异
- 常见加密特征:长度固定、字符集特殊、有规律前缀等
1.2 全局搜索法
操作步骤:
- 在开发者工具中使用全局搜索(Ctrl+Shift+F)
- 搜索接口名称(如/Vip/LoginResult)
- 在搜索结果中找到相关JS代码
- 在关键位置添加断点
关键点:
- 确保在"top"层级进行搜索,而非特定域名下
- 优先关注ajax请求相关的代码段
- 查找加密函数调用(如encrypt.encrypt())
1.3 调用堆栈分析法
操作步骤:
- 在请求处添加XHR断点
- 触发请求使代码暂停
- 查看"调用堆栈(Call Stack)"
- 从下往上分析调用链
- 定位到关键加密函数(如Login函数)
关键点:
- 调用堆栈的执行顺序是从下往上
- 关注明显的函数名(如Login、Submit等)
- 结合函数上下文分析加密逻辑
1.4 标签断点法(补充)
操作步骤:
- 在元素面板选中提交按钮
- 右键选择"中断(Break on)"
- 选择"子树修改"和"属性修改"
- 触发点击事件
- 跟踪后续执行流程
注意事项:
- 现代网站可能已对此方法做了防护
- 不是所有场景都适用
2. 加密算法逆向分析
2.1 控制台验证法
操作步骤:
- 定位到加密函数(如encrypt.encrypt)
- 在控制台尝试调用该函数
- 验证输出结果是否与网络请求一致
- 确认加密算法有效性
关键点:
- 注意函数依赖的全局变量或对象
- 可能需要先执行相关JS代码声明函数
- 可复制整个加密函数到控制台测试
2.2 算法提取与复用
操作步骤:
- 找到完整的加密函数实现
- 提取关键加密代码
- 识别加密参数(如公钥、盐值等)
- 创建本地JS环境复现加密过程
关键点:
- 必须获取完整的加密逻辑和参数
- 注意加密算法的依赖项
- 可使用在线JS工具(如https://www.wetools.com/js-run)快速测试
2.3 AI辅助脚本生成
操作步骤:
- 向AI提供加密函数代码
- 指定输入输出要求
- 生成批量加密脚本
- 测试脚本准确性
示例提示词:
"请根据这段代码写一个脚本,能将1.txt中的每行内容都根据这个进行加密,加密公钥参数是: ***"
3. 实战工具链
3.1 Burp Suite插件法
配置步骤:
- 安装PhantomJS(https://phantomjs.org/download.html)
- 配置环境变量
- 下载jsEncrypter插件(https://github.com/c0ny1/jsEncrypter)
- 导入Burp Suite
- 修改phantomjs_server.js引用加密脚本
使用流程:
- 在插件目录运行
phantomjs phantomjs_server.js - Burp中测试连接
- 在Intruder模块使用jsEncrypter处理器
- 发起攻击并观察加密结果
注意事项:
- 确保加密脚本路径正确
- 插件可能出现卡死情况
- 复杂加密可能需要调整脚本
三、实战案例解析
案例1:登录接口加密逆向
- 目标:某网站登录接口的手机号和密码加密
- 分析过程:
- 发现请求中mobile和password参数被加密
- 全局搜索接口名/Vip/LoginResult
- 定位到encrypt.encrypt(numMobile)调用
- 控制台验证加密函数
- 提取RSA公钥和加密逻辑
- 解决方案:
- 使用AI生成批量加密脚本
- 对字典进行预处理后爆破
案例2:学信网登录调试异常
特殊现象:
- 调用堆栈中只有发起程序链
- 无法直接追踪到登录函数
可能原因:
- 网站使用了Webpack等模块化方案
- 函数被混淆或动态加载
- 存在反调试机制
应对策略:
- 尝试搜索关键参数名
- 分析网络请求的initiator
- 使用Hook技术拦截关键函数
四、进阶技巧与问题排查
1. 常见问题解决方案
-
加密函数未定义
- 检查是否执行了必要的JS文件
- 在控制台先执行依赖的代码
-
加密结果不一致
- 确认使用了正确的公钥/盐值
- 检查是否有随机因子干扰
- 验证加密前的数据处理逻辑
-
断点不生效
- 确认在正确的上下文中设置断点
- 尝试不同的断点类型(行断点、条件断点等)
- 检查网站是否有反调试机制
2. 反反调试技巧
-
禁用无限debugger:
- 在debugger语句处右键选择"Never pause here"
- 使用条件断点绕过
-
处理代码混淆:
- 使用Source Map文件
- 借助AST分析工具
-
动态加载代码:
- 使用"Event Listener Breakpoints"
- 监控script元素的加载
五、总结与学习路径
1. 技术要点总结
-
加密定位四板斧:
- 网络请求分析
- 全局代码搜索
- 调用堆栈追踪
- 元素断点监控
-
算法逆向三要素:
- 完整加密逻辑
- 正确加密参数
- 可复现的环境
-
工具链选择:
- 简单场景:控制台+AI辅助
- 复杂场景:Burp插件+本地JS环境
- 特殊场景:自定义Hook脚本
2. 后续学习建议
- 深入学习JS语言特性
- 掌握常见加密算法原理
- 熟悉Webpack等模块化方案
- 了解AST抽象语法树
- 研究反混淆技术
通过本教学文档的系统学习,您已经掌握了JS算法逆向的基础方法论和实战技巧,后续可通过大量实战案例积累经验,逐步提升逆向分析能力。