
Plugin Wireshark pour disséquer le protocole Telegram
Ceci est un dissecteur Wireshark qui vous aide à comprendre le trafic Telegram qui vous entoure.
Il dissèque les paquets Telegram qu'il voit selon le protocole MTProto 2.0.
Pour installer ce dissecteur :
luarocks (pour la version Lua de votre Wireshark)luagcrypt.dll pré-compiléeluagcrypt.dll/luagcrypt.so correspondant dans le répertoire d'installation de Wireshark, par exemple C:\Program Files\Wiresharkmtproto dans le répertoire des plugins Wireshark, par exemple C:\Users\<nom_utilisateur>\AppData\Roaming\Wireshark\pluginsAprès installation, vous pouvez simplement ouvrir Wireshark avec du trafic Telegram.
IMPORTANT : Pour que la dés-obfuscation fonctionne, toute la conversation TCP doit être connue depuis le début (selon les spécifications MTProto), il est donc recommandé d'ouvrir l'application Telegram après le début de l'enregistrement des paquets.
Pour déchiffrer le trafic, vous aurez besoin de la clé d'autorisation (auth_key) correspondante.
Les versions récentes des clients Telegram officiels utilisent Perfect Forward Secrecy pour les discussions cloud, en appelant auth.bindTempAuthKey au démarrage et\ou régulièrement. Cela signifie que les sessions principales utiliseront des clés d'authentification temporaires (établies via DH) plutôt que des clés permanentes.
Pour extraire les clés d'authentification utilisées à la volée, deux scripts frida sont fournis qui interceptent les processus Telegram.
Pour les utiliser, assurez-vous d'avoir Frida installé, et exécutez :
hook_windows_auth_key.py pour l'application Windows officielle (avec quelques modifications pourrait probablement fonctionner sur Linux\Mac aussi)hook_android_auth_key.py pour l'application Android officielleLes clés d'authentification et leurs identifiants devraient être imprimés dès qu'une communication réseau a lieu.
Une fois que vous avez vos clés d'authentification, pour les fournir au dissecteur, allez dans Edition --> Préférences --> Protocoles --> MTProto et remplissez les clés d'authentification.
Vous pouvez également extraire la clé d'authentification permanente du fichier tgnet.dat (Android - voir par exemple ici, ici, ici) ou du fichier key_datas (Desktop - voir ici, ici). Les autres clients stockent probablement la clé d'authentification d'une manière différente.
Parfois, Telegram met à jour la version du schéma API dans ses clients (ou peut-être regardez-vous du trafic de clients plus anciens). Lorsque cela se produit, il est possible que le schéma TL de cet outil ne soit plus synchronisé avec certains appels RPC que vous voyez dans vos paquets, soulevant des messages Incomplete parsing dans Wireshark. Vous pouvez voir quel niveau API votre application utilise dans sa demande invokeWithLayer.
Pour synchroniser le dissecteur avec le schéma API correct, vous devrez télécharger le fichier TL du calque depuis Telegram, le convertir en JSON (voir ci-dessous) et le sauvegarder sous mtproto/schema/api_tl_schema_layer_X.json où X est votre numéro de calque.
Vous pouvez obtenir le schéma TL API mis à jour depuis le fichier api.tl de l'application de bureau, ou consulter le site Telegram pour plus de versions.
Pour convertir le fichier tl en JSON, exécutez, par exemple (assurez-vous d'avoir npm installé)
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
Ensuite, assurez-vous de copier le nouveau fichier json dans mtproto/schema/ dans le répertoire des plugins de Wireshark.
Enfin, dans Wireshark, allez dans Edition --> Préférences --> Protocoles --> MTPROTO, et changez le « Niveau API » pour le niveau qui correspond à votre trafic.