
Plugin de Wireshark para diseccionar el protocolo Telegram
Este es un disector de Wireshark que te ayuda a entender el tráfico de Telegram a tu alrededor.
Disecta los paquetes de Telegram que ve según el Protocolo MTProto 2.0.
Para instalar este disector:
luarocks (para la versión de Lua de tu Wireshark)luagcrypt.dll precompiladoluagcrypt.dll/luagcrypt.so correspondiente al directorio de instalación de Wireshark, por ejemplo C:\Program Files\Wiresharkmtproto al directorio de plugins de Wireshark, por ejemplo C:\Users\<nombredeusuario>\AppData\Roaming\Wireshark\pluginsDespués de la instalación, solo abre Wireshark con algo de tráfico de Telegram.
IMPORTANTE: Para que la desofuscación funcione, se debe conocer toda la conversación TCP desde el principio (según las especificaciones MTProto), por lo que se recomienda abrir la aplicación de Telegram después de que comience la grabación de paquetes.
Para descifrar el tráfico, necesitarás tener la Clave de Autorización (auth_key) correspondiente.
Las versiones recientes de los clientes oficiales de Telegram usan Perfect Forward Secrecy para los chats en la nube, llamando a auth.bindTempAuthKey al inicio y/o de forma regular. Esto significa que las sesiones principales usarán claves de autenticación temporales (establecidas usando DH) en lugar de permanentes.
Para extraer las claves de autenticación usadas sobre la marcha, se proporcionan dos scripts de frida que enganchan los procesos de Telegram. Para usarlos, asegúrate de tener Frida instalado, y ejecuta:
hook_windows_auth_key.py para la aplicación oficial de Windows (con algunos cambios probablemente podría funcionar también en Linux\Mac)hook_android_auth_key.py para la aplicación oficial de AndroidLas claves de autenticación y los IDs de clave de autenticación deberían imprimirse tan pronto como se realice alguna comunicación de red.
Una vez que tengas tus claves de autenticación, para alimentar al disector con ellas ve a Editar --> Preferencias --> Protocolos --> MTProto y completa las claves de autenticación.
También puedes extraer la clave de autenticación permanente del archivo tgnet.dat (Android - ver por ejemplo aquí, aquí, aquí) o del archivo key_datas (Escritorio - mira aquí, aquí). Otros clientes probablemente almacenan la auth_key de manera diferente.
A veces, Telegram actualiza la versión del esquema de API en sus clientes (o quizás estás viendo tráfico de clientes más antiguos). Cuando esto sucede, es posible que el esquema TL de esta herramienta esté desincronizado con algunas de las llamadas RPC que ves en tus paquetes, generando mensajes de Incomplete parsing en Wireshark. Puedes ver qué nivel de API está usando tu aplicación en su solicitud invokeWithLayer.
Para sincronizar el disector con el esquema de API correcto, necesitarás descargar el archivo TL de la capa desde Telegram, convertirlo a JSON (ver más abajo) y guardarlo en mtproto/schema/api_tl_schema_layer_X.json donde X es tu número de capa.
Puedes obtener el esquema TL de API actualizado desde api.tl de la aplicación de escritorio, o buscar en el sitio web de Telegram para más versiones.
Para convertir el archivo tl a JSON, ejecuta, por ejemplo (asegúrate de tener npm instalado)
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
Luego asegúrate de copiar el nuevo archivo json a mtproto/schema/ en el directorio de plugins de Wireshark.
Finalmente, en Wireshark ve a Editar --> Preferencias --> Protocolos --> MTPROTO, y cambia "API level" al nivel que coincida con tu tráfico.