2016-06-22 3 views
0

セキュリティプロジェクトの一部としてAndroidアプリケーションをリバースエンジニアリングしています。私の最初のステップは、アプリとサーバーの間で交換されるプロトコルを発見することです。私は使用されているプロトコルがプロトコルバッファであることを発見しました。 protobufの性質を考えると、元の.protoファイルは、protobufでエンコードされたメッセージのシリアル化を解除できる必要があります。私はそれがないので、私はprotodを使ってAndroidアプリを逆アセンブルし、使用された.protoファイルを回復しました。.protoファイルのないプロトコルバッファの解析

私はそれが.smaliと.soファイルの束である形式でAndroidアプリを持っています。 protoを.soファイルに対して実行すると、1つの.protoファイル(google/protobuf/descriptor.proto)のみが生成されます。

私は、プロトコルバッファのユーザーが独自の.protoファイルを作成しているという印象を受けました。これはgoogle/protobuf/descriptor.protoを参照するかもしれませんが、protod google/protobuf/descriptor.protoによると、アプリ。これは実際に可能とgoogle/protobuf/descriptor.proto私とアプリとサーバー間のメッセージをunserializeするのに十分ですか?

+0

このプロトファイルで試しましたか? – petersv

+0

チャールズプロキシにprotofileから生成された.descを使用してprotobufメッセージをデコードするときに問題が発生していて、それが私には分かりませんでした(上記の質問)。私はメッセージとprotobuf .descファイルを渡すことができるいくつかのコマンドラインツールがあり、それは私にデコードされたメッセージを与えるだろうか? – Joe

+0

関連:http://stackoverflow.com/questions/14627069/parse-google-protocol-buffers-datagram-without-proto-file – jpa

答えて

1

あなたがLITE_RUNTIMEにオプションoptimize_forを設定することができます(hereを参照)、これはバイナリのサイズを小さくするために生成されたコードからの記述子を省略します.protoファイルを書き込みます。コードサイズはその環境の希少なリソースなので、これはモバイル開発の一般的な方法だと私は考えています。これにより、ファイルが1つだけ見つかった理由が説明されます。.protoアプリケーションは実際にはdescriptor.protoを使用してデータを転送することはほとんどありませんが、それは主にプロトコルバッファライブラリの実装の詳細な部分です。

他のディスクリプタが見つからない場合は、プロトコルバッファを使用せずにプロトコルバッファを解釈しようとするのが最善です。プロトコルバッファのワイヤフォーマットhereについて読むことができます。開始する簡単な方法は、フィールドを含まないproto2メッセージ型を作成し、その型としてデータを解析しようとすることです。リフレクションAPIを使用して、メッセージ内の「未知のフィールド」として知られているものを調べ、それらが表すものを把握しようとします。

関連する問題