正向开发使用

Protobuf语法

在之前的博客我记录了一下正向开发时的安装和编译

编译生成各种语言的程序

逆向

逆向的时候,由于原模板文件不在我们这,在服务器和软件内,我们猜不到,获取不到正确的key, 不过还好key不太重要

方法一

  • 1.利用 protoc.exe 反解析 protobuf 数据
protoc.exe --decode_raw < ./a.bin
  • 2.根据反解析出来的数据,还原出 .proto 文件

    key只能随便懵,编写.proto

  • 3.用 protoc.exe 编译 .proto 文件,生成 py /go程序

  • 4.用 py 程序序列化和反序列化,

方法二

blackboxprotobuf 库直接操作 protobuf 数据,不需要还原 .proto 文件
安装:

pip install blackboxprotobuf
# 转成json
message, typedef = blackboxprotobuf.protobuf_to_json(bytes_data, message_type=None)
# 转成字典
bus_data = blackboxprotobuf.decode_message(bytes_data, message_type=None)[0]

补充

进制转换

16进制 => 二进制
binascii.a2b_hex('788509209294464b3e84a1228')

aes解密不同的填充模式会有空格补齐
这时要去掉空格,才可以传进blackboxprotobuf,不然会报错

unpad去空格

import blackboxprotobuf
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad

key = '7fd3028e14a45d1f8b6eb0b2adb7cddg'
iv = '864c8fd584facf6210376b2b72b063i8'

aes = AES.new(binascii.a2b_hex(key), AES.MODE_CBC, binascii.a2b_hex(iv))

dec = aes.decrypt(binascii.a2b_hex('788509209294464b3e84a1228'))
print(dec)

message, typedef = blackboxprotobuf.protobuf_to_json(unpad(dec,16), message_type=None)
bus_data = blackboxprotobuf.decode_message(unpad(dec,16), message_type=None)[0]
print(message)

附录

# 将proto格式文件解码
protoc --decode-raw < xxx.bin

# 编译手动编写的proto文件,生成python文件
protoc --python_out=. xxx.proto
分类: app逆向python

浙公网安备33011302000604

辽ICP备20003309号