最新雪王 type__1286 参数逆向分析
字数 1174 2025-08-19 12:41:18

雪王 type__1286 参数逆向分析教学文档

一、前言

本文详细分析某雪冰城小程序和App中的type_1286加密参数生成过程。该参数是领取免单券接口的重要加密参数,随着平台安全升级而新增。

二、调试环境搭建

1. APP端调试WebView

所需工具

  • XP模块或LSPosed框架
  • WebView调试模块

步骤

  1. 在模拟器中安装Magisk和LSPosed
  2. 导入WebView模块并选择目标APP
  3. 重启模拟器
  4. 在Chrome浏览器访问chrome://inspect/#devices
  5. 若设备未显示,多次执行adb devices直到设备出现
  6. 点击"inspect"进入调试界面

2. 小程序端调试WebView

步骤

  1. USB连接手机并开启调试模式
  2. 微信访问http://debugxweb.qq.com/?inspector=true验证可用性
  3. 在微信中打开目标小程序页面
  4. Chrome访问chrome://inspect/#devices(需翻墙)
  5. 等待页面加载后点击"inspect"

三、抓包分析

进入免单界面点击领取,观察开发者工具中的网络请求,主要加密参数:

  • URL中的type_1286
  • 提交内容中的sign

四、逆向分析type_1286参数

1. 参数定位

在点击确认时观察调用堆栈,发现关键代码:

var UL = UE['Fu'](this[oA(P7.a)][-0x190d + -0x20e9 + 0x39f7])
UL = F0[oA(P7.A)](UH, UL, UV)

2. 加密流程分析

加密最终通过F6函数生成:

(g += N), 
(N = F[UJ(mS.F)](F[UJ(mS.Y)](F[UJ(mS.U)](F[UJ(mS.a)](F[UJ(mS.A)](M[UJ(mS.D)](g)0xfbf + 0x9 * -0x189 + 0x16 * 0x158, m['n'new Date()[UJ(mS.o)1'), 
g = E['FU']['ua'](N, !(0xbb4 + 0x1a49 * -0x1 + 0xe95)), 
N = {}), 
(N[M['F7'](L[UJ(mS.i)])] = g, 
L[UJ(mS.y)] = (-0x2ff + 0xbe5 + -0x8e6, H['Fa'])(L[UJ(mS.y)], N), 
(0x3 * 0xe5 + -0x614 + 0x1 * 0x365, H['FY'])(L))

简化后流程:

  1. 拼接参数:g = L["FW"] + L["hash"]
  2. 生成中间值:N = (((((sig(g)0)new Date()["getTime"1')
  3. 最终加密:E['FU']['ua'](N, !0)

3. 关键函数分析

(1) sig函数

function sig(L) {
    for (var N = 0, g = encodeURIComponent(L), B = 0; B < g["length"]; B++)
        N = ((((N << 7) - N) + 398) + g["charCodeAt"](B)), N |= 0;
    return N;
}

(2) ua函数

function ua(E, H) {
    var W = ["3", "4", "2", "1", "0"], P = 0;
    while (true) {
        switch (W[P++]) {
            case '0':
                switch (M["length"] % 4) {
                    default: case 0: return M;
                    case 1: return (M + '===');
                    case 2: return (M + '==');
                    case 3: return (M + '=');
                }
            case '1':
                if (H) return M;
                continue;
            case '2':
                var M = uu(E, 6, function(L) {
                    return V["uGGDj"].charAt(L);
                });
                continue;
            case '3':
                var K = {};
                K["uGGDj"] = "DGi0YA7BemWnQjCl4+bR3f8SKIF9tUz/xhr2oEOgPpac=61ZqwTudLkM5vHyNXsVJ";
                var V = K;
                continue;
            case '4':
                if (null === E) return '';
                continue;
        }
        break;
    }
}

(3) uu函数

// 复杂混淆代码,涉及base64编码转换

(4) 解密函数F3

F3 = function(a, A) {
    a = a - (-0x256c + -0x23 * -0x67 + -0x17f3 * -0x1);
    var r = U[a];
    var o = U[0x1b * 0xd3 + -0x2 * -0x1189 + 0xb77 * -0x5],
        n = a + o,
        i = F[n];
    r = i;
    return r;
}

五、实现方案

1. 补环境方案

步骤

  1. 搭建代理环境捕获所有环境检测
  2. 补全检测到的环境变量和方法
  3. 导出F6函数并调用

关键点

  • 需要补全约400行环境检测代码
  • 主要检测createElement及相关属性
  • 最终导出加密函数并调用

2. 算法还原方案

方案一:

  1. 分析并还原sig函数
  2. 分析并还原ua函数
  3. 分析并还原uu函数
  4. 完整扣取解密函数F3
  5. 整合所有函数生成最终参数

方案二(针对解密函数不完整):

  1. 收集所有解密失败的字符串
  2. 创建映射表KKK
  3. 使用Proxy拦截解密函数调用
const kk_handler = {
    apply: function(target, thisArg, argumentsList) {
        let result = target(...argumentsList);
        if (result === undefined && argumentsList in KKK) {
            return KKK[argumentsList];
        }
        return result;
    }
};
F3 = new Proxy(F3, kk_handler);

六、总结

  1. type_1286参数生成流程:

    • 拼接原始参数
    • 通过sig函数计算哈希
    • 结合时间戳生成中间值
    • 通过ua函数进行最终编码
  2. 逆向难点:

    • 重度OB混淆
    • 多层环境检测
    • 动态生成的解密函数
  3. 解决方案选择:

    • 补环境方案代码量大但直接
    • 算法还原方案更简洁但需要深入分析
  4. 完整实现约需8000行代码(补环境)或几百行(算法还原)

雪王 type__ 1286 参数逆向分析教学文档 一、前言 本文详细分析某雪冰城小程序和App中的 type_1286 加密参数生成过程。该参数是领取免单券接口的重要加密参数,随着平台安全升级而新增。 二、调试环境搭建 1. APP端调试WebView 所需工具 : XP模块或LSPosed框架 WebView调试模块 步骤 : 在模拟器中安装Magisk和LSPosed 导入WebView模块并选择目标APP 重启模拟器 在Chrome浏览器访问 chrome://inspect/#devices 若设备未显示,多次执行 adb devices 直到设备出现 点击"inspect"进入调试界面 2. 小程序端调试WebView 步骤 : USB连接手机并开启调试模式 微信访问 http://debugxweb.qq.com/?inspector=true 验证可用性 在微信中打开目标小程序页面 Chrome访问 chrome://inspect/#devices (需翻墙) 等待页面加载后点击"inspect" 三、抓包分析 进入免单界面点击领取,观察开发者工具中的网络请求,主要加密参数: URL中的 type_1286 提交内容中的 sign 四、逆向分析type_ 1286参数 1. 参数定位 在点击确认时观察调用堆栈,发现关键代码: 2. 加密流程分析 加密最终通过 F6 函数生成: 简化后流程: 拼接参数: g = L["FW"] + L["hash"] 生成中间值: N = (((((sig(g)0)new Date()["getTime"1') 最终加密: E['FU']['ua'](N, !0) 3. 关键函数分析 (1) sig函数 (2) ua函数 (3) uu函数 (4) 解密函数F3 五、实现方案 1. 补环境方案 步骤 : 搭建代理环境捕获所有环境检测 补全检测到的环境变量和方法 导出F6函数并调用 关键点 : 需要补全约400行环境检测代码 主要检测 createElement 及相关属性 最终导出加密函数并调用 2. 算法还原方案 方案一: 分析并还原sig函数 分析并还原ua函数 分析并还原uu函数 完整扣取解密函数F3 整合所有函数生成最终参数 方案二(针对解密函数不完整): 收集所有解密失败的字符串 创建映射表KKK 使用Proxy拦截解密函数调用 六、总结 type_1286 参数生成流程: 拼接原始参数 通过sig函数计算哈希 结合时间戳生成中间值 通过ua函数进行最终编码 逆向难点: 重度OB混淆 多层环境检测 动态生成的解密函数 解决方案选择: 补环境方案代码量大但直接 算法还原方案更简洁但需要深入分析 完整实现约需8000行代码(补环境)或几百行(算法还原)