流量解密-Web&小程序
字数 1195 2025-08-29 08:30:13

Web流量解密技术详解:Web&小程序逆向分析指南

1. 无限debugger反调试绕过技术

1.1 基本原理

无限debugger反调试通常通过以下几种方式实现:

  • setInterval循环触发debugger
  • setTimeout延迟触发debugger
  • 原型链构造器(Constructor)触发debugger
  • eval函数执行debugger语句

1.2 万能绕过脚本

推荐使用hook技术覆盖关键函数:

// 万能debugger绕过脚本
Function.prototype.constructor_ = Function.prototype.constructor;
Function.prototype.constructor = function() {
    if(arguments[0]==="debugger") {
        return function(){};
    } else {
        return Function.prototype.constructor_.apply(this, arguments);
    }
};

setInterval_ = setInterval;
setInterval = function(a, b) {
    if(a.toString().indexOf('debugger') != -1) {
        return null;
    }
    return setInterval_(a, b);
};

setTimeout_ = setTimeout;
setTimeout = function(a, b) {
    if(a.toString().indexOf('debugger') != -1) {
        return null;
    }
    return setTimeout_(a, b);
};

eval_ = eval;
eval = function(a) {
    if(a.toString().indexOf('debugger') != -1) {
        return function(){};
    }
    return eval_(a);
};

1.3 瑞数WAF绕过实战

  1. 定位入口文件

    • 查找包含无限debugger逻辑的JS文件
    • 通过堆栈调用定位触发位置
  2. 操作步骤

    • 在入口文件开头设置断点
    • 刷新页面使断点生效
    • 在控制台执行绕过脚本
    • 放开断点继续执行

2. 常规JS逆向分析技术

2.1 加密定位方法

  1. 参数搜索法

    • 抓包分析请求参数(如cipherH5)
    • 全局搜索关键参数名
  2. 函数特征搜索

    • 搜索"encrypt"/"encode"等关键词
    • 火狐浏览器可部分反混淆

2.2 AES加密分析实例

  1. 识别加密类型

    • 通过CryptoJS库特征识别
    • 常见模式:AES-CBC-PKCS7
  2. 提取关键参数

    • 获取WordArray格式的key和iv
    • 还原为可用的密钥和初始向量
// WordArray转Hex示例
function wordArrayToHex(wordArray) {
    let hex = '';
    for (let i = 0; i < wordArray.sigBytes; i++) {
        const byte = (wordArray.words[Math.floor(i / 4)] >>> (24 - (i % 4) * 8)) & 0xff;
        hex += byte.toString(16).padStart(2, '0');
    }
    return hex;
}

3. 全混淆JS逆向高阶技术

3.1 JSON Hook技术

生命周期分析

明文数据 -> JSON.stringify -> 加密函数 -> 网络传输
接收数据 -> 解密函数 -> JSON.parse -> 明文数据

Hook实现方法

// Hook JSON.stringify
const stringify_ = JSON.stringify;
JSON.stringify = function(params) {
    console.log("stringify called", params);
    debugger;
    return stringify_(params);
};

// Hook JSON.parse
const parse_ = JSON.parse;
JSON.parse = function(params) {
    console.log("parse called", params);
    debugger;
    return parse_(params);
};

3.2 操作步骤

  1. 在控制台输入Hook代码
  2. 触发业务功能点
  3. 通过调用堆栈定位加密函数
  4. 将加密函数提升为全局函数
// 函数提升为全局示例
window.encryptFunc = function(data) {
    // 原加密函数逻辑
};

4. 非常规加密逆向技术

4.1 国密SM4/自定义算法处理

工具准备

# 安装Sekiro Docker工具
docker pull registry.cn-beijing.aliyuncs.com/iinti/common:sekiro-all-in-one-latest
docker run -d -p 5612:5612 -v ~/sekiro-mysql-data:/var/lib/mysql --name sekiro-all-in-one registry.cn-beijing.aliyuncs.com/iinti/common:sekiro-all-in-one-latest

4.2 Sekiro客户端配置

function SekiroClient(wsURL) {
    // ... 省略构造函数实现 ...
}

var client = new SekiroClient("wss://127.0.0.1:5612/business/register?group=test_web&clientId=" + Math.random());

client.registerAction("River6Enc", function(request, resolve, reject) {
    var data1 = request['data1'];
    var data2 = request['data2'];
    var res = window.River6Enc(data1, data2);
    resolve(res);
});

4.3 Python调用示例

import websockets
import asyncio
import json

async def call_encrypt(data1, data2):
    async with websockets.connect('ws://127.0.0.1:5612/business/invoke') as websocket:
        request = {
            "group": "test_web",
            "action": "River6Enc",
            "data1": data1,
            "data2": data2
        }
        await websocket.send(json.dumps(request))
        response = await websocket.recv()
        return json.loads(response)['data']

4.4 Yakit热加载实现

  1. 编写加密函数调用逻辑
  2. 配置自动化参数处理
  3. 实现请求/响应自动加解密

5. 小程序逆向补充技术

5.1 通用逆向流程

  1. 获取小程序包(.wxapkg)
  2. 使用反编译工具(如wxappUnpacker)
  3. 分析核心业务逻辑
  4. 定位加密/签名函数

5.2 常见保护方式

  • 代码混淆(变量名混淆、控制流平坦化)
  • 逻辑分块加载
  • 核心算法wasm化
  • 签名校验机制

5.3 应对策略

  1. 动态调试

    • 使用模拟器+Charles抓包
    • 配合Chrome DevTools调试
  2. 静态分析

    • 反编译后代码还原
    • 关键函数定位与重构
  3. Hook技术

    • Frida/Xposed框架注入
    • 关键API拦截与修改

6. 实战注意事项

  1. 法律合规

    • 仅用于授权测试
    • 遵守相关法律法规
  2. 技术要点

    • 多维度验证加密逻辑
    • 注意时间戳/随机数等动态参数
    • 处理Cookie/Session等状态保持
  3. 调试技巧

    • 使用条件断点提高效率
    • 记录完整调用堆栈
    • 对比多组数据寻找规律
  4. 反反调试

    • 检测DevTools打开状态
    • 检测执行时间差异
    • 检测代码完整性校验

本技术文档仅用于安全研究学习,请勿用于非法用途。

Web流量解密技术详解:Web&小程序逆向分析指南 1. 无限debugger反调试绕过技术 1.1 基本原理 无限debugger反调试通常通过以下几种方式实现: setInterval循环触发debugger setTimeout延迟触发debugger 原型链构造器(Constructor)触发debugger eval函数执行debugger语句 1.2 万能绕过脚本 推荐使用hook技术覆盖关键函数: 1.3 瑞数WAF绕过实战 定位入口文件 : 查找包含无限debugger逻辑的JS文件 通过堆栈调用定位触发位置 操作步骤 : 在入口文件开头设置断点 刷新页面使断点生效 在控制台执行绕过脚本 放开断点继续执行 2. 常规JS逆向分析技术 2.1 加密定位方法 参数搜索法 : 抓包分析请求参数(如cipherH5) 全局搜索关键参数名 函数特征搜索 : 搜索"encrypt"/"encode"等关键词 火狐浏览器可部分反混淆 2.2 AES加密分析实例 识别加密类型 : 通过CryptoJS库特征识别 常见模式:AES-CBC-PKCS7 提取关键参数 : 获取WordArray格式的key和iv 还原为可用的密钥和初始向量 3. 全混淆JS逆向高阶技术 3.1 JSON Hook技术 生命周期分析 : Hook实现方法 : 3.2 操作步骤 在控制台输入Hook代码 触发业务功能点 通过调用堆栈定位加密函数 将加密函数提升为全局函数 4. 非常规加密逆向技术 4.1 国密SM4/自定义算法处理 工具准备 : 4.2 Sekiro客户端配置 4.3 Python调用示例 4.4 Yakit热加载实现 编写加密函数调用逻辑 配置自动化参数处理 实现请求/响应自动加解密 5. 小程序逆向补充技术 5.1 通用逆向流程 获取小程序包(.wxapkg) 使用反编译工具(如wxappUnpacker) 分析核心业务逻辑 定位加密/签名函数 5.2 常见保护方式 代码混淆(变量名混淆、控制流平坦化) 逻辑分块加载 核心算法wasm化 签名校验机制 5.3 应对策略 动态调试 : 使用模拟器+Charles抓包 配合Chrome DevTools调试 静态分析 : 反编译后代码还原 关键函数定位与重构 Hook技术 : Frida/Xposed框架注入 关键API拦截与修改 6. 实战注意事项 法律合规 : 仅用于授权测试 遵守相关法律法规 技术要点 : 多维度验证加密逻辑 注意时间戳/随机数等动态参数 处理Cookie/Session等状态保持 调试技巧 : 使用条件断点提高效率 记录完整调用堆栈 对比多组数据寻找规律 反反调试 : 检测DevTools打开状态 检测执行时间差异 检测代码完整性校验 本技术文档仅用于安全研究学习,请勿用于非法用途。