前言
在电商数据分析、价格监控与竞品调研场景中,得物 APP 的商品数据具备极高价值。但平台采用私有加密协议 + 证书绑定 + 签名校验三重防护,常规抓包工具无法直接获取明文数据。本文以学习与技术研究为目的,完整讲解得物 APP 抓包环境搭建、私有协议特征分析、关键接口定位与数据解析流程,同时明确合规边界,仅用于合法调试与学习。
一、环境准备与抓包前置条件
1. 硬件与工具选型
- 电脑端:Windows/macOS
- 抓包工具:Charles 4.6+、Fiddler Classic
- 逆向辅助:Frida、Android Studio 模拟器(Root/Xposed 环境)
- 设备:Android 7-11 真机 / 模拟器(高版本系统证书限制更严格)
2. 网络与证书配置
- 电脑与手机连接同一局域网,获取电脑内网 IP
- 安装 Charles 根证书到手机系统证书目录
- 关闭手机系统代理,改用 SocksDroid 全局代理绕过得物代理检测
- 开启 SSL Proxying,添加得物域名:
*.dewu.com、app.dewu.com
3. 常见抓包失败原因
- 证书未安装到系统证书,仅安装用户证书
- APP 启用SSL Pinning,拒绝第三方证书
- 得物检测到代理环境,直接屏蔽网络请求
- 高版本 Android 限制用户证书,需 Root 写入系统证书
二、得物 APP 私有协议核心特征分析
1. 通信协议架构
- 基础协议:HTTPS 1.1/HTTP2,端口 443
- 数据格式:请求密文 + 响应密文,非标准 JSON 明文
- 接口域名:
https://app.dewu.com、https://m.dewu.com
2. 关键加密参数
得物接口请求必须携带以下加密字段,缺一不可:
- sign:请求参数签名,防篡改
- data:业务参数整体加密
- timestamp:时间戳,防重放
- deviceId/imei:设备指纹,关联设备校验
- token/cookie:用户身份校验
3. 加密算法特征
- 对称加密:AES-128-CBC/PKCS7Padding
- 哈希签名:MD5/SHA1 组合签名
- 参数排序:按字典序拼接后加密
- 密钥与偏移量:固定硬编码在客户端代码中,需逆向提取
4. 反爬机制
- 代理检测:拒绝系统代理与 VPN 环境
- 证书绑定:固定服务端证书,拒绝中间人证书
- 频率限制:单设备单 IP 高频请求直接封禁
- 设备指纹:基于 IMEI、AndroidID、MAC 地址生成唯一标识
三、抓包实战:定位商品核心接口
1. 流量过滤与接口筛选
- 启动 Charles,设置过滤规则仅保留
dewu.com域名 - 打开得物 APP,进入商品详情页
- 在抓包工具中筛选 XHR/Fetch 请求,定位商品接口
2. 核心商品接口
- 商品列表接口:
/api/v1/product/search - 商品详情接口:
/api/v1/product/detail - 价格实时接口:
/api/v1/product/price - 库存接口:
/api/v1/product/stock
3. 请求包结构分析
plaintext
POST https://app.dewu.com/api/v1/product/detail Headers: Content-Type: application/json User-Agent: DeWuApp/xxx token: xxxxx deviceId: xxxxx Body: { "data": "加密字符串", "sign": "签名", "timestamp": 1712345678901 }4. 响应包特征
响应体为AES 加密字符串,无明文 JSON,需解密后获取:
- 商品标题、价格、尺码
- 销量、库存、发货地
- 鉴定信息、图片链接
四、私有协议解密与参数逆向
1. 绕过 SSL Pinning
使用 Frida 脚本 Hook 证书校验函数,强制信任 Charles 证书:
javascript
运行
Java.perform(function(){ var TrustManagerImpl = Java.use('com.android.org.conscrypt.TrustManagerImpl'); TrustManagerImpl.verifyChain.implementation = function(){ return null; } })2. 定位加密函数
- 反编译得物 APK,搜索
AES、encrypt、sign关键字 - 定位到
com.dewu.common.security包下加密工具类 - 提取 AES 密钥、IV 偏移量、签名盐值
3. 签名生成逻辑
- 业务参数按字典序排序拼接
- 拼接固定盐值 + 时间戳 + 设备 ID
- MD5 加密后转大写,生成 sign 参数
4. 数据加解密流程
- 请求:明文参数 → AES 加密 → 生成 sign → 发送请求
- 响应:密文数据 → AES 解密 → JSON 格式化 → 提取字段
五、Python 实现商品数据自动采集
核心代码逻辑
- 导入 AES 加密、MD5 签名库
- 配置固定密钥、IV、设备指纹
- 构造请求参数,生成 sign 与加密 data
- 发送 HTTPS 请求,解密响应数据
- 解析商品标题、价格、库存等字段
采集结果示例
json
{ "productId": "123456", "title": "Nike Air Force 1 纯白", "price": 799, "sizeList": ["40","41","42"], "stock": 128, "sales": 12560, "imgUrl": "https://xxx.dewu.com/xxx.jpg" }六、合规声明与风险提示
- 本文仅用于网络安全学习与 APP 调试,禁止用于商业爬虫、批量采集、恶意攻击
- 得物 APP 用户协议明确禁止未经授权的数据抓取,违反将承担法律责任
- 大规模采集可能触犯《网络安全法》《数据安全法》,面临封禁与诉讼风险
- 合法获取数据请通过得物官方开放平台与 API 授权
七、总结
得物 APP 通过私有加密协议、SSL Pinning、设备指纹、签名校验构建了严密的数据防护体系。常规抓包无法获取数据,需结合 Frida 逆向、加解密分析才能完成数据解析。
学习本实战可掌握移动端 APP 协议分析、抓包调试、加密逆向的通用思路,但务必坚守合法合规底线,仅用于技术研究与自我学习。