流量解密-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绕过实战
-
定位入口文件:
- 查找包含无限debugger逻辑的JS文件
- 通过堆栈调用定位触发位置
-
操作步骤:
- 在入口文件开头设置断点
- 刷新页面使断点生效
- 在控制台执行绕过脚本
- 放开断点继续执行
2. 常规JS逆向分析技术
2.1 加密定位方法
-
参数搜索法:
- 抓包分析请求参数(如cipherH5)
- 全局搜索关键参数名
-
函数特征搜索:
- 搜索"encrypt"/"encode"等关键词
- 火狐浏览器可部分反混淆
2.2 AES加密分析实例
-
识别加密类型:
- 通过CryptoJS库特征识别
- 常见模式:AES-CBC-PKCS7
-
提取关键参数:
- 获取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 操作步骤
- 在控制台输入Hook代码
- 触发业务功能点
- 通过调用堆栈定位加密函数
- 将加密函数提升为全局函数
// 函数提升为全局示例
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热加载实现
- 编写加密函数调用逻辑
- 配置自动化参数处理
- 实现请求/响应自动加解密
5. 小程序逆向补充技术
5.1 通用逆向流程
- 获取小程序包(.wxapkg)
- 使用反编译工具(如wxappUnpacker)
- 分析核心业务逻辑
- 定位加密/签名函数
5.2 常见保护方式
- 代码混淆(变量名混淆、控制流平坦化)
- 逻辑分块加载
- 核心算法wasm化
- 签名校验机制
5.3 应对策略
-
动态调试:
- 使用模拟器+Charles抓包
- 配合Chrome DevTools调试
-
静态分析:
- 反编译后代码还原
- 关键函数定位与重构
-
Hook技术:
- Frida/Xposed框架注入
- 关键API拦截与修改
6. 实战注意事项
-
法律合规:
- 仅用于授权测试
- 遵守相关法律法规
-
技术要点:
- 多维度验证加密逻辑
- 注意时间戳/随机数等动态参数
- 处理Cookie/Session等状态保持
-
调试技巧:
- 使用条件断点提高效率
- 记录完整调用堆栈
- 对比多组数据寻找规律
-
反反调试:
- 检测DevTools打开状态
- 检测执行时间差异
- 检测代码完整性校验
本技术文档仅用于安全研究学习,请勿用于非法用途。