浅谈protobuf
浅谈protobuf
protobuf在linux下的安装
安装protobuf
1 | |
安装C编译插件
1 | |
protobuf结构体解析
示例:
1 | |
编译
1 | |
c语言生成两个文件(.c和.h)

python生成一个py文件

下面来分析c语言下编译的文件
函数操作
1 | |
P0ach1l__Devicemsg结构体
1 | |
ProtobufCMessage结构体
1 | |
ProtobufCFieldDescriptor结构体
1 | |
查看结构体定义
1 | |
ProtobufCBinaryData
1 | |
编译信息
1 | |
ProtobufCMessageDescriptor结构体
1 | |
数据类型&&字段的性质
ProtobufCType 结构体(type) 指定了字段的类型:
1 | |
ProtobufCLabel 结构(label) 指定了字段的性质:
1 | |
后面题目中要用到的 ProtobufCBinaryData 结构体:
1 | |
[CISCN 2023 初赛]StrangeTalkBot
这里可以直接看到ProtobufCMessageDescriptor结构体的信息,肯定是proto的题,函数的作用肯定就是反序列化了
直接便然魔数也是可以的

分析结构体进行还原



写出.proto源文件,确定版本方法,如果用了required就是2版本,3版本取消了required
1 | |
编译一下,打包成库
1 | |
libc版本是2.31_9.9的setcontext打ORW,参考以前博客
1 | |