js逆向-你要学会偷懒「使用工具」
字数 1105 2025-08-22 12:22:30

JS逆向实战教学:使用工具提高效率

一、准备工作

网站运行时间轴

  1. URL加载
  2. 加载HTML
  3. 加载JS
  4. 运行JS初始化
  5. 用户触发事件
  6. 调用特定JS代码
  7. 明文数据处理
  8. 加密函数处理
  9. 发送加密数据(XHR-SEND)
  10. 接收服务器响应
  11. 解密函数处理
  12. 刷新网页渲染

浏览器调试功能

二、快速定位加解密函数

搜索关键字

  • 登陆时的URI
  • passwd
  • Encrypt/Decrypt
  • 其他相关加密术语

实用脚本

  • HookScript.js:GitHub链接
    • 提供常用断点
    • 禁用无限debugger

三、利用加解密函数的三种方式

  1. 复原原加密逻辑:直接分析并重现加密过程
  2. 抠出原有JS:提取网站原有加密函数直接使用
  3. RPC主动调用:通过远程调用网站已有的加密函数

四、实用工具介绍

1. HookScript.js

// ==UserScript==
// @name 「Hook Script」fuck断点
// @description 一些用于hook的常用断点,禁用无限debug
// 功能:
// 1. JSON.parse调用断点
// 2. 设置document.cookie时断点
// 3. 调用XMLHttpRequest时断点
// 4. 发送POST请求时断点

2. NoDebugger.js

// ==UserScript==
// @name 代码中禁用无限Debugger
// @description 禁用无限Debugger
// 主要功能:绕过网站的反调试机制

3. jsrpc.js

// ==UserScript==
// @name jsrpc模版
// @description 加解密jsrpc自动化脚本
// 配合Sekiro、Mitmproxy使用
// 主要功能:
// 1. 加密接口
// 2. 解密接口

五、实战演示

示例1:寻找加密位置

  1. 使用HookScript.js脚本
  2. 选择方式4:"相同密码多次重复登陆但其值不一样可判断其加盐了"
  3. 点击堆栈nfn下断点
  4. 逐步调试获得加密位置

示例2:jsrpc主动调用

  1. 启动Sekiro服务
    • Windows: bin/sekiro.bat
    • Linux: bin/sekiro.sh
    • Mac: bin/sekiro
  2. 浏览器加载jsrpc.js油猴脚本
  3. 测试接口:
    • 加密:http://127.0.0.1:5612/business-demo/invoke?group=test_cha11&action=encrypt&data=
    • 解密:http://127.0.0.1:5612/business-demo/invoke?group=test_cha11&action=decode&data=

登陆暴力破解实战

  1. 配置Sekiro
  2. 加载油猴脚本
  3. 使用Yakit进行暴力破解
  4. 请求包配置:
    • 请求包1:配置基本参数
    • 请求包2:配置暴力破解参数
  5. 开始执行暴力破解

六、关键代码片段

Sekiro客户端实现

function SekiroClient(wsURL){
    this.wsURL = wsURL;
    this.handlers = {};
    this.socket = {};
    this.webSocketFactory = this.resolveWebSocketFactory();
    this.connect();
}

// 注册加密解密接口
var client = new SekiroClient("ws://127.0.0.1:5612/business-demo/register?group=test_cha11&clientId="+Math.random());
client.registerAction("encrypt", function(request, resolve, reject){
    var data = request['data'];
    var cha = window._v(data);
    resolve(cha);
});
client.registerAction("decode", function(request, resolve, reject){
    var data = request['data'];
    var chaa = window._h(data);
    resolve(chaa);
});

禁用无限Debugger

// 破解无限Debugger
var constructorHook = constructor;
Function.prototype.constructor = function(s){
    if(s == "debugger"){
        return function(){}
    }
    return constructorHook(s);
}

七、项目地址

八、注意事项

  1. 使用前需要将加密函数设置为全局函数,例如:if (!window._h){window._h = h}
  2. 确保Sekiro服务正常运行
  3. 暴力破解需遵守法律法规,仅在授权测试中使用
  4. 油猴脚本需要根据实际域名修改@match规则

通过这套工具和方法论,可以大大提高JS逆向分析的效率,特别是在处理加密算法和反调试机制时。

JS逆向实战教学:使用工具提高效率 一、准备工作 网站运行时间轴 URL加载 加载HTML 加载JS 运行JS初始化 用户触发事件 调用特定JS代码 明文数据处理 加密函数处理 发送加密数据(XHR-SEND) 接收服务器响应 解密函数处理 刷新网页渲染 浏览器调试功能 Chrome高阶调试指南: 知乎文章 二、快速定位加解密函数 搜索关键字 登陆时的URI passwd Encrypt/Decrypt 其他相关加密术语 实用脚本 HookScript.js: GitHub链接 提供常用断点 禁用无限debugger 三、利用加解密函数的三种方式 复原原加密逻辑 :直接分析并重现加密过程 抠出原有JS :提取网站原有加密函数直接使用 RPC主动调用 :通过远程调用网站已有的加密函数 四、实用工具介绍 1. HookScript.js 2. NoDebugger.js 3. jsrpc.js 五、实战演示 示例1:寻找加密位置 使用HookScript.js脚本 选择方式4:"相同密码多次重复登陆但其值不一样可判断其加盐了" 点击堆栈nfn下断点 逐步调试获得加密位置 示例2:jsrpc主动调用 启动Sekiro服务 Windows: bin/sekiro.bat Linux: bin/sekiro.sh Mac: bin/sekiro 浏览器加载jsrpc.js油猴脚本 测试接口: 加密: http://127.0.0.1:5612/business-demo/invoke?group=test_cha11&action=encrypt&data= 解密: http://127.0.0.1:5612/business-demo/invoke?group=test_cha11&action=decode&data= 登陆暴力破解实战 配置Sekiro 加载油猴脚本 使用Yakit进行暴力破解 请求包配置: 请求包1:配置基本参数 请求包2:配置暴力破解参数 开始执行暴力破解 六、关键代码片段 Sekiro客户端实现 禁用无限Debugger 七、项目地址 Tampermonkey脚本库: GitHub HookScript.js: 直接链接 八、注意事项 使用前需要将加密函数设置为全局函数,例如: if (!window._h){window._h = h} 确保Sekiro服务正常运行 暴力破解需遵守法律法规,仅在授权测试中使用 油猴脚本需要根据实际域名修改@match规则 通过这套工具和方法论,可以大大提高JS逆向分析的效率,特别是在处理加密算法和反调试机制时。