这是一个 Wireshark 解析器,可帮助你了解周围的 Telegram 流量。
它根据 MTProto 2.0 协议 解析所看到的 Telegram 数据包。
要安装此解析器:
luarocks 编译它(针对你的 Wireshark 所用的 Lua 版本)luagcrypt.dllluagcrypt.dll/luagcrypt.so 复制到 Wireshark 安装目录,例如 C:\Program Files\Wiresharkmtproto 目录复制到 Wireshark 插件目录,例如 C:\Users\<username>\AppData\Roaming\Wireshark\plugins安装后,你只需在有 Telegram 流量的情况下打开 Wireshark 即可。
重要提示:为使去混淆生效,必须从一开始就已知整个 TCP 会话(根据 MTProto 规范),因此建议在数据包录制开始之后再打开 Telegram 应用。
要解密流量,你需要拥有匹配的 授权密钥 (auth_key)。
较新版本的官方 Telegram 客户端通过 Perfect Forward Secrecy 来保护云聊天,方法是在启动时和/或定期调用 auth.bindTempAuthKey。这意味着主会话将使用临时 auth key(通过 DH 建立)而非永久密钥。
为了即时提取所使用的 auth key,提供了两个 frida 脚本,用于挂钩 Telegram 进程。
要使用它们,请确保已安装 Frida,然后运行:
hook_windows_auth_key.py 用于官方 Windows 应用(稍作修改或许也能在 Linux\Mac 上运行)hook_android_auth_key.py 用于官方 Android 应用一旦有网络通信完成,应立即打印 auth key 和 auth key ID。
获得 auth key 后,要将其提供给解析器,请转到 Edit --> Prefrences --> Protocols --> MTProto 并填写 auth key。
你还可以从 tgnet.dat 文件中提取永久 auth key(Android - 参见此处、此处、此处),或从 key_datas 文件中提取(Desktop - 查看此处、此处)。其他客户端可能以不同方式存储 auth_key。
有时,Telegram 会更新其客户端中的 API schema 版本(或者你正在查看来自旧客户端的流量)。发生这种情况时,此工具的 TL schema 可能与你在数据包中看到的某些 RPC 调用不同步,从而在 Wireshark 中产生 Incomplete parsing 消息。你可以在应用的 invokeWithLayer 请求中查看它正在使用的 API 级别。
要使解析器与正确的 API schema 同步,你需要从 Telegram 下载该层的 TL 文件,将其转换为 JSON(见下文),并保存到 mtproto/schema/api_tl_schema_layer_X.json,其中 X 是你的层号。
你可以从桌面应用的 api.tl 获取更新的 API TL schema,或在 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 --> Prefrences --> Protocols --> MTPROTO,并将 “API level” 更改为与你的流量匹配的级别。