gpt4 book ai didi

reverse-engineering - 在没有 .proto 文件的情况下解析 Protocol-Buffers

转载 作者:行者123 更新时间:2023-12-02 17:27:03 26 4
gpt4 key购买 nike

作为安全项目的一部分,我正在对 Android 应用程序进行逆向工程。我的第一步是发现应用程序和服务器之间交换的协议(protocol)。我发现正在使用的协议(protocol)是 Protocol Buffer 。鉴于 protobuf 的性质,需要原始 .proto 文件才能反序列化 protobuf 编码的消息。因为我没有,所以我用了 protod反汇编 Android 应用程序并恢复使用的所有 .proto 文件。

我的 Android 应用程序是一堆 .smali 和 .so 文件。针对 .so 文件运行 protod 只会产生一个 .proto 文件——google/protobuf/descriptor.proto。

我的印象是 Protocol Buffer 的用户编写了他们自己的 .proto 文件,这些文件可能引用了 google/protobuf/descriptor.proto,但根据 protod google/protobuf/descriptor.proto 是该应用程序使用的唯一原型(prototype)文件.这真的可能吗?google/protobuf/descriptor.proto 足以让我反序列化应用程序和服务器之间的消息吗?

最佳答案

当你编写一个 .proto 文件时,你可以将选项 optimize_for 设置为 LITE_RUNTIME(参见 here),这将省略从生成的代码中提取描述符以减小二进制文件的大小。我相信这是移动开发的常见做法,因为代码大小在该环境中是一种稀缺资源。这可以解释为什么您只找到一个 .proto 文件。应用实际上不太可能使用 descriptor.proto 传输任何数据,因为这主要是 Protocol Buffer 库的实现细节。

如果找不到任何其他描述符,最好的办法可能是尝试在没有它们的情况下解释 Protocol Buffer 。您可以阅读 Protocol Buffer 有线格式 here .一种简单的入门方法是创建一个不包含任何字段的 proto2 消息类型,并尝试将数据解析为该类型。然后,您可以使用反射 API 检查消息中所谓的“未知字段”,并尝试弄清楚它们代表什么。

关于reverse-engineering - 在没有 .proto 文件的情况下解析 Protocol-Buffers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37960368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com