点点数据人均启动接口逆向实录:你以为在解密,其实你在读 Protobuf
文章目录
- 声明
- 前言
- 一、第一步先别急着脑补
- 二、先打请求,马上遇到第一个坑:`k` 的路径错一位,全盘皆输
- 2.1 错误的直觉
- 2.2 正确的签名路径
- 三、真正的破案时刻:它不是加密文本,它是二进制 `protobuf`
- 3.1 怎样快速判断不是 AES 密文
- 3.2 前端关键证据
- 证据一:接口响应被当成 `arraybuffer`
- 证据二:响应被 `protobuf` 模型解码
- 四、前端不是只告诉你“它是 Protobuf”,还告诉你“数据怎么还原成业务值”
- 五、手撕这个 Protobuf:不用 `.proto`,照样把结构摸出来
- 5.1 顶层结构
- 5.2 `data` 层结构
- 5.3 单条 item 结构
- 5.4 为什么 `stats_raw` 和 `avg_stats_raw` 是 packed varints
- 六、这次逆向最重要的心法:先最小可用,不要一上来建帝国
- 七、纯 Python 落地方案长什么样
- 7.1 `k` 参数生成
- 7.2 响应解析
- 7.3 业务字段转换
- 7.4 时钟偏移容错
- 参考python代码
- 八、现场样本:解出来的数据长什么样
- 8.1 主应用某月数据
- 8.2 对比应用某月数据
- 九、结语
声明
本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请私信我立即删除!
前言
这次需求是有人找我做的,没想到我新的账号还没权限看,开会员还要好几千一个月,那还是拉倒吧,直接给大哥说分析不了,没权限,大哥二话不说直接找公司商务要了个会员号给我分析,所以才有的这篇文章。
这次目标很明确:
- 页面主页:
https://app.diandian.com/app/q4kdipukpzo9twn/googleplay-perstarts?... - 目标接口:
https://api.diandian.com/pc/app/v2/stat/frequency/avg/month
最终诉求:把“响应体数据解密”完整还原
已知条件:请求里的
k参数我们已经逆出来了,算法过程可以看 点点数据 k参数逆向实战:别怕,它不是
