渗透测试-进阶|适合新手小白:JS算法逆向,断点调试,真实案例
字数 2384 2025-08-30 06:50:27

JS算法逆向与断点调试实战教学文档

一、前言

本教学文档将系统讲解JS算法逆向的核心技术,包括加密算法定位、逆向分析、断点调试等关键技能,适合网络安全初学者快速掌握Web应用安全测试中的JS逆向技术。

二、核心知识点

1. 加密算法定位方法

1.1 网络请求分析法

操作步骤:

  1. 打开浏览器开发者工具(F12)
  2. 切换到"网络(Network)"选项卡
  3. 筛选XHR请求
  4. 查看请求标头(Headers)、载荷(Payload)和响应(Response)
  5. 识别加密参数(如手机号、密码等)

关键点:

  • 重点关注登录、注册等敏感操作的请求
  • 对比明文输入和网络请求中的参数差异
  • 常见加密特征:长度固定、字符集特殊、有规律前缀等

1.2 全局搜索法

操作步骤:

  1. 在开发者工具中使用全局搜索(Ctrl+Shift+F)
  2. 搜索接口名称(如/Vip/LoginResult)
  3. 在搜索结果中找到相关JS代码
  4. 在关键位置添加断点

关键点:

  • 确保在"top"层级进行搜索,而非特定域名下
  • 优先关注ajax请求相关的代码段
  • 查找加密函数调用(如encrypt.encrypt())

1.3 调用堆栈分析法

操作步骤:

  1. 在请求处添加XHR断点
  2. 触发请求使代码暂停
  3. 查看"调用堆栈(Call Stack)"
  4. 从下往上分析调用链
  5. 定位到关键加密函数(如Login函数)

关键点:

  • 调用堆栈的执行顺序是从下往上
  • 关注明显的函数名(如Login、Submit等)
  • 结合函数上下文分析加密逻辑

1.4 标签断点法(补充)

操作步骤:

  1. 在元素面板选中提交按钮
  2. 右键选择"中断(Break on)"
  3. 选择"子树修改"和"属性修改"
  4. 触发点击事件
  5. 跟踪后续执行流程

注意事项:

  • 现代网站可能已对此方法做了防护
  • 不是所有场景都适用

2. 加密算法逆向分析

2.1 控制台验证法

操作步骤:

  1. 定位到加密函数(如encrypt.encrypt)
  2. 在控制台尝试调用该函数
  3. 验证输出结果是否与网络请求一致
  4. 确认加密算法有效性

关键点:

  • 注意函数依赖的全局变量或对象
  • 可能需要先执行相关JS代码声明函数
  • 可复制整个加密函数到控制台测试

2.2 算法提取与复用

操作步骤:

  1. 找到完整的加密函数实现
  2. 提取关键加密代码
  3. 识别加密参数(如公钥、盐值等)
  4. 创建本地JS环境复现加密过程

关键点:

  • 必须获取完整的加密逻辑和参数
  • 注意加密算法的依赖项
  • 可使用在线JS工具(如https://www.wetools.com/js-run)快速测试

2.3 AI辅助脚本生成

操作步骤:

  1. 向AI提供加密函数代码
  2. 指定输入输出要求
  3. 生成批量加密脚本
  4. 测试脚本准确性

示例提示词:
"请根据这段代码写一个脚本,能将1.txt中的每行内容都根据这个进行加密,加密公钥参数是: ***"

3. 实战工具链

3.1 Burp Suite插件法

配置步骤:

  1. 安装PhantomJS(https://phantomjs.org/download.html)
  2. 配置环境变量
  3. 下载jsEncrypter插件(https://github.com/c0ny1/jsEncrypter)
  4. 导入Burp Suite
  5. 修改phantomjs_server.js引用加密脚本

使用流程:

  1. 在插件目录运行phantomjs phantomjs_server.js
  2. Burp中测试连接
  3. 在Intruder模块使用jsEncrypter处理器
  4. 发起攻击并观察加密结果

注意事项:

  • 确保加密脚本路径正确
  • 插件可能出现卡死情况
  • 复杂加密可能需要调整脚本

三、实战案例解析

案例1:登录接口加密逆向

  1. 目标:某网站登录接口的手机号和密码加密
  2. 分析过程:
    • 发现请求中mobile和password参数被加密
    • 全局搜索接口名/Vip/LoginResult
    • 定位到encrypt.encrypt(numMobile)调用
    • 控制台验证加密函数
    • 提取RSA公钥和加密逻辑
  3. 解决方案:
    • 使用AI生成批量加密脚本
    • 对字典进行预处理后爆破

案例2:学信网登录调试异常

特殊现象:

  • 调用堆栈中只有发起程序链
  • 无法直接追踪到登录函数

可能原因:

  • 网站使用了Webpack等模块化方案
  • 函数被混淆或动态加载
  • 存在反调试机制

应对策略:

  • 尝试搜索关键参数名
  • 分析网络请求的initiator
  • 使用Hook技术拦截关键函数

四、进阶技巧与问题排查

1. 常见问题解决方案

  1. 加密函数未定义

    • 检查是否执行了必要的JS文件
    • 在控制台先执行依赖的代码
  2. 加密结果不一致

    • 确认使用了正确的公钥/盐值
    • 检查是否有随机因子干扰
    • 验证加密前的数据处理逻辑
  3. 断点不生效

    • 确认在正确的上下文中设置断点
    • 尝试不同的断点类型(行断点、条件断点等)
    • 检查网站是否有反调试机制

2. 反反调试技巧

  1. 禁用无限debugger:

    • 在debugger语句处右键选择"Never pause here"
    • 使用条件断点绕过
  2. 处理代码混淆:

    • 使用Source Map文件
    • 借助AST分析工具
  3. 动态加载代码:

    • 使用"Event Listener Breakpoints"
    • 监控script元素的加载

五、总结与学习路径

1. 技术要点总结

  1. 加密定位四板斧:

    • 网络请求分析
    • 全局代码搜索
    • 调用堆栈追踪
    • 元素断点监控
  2. 算法逆向三要素:

    • 完整加密逻辑
    • 正确加密参数
    • 可复现的环境
  3. 工具链选择:

    • 简单场景:控制台+AI辅助
    • 复杂场景:Burp插件+本地JS环境
    • 特殊场景:自定义Hook脚本

2. 后续学习建议

  1. 深入学习JS语言特性
  2. 掌握常见加密算法原理
  3. 熟悉Webpack等模块化方案
  4. 了解AST抽象语法树
  5. 研究反混淆技术

通过本教学文档的系统学习,您已经掌握了JS算法逆向的基础方法论和实战技巧,后续可通过大量实战案例积累经验,逐步提升逆向分析能力。

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算法逆向的基础方法论和实战技巧,后续可通过大量实战案例积累经验,逐步提升逆向分析能力。