
Wireshark 플러그인 - Telegram 프로토콜 분석용
이것은 주변의 Telegram 트래픽을 이해하는 데 도움이 되는 Wireshark 디섹터입니다.
MTProto 2.0 프로토콜에 따라 보이는 Telegram 패킷을 분석합니다.
이 디섹터를 설치하려면:
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를 호출하여 클라우드 채팅에 Perfect Forward Secrecy를 사용합니다. 이는 메인 세션이 영구 키 대신 (DH를 사용하여 설정된) 임시 인증 키를 사용함을 의미합니다.
사용 중인 인증 키를 실시간으로 추출하기 위해 두 개의 frida 스크립트가 제공되며, 이는 Telegram 프로세스를 후킹합니다. 이를 사용하려면 Frida가 설치되어 있는지 확인하고 다음을 실행하십시오:
hook_windows_auth_key.py – 공식 Windows 앱용 (약간의 수정으로 Linux\Mac에서도 작동 가능)hook_android_auth_key.py – 공식 Android 앱용네트워크 통신이 이루어지면 즉시 인증 키와 인증 키 ID가 출력됩니다.
인증 키를 얻은 후 디섹터에 제공하려면 Edit --> Preferences --> 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 웹사이트에서 더 많은 버전을 확인할 수 있습니다.
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 --> Preferences --> Protocols --> MTPROTO로 이동하여 "API level"을 트래픽과 일치하는 레벨로 변경합니다.