小程序绕过sign签名思路
字数 1739 2025-08-06 12:21:05

小程序Sign签名绕过技术深度解析

1. Sign签名概述

1.1 Sign定义与作用

Sign签名是用于验证数据完整性和真实性的安全机制,主要功能包括:

  • 防止参数篡改
  • 防止请求伪装
  • 防止重放攻击
  • 防止数据泄露

1.2 常见生成方式

Sign通常由以下元素组合生成:

  • 秘钥(固定或动态)
  • 时间戳
  • 特殊字符
  • 随机数(nonce)
  • 业务参数

经过特定排序后使用加密算法处理,常见加密算法:

  • MD5(最常见)
  • AES
  • SHA系列

2. 常见绕过手法

2.1 直接测试方法

  1. 弱凭据测试

    • 检查是否为Base64编码(可解码查看原始数据)
    • 检查是否为MD5格式(尝试解密)
    • 检查是否为简单拼接(如参数直接连接)
  2. 删除/置空测试

    • 直接删除sign字段
    • 将sign值置空
    • 修改sign值为随机值
  3. 重放测试

    • 使用历史有效的sign值
    • 修改时间戳但不改sign

2.2 逆向分析方法

当直接测试无效时,可采取逆向分析:

  1. 反编译小程序获取源码
  2. 全局搜索加密函数(如MD5、encrypt等关键词)
  3. 分析sign生成逻辑

3. 详细绕过流程

3.1 工具准备

  1. 解密工具

  2. 反编译工具

  3. 抓包工具

    • Burp Suite
    • Charles/Fiddler

3.2 操作步骤

步骤1:获取小程序包

  • Windows路径:C:\Users\{用户名}\Documents\WeChat Files\Applet\{小程序ID}\
  • 操作要点:
    • 先清空微信小程序
    • 打开目标小程序并操作多个功能
    • 确保所有wxapkg文件下载完成

步骤2:反编译源码

  1. 使用Unpacker解密加密的wxapkg
  2. 使用wxapkg-convertor反编译为可读源码

步骤3:分析加密逻辑

  1. 全局搜索关键词

    • "sign"
    • "MD5"
    • "encrypt"
    • "generateSign"
  2. 典型加密函数分析(案例):

function encryptSign(t) {
    var r = t.biz_content ? JSON.parse(t.biz_content) : {};
    var n = [];
    for (var o in t) "biz_content" !== o && n.push(o + "=" + t[o]);
    n.sort();
    var a = n.join("&") + "ihos-xxx-8";
    return md5(a).toUpperCase();
}

解析:

  • 遍历参数对象t
  • 处理biz_content参数(JSON转对象)
  • 排除biz_content外的参数以"key=value"形式存入数组
  • 按字母升序排序
  • 用"&"连接成字符串
  • 追加固定字符串"ihos-xxx-8"
  • MD5加密后转大写

步骤4:回溯调用链

  1. 查找encryptSign调用位置
  2. 分析参数来源:
    • method: 接口名(常量)
    • app_id: 固定值
    • token_type: "api_credentials"
    • nonce_str: 时间戳
    • version: "v1.0"
    • token: 登录凭证(可能为空)
    • biz_content: 业务参数

步骤5:重构Sign

  1. 按规则组装参数:
    • 按字母顺序排列参数名
    • 用"&"连接键值对
    • 追加固定字符串
  2. MD5加密并转大写

步骤6:测试验证

  1. 使用生成的sign替换原请求中的值
  2. 修改关键参数(如金额、ID等)
  3. 验证是否绕过校验

4. 自动化测试方案(Burpy插件)

4.1 Burpy介绍

GitHub项目:mr-m0nst3r/Burpy
功能:打通BurpSuite和Python,实现自动加解密

4.2 配置步骤

  1. 指定Python脚本路径
  2. 两个核心开关:
    • Enable Processor:用于Intruder等暴力破解时的payload处理
    • Enable Auto Enc/Dec:自动加解密重放请求

4.3 脚本编写示例

def processor(payload):
    # Intruder payload处理逻辑
    return encrypt(payload)

def encrypt(data):
    # 实现加密算法
    return encrypted_data

def decrypt(data):
    # 实现解密算法
    return decrypted_data

4.4 使用模式

  1. 手动模式
    • 右键选择加解密操作
  2. 自动模式
    • 开启Enable Auto Enc/Dec
    • 重放时自动加解密

5. 防御建议

5.1 强化Sign设计

  1. 使用动态秘钥
  2. 加入时效性控制(短时效时间戳)
  3. 使用更安全的算法(如HMAC-SHA256)
  4. 关键操作使用二次验证

5.2 服务端校验

  1. 重放攻击检测
  2. 参数合法性校验
  3. 频率限制

6. 总结

Sign绕过核心思路:

  1. 先尝试简单绕过(删除/置空)
  2. 分析sign格式尝试解密
  3. 逆向分析生成逻辑
  4. 重构sign实现参数篡改
  5. 结合自动化工具提高效率

此技术可应用于:

  • 支付金额篡改
  • 越权访问
  • 敏感信息泄露
  • 业务逻辑绕过等场景
小程序Sign签名绕过技术深度解析 1. Sign签名概述 1.1 Sign定义与作用 Sign签名是用于验证数据完整性和真实性的安全机制,主要功能包括: 防止参数篡改 防止请求伪装 防止重放攻击 防止数据泄露 1.2 常见生成方式 Sign通常由以下元素组合生成: 秘钥(固定或动态) 时间戳 特殊字符 随机数(nonce) 业务参数 经过特定排序后使用加密算法处理,常见加密算法: MD5(最常见) AES SHA系列 2. 常见绕过手法 2.1 直接测试方法 弱凭据测试 : 检查是否为Base64编码(可解码查看原始数据) 检查是否为MD5格式(尝试解密) 检查是否为简单拼接(如参数直接连接) 删除/置空测试 : 直接删除sign字段 将sign值置空 修改sign值为随机值 重放测试 : 使用历史有效的sign值 修改时间戳但不改sign 2.2 逆向分析方法 当直接测试无效时,可采取逆向分析: 反编译小程序 获取源码 全局搜索加密函数 (如MD5、encrypt等关键词) 分析sign生成逻辑 3. 详细绕过流程 3.1 工具准备 解密工具 : 小程序包解密工具: Unpacker 反编译工具 : wxapkg-convertor: GitHub链接 抓包工具 : Burp Suite Charles/Fiddler 3.2 操作步骤 步骤1:获取小程序包 Windows路径: C:\Users\{用户名}\Documents\WeChat Files\Applet\{小程序ID}\ 操作要点: 先清空微信小程序 打开目标小程序并操作多个功能 确保所有wxapkg文件下载完成 步骤2:反编译源码 使用Unpacker解密加密的wxapkg 使用wxapkg-convertor反编译为可读源码 步骤3:分析加密逻辑 全局搜索关键词 : "sign" "MD5" "encrypt" "generateSign" 典型加密函数分析 (案例): 解析: 遍历参数对象t 处理biz_ content参数(JSON转对象) 排除biz_ content外的参数以"key=value"形式存入数组 按字母升序排序 用"&"连接成字符串 追加固定字符串"ihos-xxx-8" MD5加密后转大写 步骤4:回溯调用链 查找 encryptSign 调用位置 分析参数来源: method : 接口名(常量) app_id : 固定值 token_type : "api_ credentials" nonce_str : 时间戳 version : "v1.0" token : 登录凭证(可能为空) biz_content : 业务参数 步骤5:重构Sign 按规则组装参数: 按字母顺序排列参数名 用"&"连接键值对 追加固定字符串 MD5加密并转大写 步骤6:测试验证 使用生成的sign替换原请求中的值 修改关键参数(如金额、ID等) 验证是否绕过校验 4. 自动化测试方案(Burpy插件) 4.1 Burpy介绍 GitHub项目: mr-m0nst3r/Burpy 功能:打通BurpSuite和Python,实现自动加解密 4.2 配置步骤 指定Python脚本路径 两个核心开关: Enable Processor :用于Intruder等暴力破解时的payload处理 Enable Auto Enc/Dec :自动加解密重放请求 4.3 脚本编写示例 4.4 使用模式 手动模式 : 右键选择加解密操作 自动模式 : 开启Enable Auto Enc/Dec 重放时自动加解密 5. 防御建议 5.1 强化Sign设计 使用动态秘钥 加入时效性控制(短时效时间戳) 使用更安全的算法(如HMAC-SHA256) 关键操作使用二次验证 5.2 服务端校验 重放攻击检测 参数合法性校验 频率限制 6. 总结 Sign绕过核心思路: 先尝试简单绕过(删除/置空) 分析sign格式尝试解密 逆向分析生成逻辑 重构sign实现参数篡改 结合自动化工具提高效率 此技术可应用于: 支付金额篡改 越权访问 敏感信息泄露 业务逻辑绕过等场景