Web逆向:protobuf实战解析与数据结构生成
需积分: 0 35 浏览量
更新于2024-08-03
收藏 1.39MB DOCX 举报
在Web逆向工程的实战中,protobuf(Protocol Buffers)是一个重要的数据序列化工具,它被用于高效地在不同平台间传输结构化数据。protobuf通过定义.proto文件来声明消息类型,这些文件包含了数据的结构和字段,然后可以生成相应的编码和解码器用于序列化和反序列化数据。在本例中,我们关注的是content-type为`application/grpc-web+proto`的应用场景,这是一种基于protobuf的远程过程调用(gRPC)协议,特别适合服务端和客户端之间的通信。
首先,分析网络请求时,可以看到getDetailInformation方法发送的十六进制数据,这实际是protobuf消息的编码形式。通过在关键位置设置断点,可以观察到数据的发送过程。在这个过程中,一个名为`messageSearchService`的消息实例被创建,其中包括如`getResourcetype`、`getId`等字段,用于构建搜索请求的详细信息。
在逆向工程中,捕获到的网络包(bin)文件可以通过命令行工具protoc的`--decode_raw`选项进行解析。`protoc`是一个protobuf编译器,`--decode_raw`参数允许我们从二进制数据恢复出原始的protobuf消息结构。通过导入生成的pb模块(如`test_pb2`),我们可以操作这些消息对象,例如设置`SearchRequest`的属性,如`SearchRequest.getResourcetype`为'Periodical'。
在生成请求体时,我们使用`SearchRequest.SerializeToString()`方法将消息对象转换为字节序列,这一步至关重要,因为它展示了如何将protobuf消息转换为实际发送的HTTP请求体。打印出的`form_data`变量就是序列化后的数据,长度信息也很关键,因为它指示了数据包的大小。为了构造完整的请求头,还需要添加一个头部,包含诸如`Content-Length`和`Content-Type`等字段。
最后,我们将头部数据(`bytes_head`)与序列化后的数据拼接起来,形成了完整的HTTP请求,包括头和body部分。这一步揭示了如何在实际网络通信中整合protobuf消息和HTTP协议细节,以便进行更深入的分析或模拟请求。
这个案例展示了在Web逆向工程中,如何利用protobuf进行数据交换的底层工作,包括消息定义、序列化与反序列化,以及在HTTP请求中的应用。这对于理解和复现这类服务,或者进行安全审计和漏洞检测具有重要意义。
2019-08-10 上传
2023-09-11 上传
2021-06-26 上传
2021-03-22 上传
2019-04-17 上传
2021-03-31 上传
2021-04-18 上传
2021-05-10 上传
m0bi1e
- 粉丝: 4
- 资源: 67
最新资源
- 背包问题 贪心算法
- IBM DB2通用数据库SQL入门
- ARM指令集及汇编 学习ARM必不可少的
- Lecture Halls 假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的算法进行安排。(这个问题实际上是著名的图着色问题。若将每一个活动作为图的一个顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的最小着色数,相应于要找的最小会场数。)
- ARM开发工程师入门宝典
- 交通灯系统硬件软件设计(有图有程序)
- MAX SUM 给定由n整数(可能为负数)组成的序列 {a1,a2,…,an},求该序列形如ai+ai+1,…,+aj的子段和的最大值。当所有的整数均为负数时定义其最大子段和为0。
- Number Triangles 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。
- st5dfsfdsdfsdfsfds
- 最长公共子序列 一个给定序列的子序列是在该序列中删去若干元素后得到的序列。给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。例如,若X={A,B,C,B,D,B,A},Y={B,D,C,A,B,A},则序列{B,C,A}是X和Y的一个公共子序列,但它不是X和Y的一个最长公共子序列。序列{B,C,B,A}也是X和Y的一个公共子序列,它的长度为4,而且它是X和Y的一个最长公共子序列,因为X和Y没有长度大于4的公共子序列。 最长公共
- 《Keil Software –Cx51 编译器用户手册 中文完整版》(403页)
- Pebble Merging 在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。
- 云计算:优势与挑战并存
- Minimal m Sums 给定n 个整数组成的序列,现在要求将序列分割为m 段,每段子序列中的数在原序列中连续排列。如何分割才能使这m段子序列的和的最大值达到最小?
- Lotus 公式秘籍---经验总结
- 数据结构C++二分搜索树