app so 加密参数分析|protocbuf 分析

android 逆向 25 / 37

本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!

推荐阅读

龙哥 csdn 样本 10
更多 Unidbg 使用和算法还原的教程可见星球: 点击加入龙哥星球
看雪大佬的 protocbuf 分析,可以参考

前言

某程旅行 app,版本 8.37.4,机票接口

r0capture 抓包

经过测试使用 charles 无法抓包,最后选用 frida hook 的方式抓包,使用的工具 r0capture,具体使用参考 github 即可。
巨佬们如果有更好的选择可以分享一下,感谢各位巨老

r0capture 跑起来,成功 hook,可以看到输出的内容全部加密的,不是明文,如果看了上面看雪的文章,就知道这里是 gzip + protocbuf 具体咱们就来分析一下

或者是通过一些特征也能判断出来 1f 8b 就是 gzip 的特征

可以使用 cyberchef 看一下

下面有打印调用栈,可以根据这个去追踪具体细节,先来看看 request

分析 java request protocbuf

打开 jeb 搜索 ctrip.business.sotp.SOTPConnection.sendRequest

分析 Executors.buildRequest 这函数,点击去

arg4.a 函数点进去

看到 ProcoltolHandle.buileRequest 这个函数,这里应该就开始构建 protocbuf

继续跟进 getRequestDataBeanV6 函数

这里先是调用了 ProcoltolHandle.buileRequestHeadV6 函数,来构建 protocbuf 在调用 GzipUtil.compress 函数

在跟进 ProcoltolHandle.buileRequestHeadV6 函数,这里初始化了 RequestHead 对象,下面是开始赋值

点进 RequestHead 这里应该就是 protocbufmessage 了,后面分析完再自己去构建 message 反序列化

这个是该函数的返回值

v1_1 是 request protocbuf,获取 v1_1 的长度,在取出 4: v1_1 length 长度的数据,也就是省略前四个元素的数据
返回再来个 gzip 压缩数据

分析 java response protocbuf

打开 ctrip.business.comm.ProcoltolHandle 类下有 buildRequest 函数,往下翻一番就会发现有个 buileResponse 函数,这个就是处理 response 的逻辑

逻辑跟 request 差不多,先 gzip 解压缩在 protocbuf 反序列化

点进 getResponseDataBeanV6 -> buileResponseHeadV6 函数,里面有个 ResponseHead

这里就是 response protocbuf message

Tips: 这个样本只是 header 做了 protocbuf,body data 部分还是 gzip

编写 proto 文件

jeb 打开 ctrip.business.model.header 这个类,打开 RequestHead

根据这些来编写 protocbufrequest.proto 文件,写完后使用 protoc ./request.proto --python_out=./ 命令生成 python 文件

同样在继续编写 response.proto 文件

protocbuf 反序列化

request

使用 r0capture 抓的包都是 hexdump 格式,可以使用 cyberchef 转成 hex

因为内容比较多,我就直接复制 hex 到文件里

然后使用 python 去解码

运行代码 request head 已经解出来了,下面的就是 request body

response

response 跟上面逻辑一样

response headresponse body 也是全部解码出来了

暂无评论
本文作者:
本文链接: https://www.qinless.com/?p=942
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 qinless 的博客!
100

发表评论

返回顶部