首页
论坛
课程
招聘
[原创]Protobuf协议逆向和仿真&举个栗子
2020-5-2 11:04 10379

[原创]Protobuf协议逆向和仿真&举个栗子

2020-5-2 11:04
10379

一、前言

产品有需求要全力满足,产品没有需求创造需求也要满足。

本次的主角是携程APP。以它为例子介绍一下Protobuf协议逆向分析及协议仿真。

本文你将了解到Google Protobuf的逆向分析及协议还原等知识。

二、目标

机票价格接口

三、逆向过程

按照正常的过程,我们逆向第一步应该是抓包。下面是我抓到的。

看到这里不要怀疑,我们抓包没有问题,那为什么会这样呢。

正常情况下,抓到的包应该是标准的HTTP协议格式,我们实现完成整个报文的仿真模拟,然后发包即可。但是现在,我们什么都看不到。

抓包我使用的工具是Packet Capture,它是基于本地VPN实现的抓包,可以支持TCP及以上层的消息捕获。

那么,我们现在就有理由怀疑,携程的网络通信,没有使用HTTP协议,而是自建协议完成的。

分析完毕,那么下一步我们怎么来找到收发包位置呢。

(此处省略几万字的定位过程)

经过长时间的寻找,后来灵机一动,如果是我来写接收数据的代码,很可能我要写个while True的循环,然后用已经建立连接的socket进行循环接收数据。以此为标识,我们找找看。

紧接着,我们在最后一个结果中找到了想要的接收数据的标识。

当我们跟着这个invokeResponse一直下去,就能找到一个神奇的地方“ctrip.business.comm.ProcoltolHandle”,(在这里你能找到所有的序列化和反序列化过程)到这里,具体的逆向就不表了。相信看到这的同学继续找下去不是问题。从这里我们可以知道,每一个包前面有14个字节的协议头,之后是gzip压缩的结果。再后面是4字节的包体的长度,然后是消息内容。

这样我们就可以写出来解码的代码。

需要说明一下的是,data的来源即是我们抓包抓到的十六进制,copy出来就可以。

接下来着重说一下这个proto_decode。

我们反序列化protobuf是利用google提供的工具protoc.exe,带参数执行可以解码成可读的形式。(感谢YungGong协助)

这个其实就是相当于HTTP协议里的header了,可是我们现在还不知道字段名,记住这些数字。我们在代码里找找看。

通过这个文件我们就知道了文件名和数字序号的关系,然后我们自己写代码,组建一样的message,就可以序列化成他一样的结构了。

这个就是proto文件了,我们再通过命令行,让工具帮我们把这个结构生成为序列化反序列化的类。

protoc.exe --proto_path=D:\code\ctrip\src\main\proto --java_out=D:\code\ctrip\src\main\java D:\code\ctrip\src\main\proto\ResponseHead.proto

然后我们直接调用生成类的接口即可实现参数设置及序列化成byte[]。接下来就要展现出我们正向编码的能力了。完成Header的生成和整个body的组装,通过socket发出即可。

这里还涉及到发送的代码和接收的代码编写,如果不会的话抄一抄Android里的代码。

对了,需要注意的是,这里有一些参数是防爬虫的参数,计算写在so里面,如果不会逆的话,可以参考之前的文章。

安卓逆向 | Java/Native方法强制调用实现方案(一)

这样我们就能嘿嘿嘿。

返回中,除了header就是json格式的body了。下面就是收到的航班信息和价格了。

到这里,整个任务就完成了。

四、总结

这个任务,我们需要学习和具备的知识有:

  1. Proto数据反序列化和Proto文件生成

  2. 收发包socket网络编程

  3. 加密参数逆向和调用

  4. 一大罐耐心

以上。欢迎阅读转发~


想要转载的朋友请告知我之后转载,并注明原帖来源。



【看雪培训】《Adroid高级研修班》2022年春季班招生中!

最后于 2020-5-2 13:35 被燕幕自安编辑 ,原因: 图裂了
收藏
点赞3
打赏
分享
最新回复 (25)
雪    币: 81
活跃值: 活跃值 (545)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
值得怀疑 活跃值 2020-5-2 11:44
2
0
图挂了
雪    币: 1456
活跃值: 活跃值 (868)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
燕幕自安 活跃值 2020-5-2 11:50
3
0
值得怀疑 图挂了
我也很懵逼 改了一次还是不行 我待会再试试
雪    币: 1456
活跃值: 活跃值 (868)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
燕幕自安 活跃值 2020-5-2 11:58
4
0
谁知道为啥啊 传了好几次也一直传不上去图~
雪    币: 257
活跃值: 活跃值 (236)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZwCopyAll 活跃值 2020-5-2 14:49
5
0
图片都不能看
雪    币: 1054
活跃值: 活跃值 (2057)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小黄鸭爱学习 活跃值 2020-5-2 20:25
6
0
图全没了 不过意思我懂了
雪    币: 1038
活跃值: 活跃值 (9862)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2020-5-3 22:31
7
0
帅逼李三郎 谁知道为啥啊 传了好几次也一直传不上去图~
论坛bug,我们正在解决中
雪    币: 3264
活跃值: 活跃值 (226)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
yezheyu 活跃值 2020-5-4 02:19
8
0
学习了,感谢分享
雪    币: 236
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
百战穿金甲 活跃值 2020-5-5 10:50
9
0
学习了,感谢分享
雪    币: 19
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_tfcmlgee 活跃值 2020-5-6 06:07
10
0
学习了 感谢分享
雪    币: 248
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
@=llfly 活跃值 2020-5-7 09:58
11
0
感谢分享
雪    币: 36
活跃值: 活跃值 (400)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
芃杉 活跃值 2020-5-7 10:40
12
0
mark
雪    币: 5266
活跃值: 活跃值 (2329)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
尐进 活跃值 2020-5-8 15:57
13
0
不错
雪    币: 12681
活跃值: 活跃值 (4087)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
浅笑不语 活跃值 2020-5-9 11:40
14
0
感谢楼主分享
雪    币: 3
活跃值: 活跃值 (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_钟无艳 活跃值 2020-5-10 08:05
15
0
能给个联系方式吗?楼主
雪    币: 1456
活跃值: 活跃值 (868)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
燕幕自安 活跃值 2020-5-11 20:42
16
0
ZwCopyAll 图片都不能看
图好啦
雪    币: 1456
活跃值: 活跃值 (868)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
燕幕自安 活跃值 2020-5-11 20:42
17
0
小黄鸭爱学习 图全没了 不过意思我懂了
图好啦
雪    币: 1456
活跃值: 活跃值 (868)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
燕幕自安 活跃值 2020-5-11 20:42
18
0
kanxue 论坛bug,我们正在解决中
感谢版主!
雪    币: 1456
活跃值: 活跃值 (868)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
燕幕自安 活跃值 2020-5-11 20:43
19
0
wx_钟无艳 能给个联系方式吗?楼主
你加下我Q:1446684220
雪    币: 257
活跃值: 活跃值 (236)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZwCopyAll 活跃值 2020-5-11 22:09
20
0
mark
雪    币: 237
活跃值: 活跃值 (78)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
王小东 活跃值 2020-7-18 02:36
21
0
mark
雪    币: 200
活跃值: 活跃值 (67)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
荧光之夏 活跃值 2020-7-27 09:51
22
0
mark
雪    币: 5266
活跃值: 活跃值 (2329)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
尐进 活跃值 2020-7-27 09:57
23
0
mark
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_dttyhgbp 活跃值 2020-11-4 18:44
24
0
学习了,谢谢up主
雪    币: 1
活跃值: 活跃值 (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
比帕波 活跃值 2020-11-12 16:19
25
0
mark
游客
登录 | 注册 方可回帖
返回