
Plugin Wireshark per l'analisi del protocollo Telegram
Questo è un dissettore Wireshark che ti aiuta a comprendere il traffico Telegram che ti circonda.
Analizza i pacchetti Telegram che osserva secondo il protocollo MTProto 2.0.
Per installare questo dissettore:
luarocks (per la versione Lua del tuo Wireshark)luagcrypt.dll precompilataluagcrypt.dll/luagcrypt.so corrispondente nella directory di installazione di Wireshark, ad esempio C:\Program Files\Wiresharkmtproto nella directory dei plugin di Wireshark, ad esempio C:\Users\<username>\AppData\Roaming\Wireshark\pluginsDopo l'installazione, puoi semplicemente aprire Wireshark con del traffico Telegram.
IMPORTANTE: Affinché la deoffuscazione funzioni, l'intera conversazione TCP deve essere nota dall'inizio (secondo le specifiche MTProto), quindi si consiglia di aprire l'app Telegram dopo l'inizio della registrazione dei pacchetti.
Per decrittare il traffico, dovrai avere la Authorization Key (auth_key) corrispondente.
Le versioni recenti dei client Telegram ufficiali utilizzano la Perfect Forward Secrecy per le chat cloud, chiamando auth.bindTempAuthKey all'avvio e/o regolarmente. Questo significa che le sessioni principali useranno chiavi di autenticazione temporanee (stabilite tramite DH) piuttosto che permanenti.
Per estrarre al volo le chiavi di autenticazione usate, sono forniti due script frida che agganciano i processi di Telegram. Per utilizzarli, assicurati di avere Frida installato ed esegui:
hook_windows_auth_key.py per l'app Windows ufficiale (con alcune modifiche potrebbe probabilmente funzionare anche su Linux\Mac)hook_android_auth_key.py per l'app Android ufficialeLe chiavi di autenticazione e gli ID delle chiavi di autenticazione dovrebbero essere stampati non appena viene effettuata una comunicazione di rete.
Una volta ottenute le chiavi di autenticazione, per fornirle al dissettore vai su Edit --> Prefrences --> Protocols --> MTProto e inserisci le chiavi di autenticazione.
Puoi anche estrarre la chiave di autenticazione permanente dal file tgnet.dat (Android - vedi ad esempio qui, qui, qui) o dal file key_datas (Desktop - guarda qui, qui). Probabilmente altri client memorizzano l'auth_key in modo diverso.
A volte Telegram aggiorna la versione dello schema API nei propri client (o forse stai osservando il traffico di client più datati). Quando ciò accade, lo schema TL di questo strumento potrebbe non essere allineato con alcune delle chiamate RPC che vedi nei pacchetti, generando messaggi Incomplete parsing in Wireshark. Puoi vedere quale livello API sta usando la tua app nella sua richiesta invokeWithLayer.
Per sincronizzare il dissettore con lo schema API corretto, dovrai scaricare il file TL del layer da Telegram, convertirlo in JSON (vedi sotto) e salvarlo in mtproto/schema/api_tl_schema_layer_X.json dove X è il numero del tuo layer.
Puoi ottenere lo schema API TL aggiornato da api.tl dell'app desktop, oppure cercare nel sito di Telegram ulteriori versioni.
Per convertire il file tl in JSON, esegui, ad esempio (assicurati di avere npm installato)
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
Assicurati quindi di copiare il nuovo file json in mtproto/schema/ nella directory dei plugin di Wireshark.
Infine, in Wireshark vai su Edit --> Prefrences --> Protocols --> MTPROTO e cambia "API level" con il livello che corrisponde al tuo traffico.