实战——记一次利用AI实现逆向绕过防重放、sgin值伪造,全数据包加密
字数 1691 2025-11-21 12:47:20
利用AI辅助实现逆向分析:绕过防重放、签名伪造与数据包加密
1. 背景介绍
在安全测试过程中,经常会遇到采用防重放机制、签名验证和全数据包加密的API接口。本文通过实际案例,详细讲解如何利用AI辅助分析,逆向并绕过这些安全机制。
2. 目标分析
目标网站API具有以下安全特性:
- 防重放机制:基于
nonce参数防止请求重放 - 签名验证:通过
signature参数验证请求完整性 - 全数据包加密:采用AES加密传输数据
3. 环境准备
- 浏览器开发者工具(F12)
- Python 3.x环境
- 基本的JavaScript逆向知识
- AI辅助工具(用于代码分析和生成)
4. 绕过防重放机制
4.1 识别防重放参数
- 首次发送请求后,尝试重放,系统返回"不能重复发包"错误
- 分析错误信息,确定防重放参数为
nonce
4.2 定位nonce生成函数
- 在浏览器开发者工具中搜索"nonce"关键字
- 找到生成函数:
Ge().replaceAll('-', '') - 分析代码:
Ge()函数生成原始值,然后移除其中的短横线
4.3 逆向分析nonce生成逻辑
- 在
Ge()函数处设置断点 - 分析函数实现,发现其为标准UUID生成函数
- 使用AI工具生成对应的Python实现:
import uuid
def generate_nonce():
"""生成符合要求的nonce值"""
return str(uuid.uuid4()).replace('-', '')
4.4 验证绕过效果
使用新生成的nonce值替换原请求中的nonce,成功绕过防重放检测。
5. 破解签名验证
5.1 定位签名生成函数
- 在之前定位nonce的位置附近,发现签名参数
signature - 找到签名生成函数调用:
l = un(i, r, e, t, s)
5.2 分析签名生成过程
- 进入
un()函数并设置断点 - 跟踪函数执行流程,发现最终生成变量
d d被传递给xo(d)函数进行加密处理
5.3 确定签名数据组成
通过控制台打印d的值,分析其组成结构:
请求体的JSON格式 + nonce + timestamp
示例:{"param1":"value1","param2":"value2"}1234567812345678
5.4 识别加密算法
- 分析
xo()函数,确定使用SHA1加密算法 - 判断依据:签名值为40位十六进制字符串(SHA1特征)
- 使用AI工具分析并生成对应的Python实现:
import hashlib
def generate_signature(request_body, nonce, timestamp):
"""生成签名值"""
# 拼接签名原始数据
raw_data = request_body + nonce + timestamp
# SHA1加密
signature = hashlib.sha1(raw_data.encode()).hexdigest()
return signature
5.5 完整签名生成流程
import json
import time
import hashlib
import uuid
def generate_api_request(params):
"""生成完整的API请求"""
# 生成必要参数
nonce = str(uuid.uuid4()).replace('-', '')
timestamp = str(int(time.time() * 1000)) # 毫秒时间戳
# 准备请求体
request_body = json.dumps(params, separators=(',', ':'))
# 生成签名
signature = generate_signature(request_body, nonce, timestamp)
# 构造最终请求
request_data = {
'body': params,
'nonce': nonce,
'timestamp': timestamp,
'signature': signature
}
return request_data
6. 处理数据包加密
6.1 识别加密方式
通过分析代码,确定数据包使用AES加密:
- 加密模式:通常为CBC模式
- 密钥长度:128位或256位
- 填充方式:PKCS7
6.2 加密逆向要点
- 定位加密函数入口点
- 提取加密密钥和IV(初始化向量)
- 确定加密模式和填充方式
- 实现对应的解密函数
6.3 Python加解密实现
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
class AESCipher:
def __init__(self, key, iv):
self.key = key.encode()
self.iv = iv.encode()
def encrypt(self, data):
"""AES加密"""
cipher = AES.new(self.key, AES.MODE_CBC, self.iv)
encrypted = cipher.encrypt(pad(data.encode(), AES.block_size))
return base64.b64encode(encrypted).decode()
def decrypt(self, encrypted_data):
"""AES解密"""
encrypted_bytes = base64.b64decode(encrypted_data)
cipher = AES.new(self.key, AES.MODE_CBC, self.iv)
decrypted = unpad(cipher.decrypt(encrypted_bytes), AES.block_size)
return decrypted.decode()
7. AI辅助分析技巧
7.1 代码分析辅助
- 将混淆的JavaScript代码提供给AI分析
- 请求AI解释代码逻辑和功能
- 生成对应的Python实现
7.2 加密算法识别
- 提供加密前后的示例数据
- 利用AI分析可能的加密算法
- 验证算法猜测的正确性
7.3 调试技巧
- 合理设置断点位置
- 使用控制台打印关键变量值
- 逐步跟踪函数执行流程
8. 完整攻击流程
- 信息收集:分析API接口和错误响应
- 参数定位:找到关键安全参数(nonce、signature)
- 函数逆向:定位生成函数并分析逻辑
- AI辅助:利用AI工具辅助代码分析和生成
- 代码实现:编写Python脚本复现逻辑
- 验证测试:测试绕过效果并优化
9. 防御建议
9.1 增强防重放机制
- 使用更复杂的nonce生成算法
- 添加时间窗口限制
- 服务端缓存已使用的nonce
9.2 强化签名验证
- 引入appKey和appSecret机制
- 使用更安全的哈希算法(如SHA256)
- 添加请求体排序规则
9.3 完善加密方案
- 使用动态密钥交换机制
- 定期更新加密密钥
- 添加完整性校验
10. 总结
通过本案例可以看出,结合传统逆向工程方法和AI辅助分析,可以有效地破解复杂的安全机制。安全开发人员应该意识到,单纯依赖客户端安全措施是不够的,必须结合服务端验证和更完善的安全架构来保护系统安全。
注意:本文仅用于安全研究和学习目的,请勿用于非法用途。