我使用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。
答案 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
标题。