安卓逆向 | Protobuf协议逆向和仿真&举个栗子
Posted 燕幕自安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓逆向 | Protobuf协议逆向和仿真&举个栗子相关的知识,希望对你有一定的参考价值。
def proto_decode(data):
process = subprocess.Popen([r'D:\tools\protoc.exe', '--decode_raw'],
stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output = error = None
try:
output, error = process.communicate(data)
except OSError:
pass
finally:
if process.poll() != 0:
process.wait()
return output
message RequestHead {
enum SerialozeCode {
Normal = 0;
UTF8 = 1;
PB = 2;
Json = 3;
SotpPB = 4;
SotpJson = 5;
PBSotp = 6;
PBJson = 7;
JsonSotp = 8;
JsonPB = 9;
GraphQL = 10;
}
optional SerialozeCode serializeCode = 1;
optional string systemCode = 2;
optional string language = 3;
optional string userId = 4;
optional string clientId = 5;
optional string clientToken = 6;
optional string clientVersion = 7;
optional string sourceId = 8;
optional string exSourceId = 9;
optional string serviceCode = 10;
optional string messageNumber = 11;
optional string authToken = 12;
message Extention{
optional string Key = 1;
optional string value = 2;
}
repeated Extention extentionList = 13;
optional string appId = 14;
}
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发出即可。
-
Proto数据反序列化和Proto文件生成
-
收发包socket网络编程
-
加密参数逆向和调用
-
一大罐耐心
以上是关于安卓逆向 | Protobuf协议逆向和仿真&举个栗子的主要内容,如果未能解决你的问题,请参考以下文章
PBTK:一款针对Protobuf App的逆向工程与模糊测试套件