JS逆向,前端加密暴力破解(小白无痛学习)
字数 1268 2025-08-20 18:18:23

JS逆向与前端加密暴力破解实战教程

一、无限debugger破解方法

1. 认识无限debugger

无限debugger是网站反调试的常见手段,通常通过debugger语句或Function("debugger").call()等方式实现,导致调试器不断暂停执行。

2. 破解方法

(1) 条件断点法

  • 在Chrome开发者工具中,找到触发debugger的代码行
  • 右键选择"Add conditional breakpoint"
  • 输入条件false,这样断点永远不会触发

(2) 函数重写法

// 重写Function构造函数
Function.prototype.constructor = function() {
    return function(){};
};

// 或者直接禁用debugger
var _constructor = Function.prototype.constructor;
Function.prototype.constructor = function() {
    if(arguments[0] === "debugger") {
        return function(){};
    }
    return _constructor.apply(this, arguments);
};

(3) 禁用所有断点

  • 在Chrome开发者工具的"Sources"面板
  • 点击右上角的"Deactivate breakpoints"图标(六边形带暂停符号)

(4) 使用Never Pause Here功能

  • 在触发debugger的行上右键
  • 选择"Never pause here"

(5) 修改浏览器核心

  • 对于顽固的VM18XX环境,可能需要修改浏览器核心代码
  • 示例代码:
// 在控制台执行
let oldFunction = Function.prototype.constructor;
Function.prototype.constructor = function(a) {
    if(a == "debugger") {
        console.log("debugger blocked");
        return function(){};
    }
    return oldFunction(a);
};

二、加速乐/BAT反爬破解

1. 加速乐原理分析

加速乐通过以下方式实现防护:

  • 动态cookie生成(如__jsl_clearance_s
  • 浏览器指纹检测
  • 行为验证
  • 代码混淆

2. 破解步骤

(1) 获取动态cookie

// 示例:解析加速乐cookie生成逻辑
function getCookie() {
    // 通常包含以下步骤:
    // 1. 获取初始cookie
    // 2. 解析服务器返回的JS挑战
    // 3. 执行数学运算生成最终cookie
    // 4. 设置cookie并重定向
    return calculatedCookie;
}

(2) 绕过浏览器指纹检测

// 覆盖常见指纹检测点
Object.defineProperty(navigator, 'webdriver', {
    get: () => false
});

Object.defineProperty(navigator, 'plugins', {
    get: () => [1, 2, 3],
});

Object.defineProperty(navigator, 'languages', {
    get: () => ['zh-CN', 'zh'],
});

(3) 处理代码混淆

  • 使用AST工具解析混淆代码
  • 关键点:
    • 识别字符串加密
    • 还原控制流平坦化
    • 重建函数调用关系

3. 完整破解流程

  1. 首次请求获取JS挑战
import requests

first_response = requests.get("https://target.com")
jsl_script = extract_jsl_script(first_response.text)  # 提取JS挑战代码
  1. 解析并执行JS代码
import execjs

ctx = execjs.compile(jsl_script)
cookie_value = ctx.call("generateCookie")  # 调用生成cookie的函数
  1. 携带cookie发起正式请求
cookies = {"__jsl_clearance_s": cookie_value}
final_response = requests.get("https://target.com", cookies=cookies)

三、前端加密分析与暴力破解

1. 常见加密方式

  • RSA/AES对称加密
  • 自定义加密算法
  • 哈希运算(MD5, SHA等)
  • 数据编码(Base64, Hex等)

2. 加密定位方法

(1) 搜索关键函数

  • 在开发者工具中搜索:
    • encrypt
    • decrypt
    • sign
    • key
    • AES
    • RSA

(2) XHR断点

  • 在"Sources"面板添加XHR断点
  • 拦截所有包含特定字符串的请求

(3) 堆栈追踪

  • 在加密参数位置下断点
  • 查看调用堆栈(Call Stack)定位加密函数

3. 暴力破解示例

(1) 简单加密破解

// 假设发现如下加密函数
function encrypt(input) {
    var result = "";
    for(var i = 0; i < input.length; i++) {
        result += String.fromCharCode(input.charCodeAt(i) + 1);
    }
    return result;
}

// 暴力破解解密函数
function decrypt(encrypted) {
    var result = "";
    for(var i = 0; i < encrypted.length; i++) {
        result += String.fromCharCode(encrypted.charCodeAt(i) - 1);
    }
    return result;
}

(2) 复杂加密破解流程

  1. 定位加密函数
  2. 提取加密算法
  3. 分析密钥生成方式
  4. 模拟加密过程或直接调用加密函数
  5. 构建自动化破解工具

四、实战技巧与工具

1. 常用工具

  • Chrome开发者工具
  • Fiddler/Charles抓包工具
  • AST解析工具(Babel, Esprima)
  • Python execjs库
  • Node.js调试环境

2. 高级技巧

  • Hook关键函数
// Hook加密函数示例
let oldEncrypt = window.encrypt;
window.encrypt = function(data) {
    console.log("加密输入:", data);
    let result = oldEncrypt(data);
    console.log("加密结果:", result);
    return result;
};
  • 环境模拟
// 模拟浏览器环境
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM(`<!DOCTYPE html>`);
window = dom.window;
document = window.document;
  • 自动化处理
# Python自动化示例
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)

driver.get("https://target.com")
# 执行JS代码破解加密
result = driver.execute_script("return encrypt('test');")

五、注意事项

  1. 遵守法律法规,仅用于授权测试
  2. 复杂加密可能需要动态分析结合静态分析
  3. 注意网站更新频率,加密方式可能经常变化
  4. 处理反调试时要考虑性能影响
  5. 真实环境中可能需要组合多种破解方法

通过以上方法,可以系统性地分析和破解前端加密及反调试机制。实际应用中需要根据具体场景灵活组合这些技术。

JS逆向与前端加密暴力破解实战教程 一、无限debugger破解方法 1. 认识无限debugger 无限debugger是网站反调试的常见手段,通常通过 debugger 语句或 Function("debugger").call() 等方式实现,导致调试器不断暂停执行。 2. 破解方法 (1) 条件断点法 在Chrome开发者工具中,找到触发debugger的代码行 右键选择"Add conditional breakpoint" 输入条件 false ,这样断点永远不会触发 (2) 函数重写法 (3) 禁用所有断点 在Chrome开发者工具的"Sources"面板 点击右上角的"Deactivate breakpoints"图标(六边形带暂停符号) (4) 使用Never Pause Here功能 在触发debugger的行上右键 选择"Never pause here" (5) 修改浏览器核心 对于顽固的VM18XX环境,可能需要修改浏览器核心代码 示例代码: 二、加速乐/BAT反爬破解 1. 加速乐原理分析 加速乐通过以下方式实现防护: 动态cookie生成(如 __jsl_clearance_s ) 浏览器指纹检测 行为验证 代码混淆 2. 破解步骤 (1) 获取动态cookie (2) 绕过浏览器指纹检测 (3) 处理代码混淆 使用AST工具解析混淆代码 关键点: 识别字符串加密 还原控制流平坦化 重建函数调用关系 3. 完整破解流程 首次请求获取JS挑战 解析并执行JS代码 携带cookie发起正式请求 三、前端加密分析与暴力破解 1. 常见加密方式 RSA/AES对称加密 自定义加密算法 哈希运算(MD5, SHA等) 数据编码(Base64, Hex等) 2. 加密定位方法 (1) 搜索关键函数 在开发者工具中搜索: encrypt decrypt sign key AES RSA (2) XHR断点 在"Sources"面板添加XHR断点 拦截所有包含特定字符串的请求 (3) 堆栈追踪 在加密参数位置下断点 查看调用堆栈(Call Stack)定位加密函数 3. 暴力破解示例 (1) 简单加密破解 (2) 复杂加密破解流程 定位加密函数 提取加密算法 分析密钥生成方式 模拟加密过程或直接调用加密函数 构建自动化破解工具 四、实战技巧与工具 1. 常用工具 Chrome开发者工具 Fiddler/Charles抓包工具 AST解析工具(Babel, Esprima) Python execjs库 Node.js调试环境 2. 高级技巧 Hook关键函数 : 环境模拟 : 自动化处理 : 五、注意事项 遵守法律法规,仅用于授权测试 复杂加密可能需要动态分析结合静态分析 注意网站更新频率,加密方式可能经常变化 处理反调试时要考虑性能影响 真实环境中可能需要组合多种破解方法 通过以上方法,可以系统性地分析和破解前端加密及反调试机制。实际应用中需要根据具体场景灵活组合这些技术。