android - 在 Charles Proxy 中解码 RAW protobuf 数据

我使用 Charles Proxy 捕获了 Android 应用程序和网站之间的一些流量。 Charles 将流量识别为 Protocol Buffer 流。

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 消息,因为 header 中的 Content-Type 并不表示使用了 protobuf。我还将流量保存为 .bin文件。

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

那么,我是被迫手动解码消息还是有其他我忽略的可能性?

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

最佳答案

在我看来内容只是被压缩了:

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 header 。

https://stackoverflow.com/questions/31403884/

相关文章:

javascript - 强制 JSON.stringify 使用十进制表示法

node.js - gulp 段错误 : 11 and Abort trap: 6 OSX Yose

javascript - 华丽的弹出式透明 png 为灰色

android - RecyclerView 项目有时无法正确显示,直到我滚动(仅在 Genymot

javascript - limitTo 过滤前查询过滤的 ng-repeat 数据的长度

angularjs - 在剑道下拉列表中选择 "0"作为值的项目

c#-4.0 - 是否有用于验证的设计模式?

java - 动态sql生成设计

xslt - 我们如何使用 jenkins 控制台日志通过和失败计数生成 html 报告?

objective-c - 动态计算自定义 UITableViewCell 的高度