在Charles Proxy中解码RAW protobuf数据

时间:2015-07-14 10:19:40

标签: android proxy protocol-buffers decode

我使用Charles Proxy在Android应用程序和网站之间捕获了一些流量。 Charles将流量标识为协议缓冲流。

查尔斯所示的结构:

- site.com
|
-- sub
|
--- message.proto

原始邮件:

POST site.com/sub/message.proto HTTP/1.1
token: random
Id: random
Authorization: Basic OTI[..]
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.3; Galaxy Nexus Build/JWR66Y)
Host: site.com
Connection: Keep-Alive
Accept-Encoding: gzip
Content-Type: application/x-www-form-urlencoded
Content-Length: 580

��hï õÜÕñ6iaõ*|{6¤oQIùk*դž¼   
S_½ª¥8.3ÝÎu öÚ´êVFBeùõÈî¿;µ¼ö%S [...]

我尝试了一些解码内容的东西,但是徒劳无功。命令proton decode_raw < message.txt会导致失败消息Failed to parse input。现在我不确定该消息是否真的是一个protobuf消息,因为标题中的Content-Type并不表示使用了protobuf。我还将流量保存为.bin文件。

Charles能够显示protobuf消息的上下文,但需要相应的描述符文件。但是要获取描述符文件,我需要实际的.proto文件,我没有。

那么,我是否被迫用手解码信息,还是有其他可能被我忽视的事情?

我怀疑使用了应用程序级加密,Charles无意中将流量识别为protobuf。

1 个答案:

答案 0 :(得分:0)

在我看来,内容只是简单压缩:

Accept-Encoding: gzip
Content-Type: application/x-www-form-urlencoded

尝试用gunzip解压缩它。

我同意一个protobuf。 Charles Proxy可能会被以.proto结尾的URL混淆。

请注意,在尝试解码数据时(无论是作为protobuf还是作为gzip),您需要确保只解码请求的正文,即不解析文本HTTP头。请注意,在文本编辑器中编辑标题可能工作,因为将二进制数据转换为文本通常会破坏它。您最好通过执行以下操作来提取数据:

tail -c 580 message.txt | zcat

或者,如果你认为它毕竟是一个protobuf:

tail -c 580 message.txt | protoc --decode_raw

请注意,580来自Content-Length标题。