记某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: 时间戳
逆向分析步骤
- 使用算法助手暴力hook全局算法
- 确认加密逻辑和密钥位置(位于Java层)
- 分析得出:
- nonce为UUID生成
- timestamp为正常时间戳
- iOS和Android使用相同密钥
0x04 AutoDecoder插件配置
插件安装
从GitHub获取AutoDecoder插件:
https://github.com/f0ng/autoDecoder
接口实现要求
需要实现两个核心功能:
- 解密接口:将加密数据包解密为明文
- 加密接口:将修改后的明文重新加密并更新防护参数
配置注意事项
- 必须勾选"对数据包头进行处理":否则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 关键踩坑点
-
数据格式处理:
- 从Burp获取的json数据有转义字符串
- 使用
strip()处理,不要用re模块自动去掉转义字符串
-
正则表达式:
- 匹配时考虑大小写问题
- 不要自作聪明简化正则表达式
-
返回数据:
- 加密接口必须返回加密后的数据(enc_body),不是明文
- 服务端需要接收的是密文
0x08 实际应用
配置完成后:
- 在Burp Suite中设置AutoDecoder指向本地实现的接口
- 可以在Repeater和Intruder模块中实现:
- 自动解密请求和响应
- 自动更新sign、nonce和timestamp
- 自动重新加密修改后的请求
0x09 总结
通过这种方法,我们成功实现了:
- 自动解密加密数据包
- 绕过基于sign+nonce+时间戳的重放防护
- 在Burp的Intruder模块中实现自动化爆破
这种方法适用于加密逻辑在Java层且没有复杂混淆的APP,对于更复杂的防护机制可能需要结合其他逆向技术。