
Telegramプロトコルを解析するためのWiresharkプラグイン
これは、周囲の Telegram トラフィックを理解するのに役立つ Wireshark ディセクタです。
検出した Telegram パケットを MTProto 2.0 プロトコルに従って解析します。
このディセクタをインストールするには:
luarocks でコンパイル可能です(お使いの Wireshark の Lua バージョンに合わせてください)luagcrypt.dll を確認できますluagcrypt.dll/luagcrypt.so を Wireshark のインストールディレクトリ(例:C:\Program Files\Wireshark)にコピーしますmtproto ディレクトリを Wireshark のプラグインディレクトリ(例:C:\Users\<username>\AppData\Roaming\Wireshark\plugins)にコピーしますインストール後は、Telegram トラフィックを含む Wireshark を開くだけで使用できます。
重要:難読化解除を機能させるには、MTProto 仕様に従い、TCP セッション全体が最初から把握されている必要があります。そのため、パケットの記録が開始された後に Telegram アプリを開くことをお勧めします。
トラフィックを復号化するには、対応する認証キー (auth_key)が必要です。
公式 Telegram クライアントの最近のバージョンでは、クラウドチャットに完全前方秘匿性を採用しており、起動時および/または定期的に auth.bindTempAuthKey を呼び出します。つまり、メインセッションでは、永続的な認証キーではなく、一時的な認証キー(DH を使用して確立)が使用されます。
使用中の認証キーをその場で抽出するために、Telegram プロセスをフックする 2 つの frida スクリプトが提供されています。
これらを使用するには、Frida がインストールされていることを確認し、以下を実行します:
hook_windows_auth_key.py(一部変更すれば Linux\Mac でも動作する可能性があります)hook_android_auth_key.pyネットワーク通信が行われるとすぐに、認証キーと認証キー ID が出力されます。
認証キーを入手したら、ディセクタにそれらを渡すために、Edit --> Prefrences --> Protocols --> MTProto に移動して認証キーを入力します。
永続的な認証キーは、tgnet.dat ファイル(Android - 例:ここ、ここ、ここを参照)または key_datas ファイル(Desktop - ここ、ここを参照)から抽出することもできます。他のクライアントでは、auth_key が異なる方法で保存されている可能性があります。
Telegram がクライアントの API スキーマバージョンを更新することがあります(または、古いクライアントのトラフィックを確認している可能性もあります)。この場合、このツールの TL スキーマがパケット内の一部の RPC 呼び出しと同期しなくなり、Wireshark に Incomplete parsing メッセージが表示される可能性があります。アプリが使用している API レベルは、invokeWithLayer リクエストで確認できます。
ディセクタを正しい API スキーマに同期するには、Telegram からレイヤーの TL ファイルをダウンロードし、JSON に変換して(下記参照)、mtproto/schema/api_tl_schema_layer_X.json として保存する必要があります。X はレイヤー番号です。
更新された API TL スキーマは、デスクトップアプリの api.tl から取得するか、Telegram の Web サイトで他のバージョンを確認できます。
tl ファイルを JSON に変換するには、例えば次のように実行します(npm がインストールされていることを確認してください)
C:\path\to\MTproto Dissector>
npx @psqq/tl-to-json api_layer_218.tl mtproto/schema/api_tl_schema_layer_218.json default --indent 4
次に、新しい JSON ファイルを Wireshark のプラグインディレクトリの mtproto/schema/ にコピーしてください。
最後に、Wireshark で Edit --> Prefrences --> Protocols --> MTPROTO に移動し、"API level" をトラフィックに一致するレベルに変更します。