前言
本文完整记录包APP逆向分析全流程:从HTTPS抓包→Frida Hook 定位加密算法→破解签名规则→Python 接口对接→自动导出带图Excel商品表全程无加密壳、无复杂混淆,新手也能完整复现!
一、环境准备
1. 运行环境
- 模拟器:雷电模拟器 9(开启 ROOT)
- Python 3.8+
- Frida 环境(电脑 + 模拟器版本一致)
- 抓包工具:Charles / Fiddler
- Python 依赖:
bash
运行
pip install requests frida-tools openpyxl
2. 前置配置
- 模拟器开启 ROOT 权限
- 执行
setenforce 0关闭 SELinux - 安装 Frida-server 并后台运行
二、HTTPS 抓包分析
1. 抓包目标
接口地址:
plaintext
https://****.*****.cn/android/product/ProductList
2. 关键请求参数
plaintext
site、IEID、user_id、sign、pageSize、page、type、version、timestamp、network
3. 抓包发现
- 请求为HTTPS 加密,无法直接查看明文
- 核心校验参数:
sign(32 位小写 MD5) timestamp为 13 位毫秒时间戳- sign 参数动态变化,判定为
参数+密钥/盐值加密
👉 结论:必须通过 Frida Hook 定位 Java 层加密逻辑
三、Frida Hook 逆向(核心步骤)
1. Hook 目标
APP 使用java.security.MessageDigest进行 MD5 加密,Hook 该类获取待签明文
2. Hook 脚本 hook_sign.js
javascript
运行
Java.perform(function() {
console.log("===== ****网 MD5 签名抓包 =====");
const MessageDigest = Java.use("java.security.MessageDigest");
// Hook 算法初始化
MessageDigest.getInstance.overload("java.lang.String").implementation = function(alg) {
console.log("[+] 加密算法:" + alg);
return this.getInstance(alg);
};
// Hook 数据输入(获取真实待签明文)
MessageDigest.update.overload("[B").implementation = function(data) {
const plainText = String.fromCharCode.apply(null, data);
console.log("[+] 待签明文:\n" + plainText);
this.update(data);
};
});
3. 启动 Hook 命令
bash
运行
frida -U -F -l C:\Users\****\Desktop\hook_sign.js
4. Hook 结果(关键破解依据)
成功获取真实待签字符串:
plaintext
983U4DXC82H2SK3AV162M3B5490S1OPI
IEID68ed73c3dd94be2c28040d3b0f37173b
networkWIFI
page1
pageSize20
sitebao66
timestamp1775883999587
typenew
user_id0
version3.0.5
983U4DXC82H2SK3AV162M3B5490S1OPI
四、签名算法 100% 破解
1. 签名规则总结
- 固定前后盐值
plaintext
983U4DXC82H2SK3AV162M3B5990S1OPI
- 参数拼接规则
key直接拼接value,无 &、无等号、固定顺序 - 完整明文结构
plaintext
盐值 + 参数串 + 盐值
- 加密方式
MD5(完整明文).toLowerCase()
2. 固定参数顺序(不可变更)
plaintext
IEID → network → page → pageSize → site → timestamp → type → user_id → version
五、Python 接口对接实现
1. 动态生成合法签名
python
运行
def generate_sign():
timestamp = str(int(time.time() * 1000))
IEID = "68ed73c3dd94be2c28040d3b0f37173b"
SALT = "983U4DXC82H2SK3AV162M3B5490S1OPI"
raw_str = (
f"IEID{IEID}"
f"networkWIFI"
f"page1"
f"pageSize20"
f"sitebao66"
f"timestamp{timestamp}"
f"typenew"
f"user_id0"
f"version3.0.5"
)
full_str = SALT + raw_str + SALT
sign = hashlib.md5(full_str.encode()).hexdigest().lower()
return timestamp, sign
2. 请求商品列表接口
携带合法sign + timestamp即可正常获取数据
六、自动导出 Excel + 嵌入商品图片
功能说明
- 自动请求最新商品数据
- 自动下载商品主图
- 生成 Excel 并将图片嵌入单元格
- 字段包含:序号、ID、款号、品牌、价格、热度、标签、起订量、主图
七、完整成品代码
python
运行
八、运行效果
-
接口返回:
code:0成功获取商品列表 -
生成文件
**网商品列表_带图.xlsx(带图片可视化表格)**/(保存所有商品原图)
-
Excel 支持:直接查看、选款、报价、打印
九、技术要点总结
- 该 APP无强加密、无动态密钥
- 签名核心为固定盐值 + 固定顺序拼接 + MD5
- Frida Hook 是定位明文最直接高效的方式
- 可扩展:多页爬取、自动筛选、批量导出
十、免责声明
- 本文仅用于编程学习、逆向技术研究
- 严禁使用本文技术爬取数据、恶意攻击、商业牟利
- 如侵联删,使用本文内容造成的法律责任自行承担