某包网APP 签名破解 + 接口调用 + Excel 带图导出完整教程

36 阅读4分钟

前言

本文完整记录包APP逆向分析全流程:从HTTPS抓包Frida Hook 定位加密算法破解签名规则Python 接口对接自动导出带图Excel商品表全程无加密壳、无复杂混淆,新手也能完整复现!


一、环境准备

1. 运行环境

  • 模拟器:雷电模拟器 9(开启 ROOT)
  • Python 3.8+
  • Frida 环境(电脑 + 模拟器版本一致)
  • 抓包工具:Charles / Fiddler
  • Python 依赖:

bash

运行

pip install requests frida-tools openpyxl

2. 前置配置

  1. 模拟器开启 ROOT 权限
  2. 执行 setenforce 0 关闭 SELinux
  3. 安装 Frida-server 并后台运行

二、HTTPS 抓包分析

1. 抓包目标

接口地址:

plaintext

https://****.*****.cn/android/product/ProductList

2. 关键请求参数

plaintext

site、IEID、user_id、sign、pageSize、page、type、version、timestamp、network

3. 抓包发现

  1. 请求为HTTPS 加密,无法直接查看明文
  2. 核心校验参数:sign(32 位小写 MD5)
  3. timestamp 为 13 位毫秒时间戳
  4. 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. 签名规则总结

  1. 固定前后盐值

plaintext

983U4DXC82H2SK3AV162M3B5990S1OPI
  1. 参数拼接规则key直接拼接value无 &、无等号、固定顺序
  2. 完整明文结构

plaintext

盐值 + 参数串 + 盐值
  1. 加密方式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 + 嵌入商品图片

功能说明

  1. 自动请求最新商品数据
  2. 自动下载商品主图
  3. 生成 Excel 并将图片嵌入单元格
  4. 字段包含:序号、ID、款号、品牌、价格、热度、标签、起订量、主图

七、完整成品代码

python

运行


八、运行效果

  1. 接口返回code:0 成功获取商品列表

  2. 生成文件

    • **网商品列表_带图.xlsx(带图片可视化表格)
    • **/(保存所有商品原图)
  3. Excel 支持:直接查看、选款、报价、打印


九、技术要点总结

  1. 该 APP无强加密、无动态密钥
  2. 签名核心为固定盐值 + 固定顺序拼接 + MD5
  3. Frida Hook 是定位明文最直接高效的方式
  4. 可扩展:多页爬取、自动筛选、批量导出

十、免责声明

  1. 本文仅用于编程学习、逆向技术研究
  2. 严禁使用本文技术爬取数据、恶意攻击、商业牟利
  3. 如侵联删,使用本文内容造成的法律责任自行承担