记某app使用autodecoder插件绕过加密数据包+重放防护
字数 1168 2025-08-22 12:22:30

使用AutoDecoder插件绕过加密数据包和重放防护的完整指南

0x01 背景介绍

在渗透测试过程中,经常会遇到移动应用使用加密数据包和重放防护机制的情况。本文记录了一个实际案例,通过使用AutoDecoder插件成功绕过某APP的加密数据包和重放防护(包含sign、nonce和时间戳机制)的过程。

0x02 准备工作

工具准备

  • 抓包工具:小黄鸟(HTTPCanary) VPN模式
  • 逆向工具:算法助手(用于hook Java层算法)
  • Burp Suite插件:AutoDecoder
  • 测试设备:Android真机(避免虚拟机检测)

目标分析

  • 目标APP有iOS和Android两个版本
  • 使用Flutter框架开发
  • iOS版本防护更强(包含fingerprinthash风控机制)
  • 加密逻辑位于Java层(非so层和js层)

0x03 加密机制分析

数据包特征

  • 所有请求数据包都经过加密
  • 防护机制包含三个关键参数:
    • sign: 签名值
    • nonce: UUID生成的随机值
    • timestamp: 时间戳

逆向分析步骤

  1. 使用算法助手暴力hook全局算法
  2. 确认加密逻辑和密钥位置(位于Java层)
  3. 分析得出:
    • nonce为UUID生成
    • timestamp为正常时间戳
    • iOS和Android使用相同密钥

0x04 AutoDecoder插件配置

插件安装

从GitHub获取AutoDecoder插件:

https://github.com/f0ng/autoDecoder

接口实现要求

需要实现两个核心功能:

  1. 解密接口:将加密数据包解密为明文
  2. 加密接口:将修改后的明文重新加密并更新防护参数

配置注意事项

  • 必须勾选"对数据包头进行处理":否则getheaders获取的数据为空
  • 参考官方demo实现:
    https://github.com/f0ng/autoDecoder/blob/main/flasktestheader.py
    

0x05 解密接口实现

def decrypt_aes_data(encrypted_data):
    """
    自定义AES解密函数
    :param encrypted_data: 加密的数据
    :return: 解密后的明文
    """
    # 这里实现具体的解密逻辑
    # 注意:从Burp获取的json数据可能有转义字符串
    # 需要先strip()处理,不要使用re模块自动去掉转义字符串
    decrypted_data = your_aes_decrypt_logic(encrypted_data.strip())
    return decrypted_data

@app.route('/decrypt', methods=["POST"])
def decrypt():
    # 获取请求数据
    data = request.get_data().decode()
    
    # 解密处理
    decrypted_body = decrypt_aes_data(data)
    
    return decrypted_body

0x06 加密接口实现

@app.route('/encrypt', methods=["POST"])
def encrypt():
    # 获取请求数据
    data = request.get_data().decode()
    
    # 1. 修改POST内容
    modified_data = modify_data(data)
    
    # 2. 生成新的nonce(使用UUID)
    new_nonce = str(uuid.uuid4())
    
    # 3. 获取当前时间戳
    new_timestamp = str(int(time.time()))
    
    # 4. 生成新的sign(根据APP的签名算法)
    new_sign = generate_sign(modified_data, new_nonce, new_timestamp)
    
    # 5. 替换参数并生成新的加密主体
    enc_body = your_aes_encrypt_logic(modified_data)
    
    # 注意:返回的是加密后的数据,不是明文
    return enc_body

0x07 关键踩坑点

  1. 数据格式处理

    • 从Burp获取的json数据有转义字符串
    • 使用strip()处理,不要用re模块自动去掉转义字符串
  2. 正则表达式

    • 匹配时考虑大小写问题
    • 不要自作聪明简化正则表达式
  3. 返回数据

    • 加密接口必须返回加密后的数据(enc_body),不是明文
    • 服务端需要接收的是密文

0x08 实际应用

配置完成后:

  1. 在Burp Suite中设置AutoDecoder指向本地实现的接口
  2. 可以在Repeater和Intruder模块中实现:
    • 自动解密请求和响应
    • 自动更新sign、nonce和timestamp
    • 自动重新加密修改后的请求

0x09 总结

通过这种方法,我们成功实现了:

  1. 自动解密加密数据包
  2. 绕过基于sign+nonce+时间戳的重放防护
  3. 在Burp的Intruder模块中实现自动化爆破

这种方法适用于加密逻辑在Java层且没有复杂混淆的APP,对于更复杂的防护机制可能需要结合其他逆向技术。

使用AutoDecoder插件绕过加密数据包和重放防护的完整指南 0x01 背景介绍 在渗透测试过程中,经常会遇到移动应用使用加密数据包和重放防护机制的情况。本文记录了一个实际案例,通过使用AutoDecoder插件成功绕过某APP的加密数据包和重放防护(包含sign、nonce和时间戳机制)的过程。 0x02 准备工作 工具准备 抓包工具 :小黄鸟(HTTPCanary) VPN模式 逆向工具 :算法助手(用于hook Java层算法) Burp Suite插件 :AutoDecoder 测试设备 :Android真机(避免虚拟机检测) 目标分析 目标APP有iOS和Android两个版本 使用Flutter框架开发 iOS版本防护更强(包含fingerprinthash风控机制) 加密逻辑位于Java层(非so层和js层) 0x03 加密机制分析 数据包特征 所有请求数据包都经过加密 防护机制包含三个关键参数: sign : 签名值 nonce : UUID生成的随机值 timestamp : 时间戳 逆向分析步骤 使用算法助手暴力hook全局算法 确认加密逻辑和密钥位置(位于Java层) 分析得出: nonce为UUID生成 timestamp为正常时间戳 iOS和Android使用相同密钥 0x04 AutoDecoder插件配置 插件安装 从GitHub获取AutoDecoder插件: 接口实现要求 需要实现两个核心功能: 解密接口:将加密数据包解密为明文 加密接口:将修改后的明文重新加密并更新防护参数 配置注意事项 必须勾选"对数据包头进行处理" :否则getheaders获取的数据为空 参考官方demo实现: 0x05 解密接口实现 0x06 加密接口实现 0x07 关键踩坑点 数据格式处理 : 从Burp获取的json数据有转义字符串 使用 strip() 处理,不要用 re 模块自动去掉转义字符串 正则表达式 : 匹配时考虑大小写问题 不要自作聪明简化正则表达式 返回数据 : 加密接口必须返回加密后的数据(enc_ body),不是明文 服务端需要接收的是密文 0x08 实际应用 配置完成后: 在Burp Suite中设置AutoDecoder指向本地实现的接口 可以在Repeater和Intruder模块中实现: 自动解密请求和响应 自动更新sign、nonce和timestamp 自动重新加密修改后的请求 0x09 总结 通过这种方法,我们成功实现了: 自动解密加密数据包 绕过基于sign+nonce+时间戳的重放防护 在Burp的Intruder模块中实现自动化爆破 这种方法适用于加密逻辑在Java层且没有复杂混淆的APP,对于更复杂的防护机制可能需要结合其他逆向技术。