
手机上的MTProto加密tg-ws-proxy-android的AES-256-CTR、Secret Key与消息拆分机制【免费下载链接】tg-ws-proxy-androidAndroid-форк популярного приложения Flowseal - tg-ws-proxy - локальный прокси-сервер MTProto с проксированием CF или без для частичного обхода проблем загрузки Telegram项目地址: https://gitcode.com/gh_mirrors/tg/tg-ws-proxy-android在 Android 手机上tg-ws-proxy-android 是一个把 Telegram 的 MTProto 加密流量重定向到 WebSocket 通道的本地 MTProto 代理MTProto proxy。它的核心安全机制是用Secret Key密钥参与 AES-256-CTR 密钥流推导并用消息拆分器MsgSplitter把连续字节流还原成一条条 MTProto 消息。这篇文章带你从零看懂这套机制到底怎么工作——无需数学基础也能理解手机代理中的加密逻辑 。Telegram 客户端 │ 1. 64字节握手包含 prekey IV用 AES-256-CTR 加密 ▼ 手机本地 MTProto 代理tg-ws-proxy-android端口 1443 │ 2. Secret Key 验证 → 建立 4 条 AES-256-CTR 密钥流 │ 3. MsgSplitter 把字节流拆分为单条 MTProto 消息 ▼ CloudFlare WebSocket / 直连 → Telegram 数据中心DC1~DC5Secret KeyMTProto 代理的门禁密码MTProto 代理MTProto proxy与普通 HTTP 代理最大的区别它必须能解密握手包的第一帧才能识别客户端要连哪个数据中心DC ID。这个钥匙就是 Secret Key。它是一个32 位十六进制字符串16 字节由应用自动生成或手动填写在 Telegram 中配置代理时密钥带前缀例如ddsecreteesecretdomain用于 FakeTLS 伪装模式代理端会先校验长度必须是 32、且必须是合法 hex否则直接拒绝。相关源码密钥默认值与全局状态src/config.rs#L132-L134密钥校验32 位 hex 才接受src/lib.rs#L278-L289带dd/ee前缀的完整密钥生成src/lib.rs#L297-L308Android 端在首次启动时会自动生成密钥并保存到本地配置自动生成逻辑app/src/main/java/com/amurcanov/tgwsproxy/ui/ConnectionTab.kt#L75-L104持久化存储app/src/main/java/com/amurcanov/tgwsproxy/SettingsStore.kt#L89⚠️安全提示任何拿到你 Secret Key 的人都能伪装成你的 Telegram 客户端接入本地代理。密钥不要截图发到群里更不要写入公开配置。64字节握手AES-256-CTR 密钥流是怎么推导的客户端连上本地端口默认 1443后会先发送一个64 字节的握手包其内存布局是固定常数定义在 src/config.rs#L24-L39偏移长度内容0–78 字节跳过区skip8–3932 字节客户端解密密钥 prekey40–5516 字节IV初始向量56–594 字节MTProto 协议标识proto tag60–612 字节数据中心编号DC ID负数表示媒体 DC代理端验证流程源码见 src/proxy.rs#L1671-L1705取 prekey Secret Key 做 SHA-256得到 32 字节 AES-256 密钥用该密钥 IV 构造AES-256-CTR密码器对手握包做 XOR 解密检查解密出的 proto tag 是否为0xEFEFEFEF/0xEEEEEEEE/0xDDDDDDDD之一——如果密钥错误这里必然失败连接直接被丢弃并计入bad handshake统计从第 60 字节读出 DC ID正数连普通 DC负数连媒体 DC≥10000自动转入测试 DC。密钥正确后代理会为这条连接建立4 条独立的 AES-256-CTR 密钥流见 src/proxy.rs#L1742-L1770上行方向clt_dec解密客户端 ──XOR──▶ tg_enc加密后发给 Telegram 下行方向tg_dec解密 Telegram ──XOR──▶ clt_enc加密后发回客户端为什么叫 CTR 模式AES-256-CTR 把分组密码变成了密码本密钥IV 生成一条无限密钥流加解密都是 XOR速度快、可随机访问特别适合代理这种需要逐字节实时转换的场景。每条流的实现是一个TrackedStream它记录已处理字节数支持克隆状态以便分支处理src/crypto.rs#L12-L56。 通俗理解代理不是破译了 Telegram 的加密而是替 Telegram 客户端做了一层等价转换——把 MTProto 加密的字节流原封不动地搬运到 WebSocket 通道自己只负责握手验证与字节重加密。消息拆分机制为什么代理必须读懂MTProto字节流搬运有个小麻烦一个 TCP 包或 WebSocket 帧里可能粘连着多条 MTProto 消息也可能一条消息被截断成两截。代理不能盲目整块转发必须按 MTProto 格式把流精确切割成独立消息否则下游服务无法解析。这就是MsgSplitter的职责src/crypto.rs#L74-L260。它的工作方式是影子解密边接收密文边用 AES-256-CTR 密钥流解密出明文副本再在明文上读取每条消息的长度头格式proto tag长度头读取方式精简格式abridged0xEFEFEFEF首字节非0x7F/0xFF时长度 首字节低 7 位 × 4否则后 3 字节小端 × 4中间格式intermediate0xEEEEEEEE前 4 字节小端最高位掩掉即负载长度填充中间格式padded0xDDDDDDDD同中间格式消息会补齐到 16 字节边界判断逻辑见proto_tag_to_typesrc/crypto.rs#L62-L72三种格式的长度解析分别在next_abridged_len_atsrc/crypto.rs#L167-L191与next_intermediate_len_atsrc/crypto.rs#L193-L207。几个关键设计细节粘包/半包缓冲数据先进缓冲区攒够一条完整消息才吐出读不到完整长度头就等待后续数据src/crypto.rs#L100-L142性能优化用偏移量遍历缓冲区而非反复删头避免大量小包时的 O(N²) 拷贝优雅降级如果解析出长度为 0 的异常消息disabled置位后改为原样透传src/crypto.rs#L124-L128收尾冲刷连接结束时flush()把缓冲区残余一次性发完src/crypto.rs#L144-L152。拆分结果直接决定 WebSocket 帧的边界——每条 MTProto 消息对应一个 WS 帧发送这样上游kws{dc}.web.telegram.org服务才能按消息处理src/proxy.rs#L901-L914。进阶FakeTLS 伪装与 Secret Key 的 ee 模式除了基础 MTProto 通道tg-ws-proxy-android 还支持FakeTLS客户端伪装成普通 TLS 连接eesecretdomain_hex密钥形式流量首字节就是标准 TLS 握手标记在封包检测下更像日常浏览行为。代理端根据首字节判断走 FakeTLS 握手还是普通 MTProto 握手src/proxy.rs#L1586-L1624。这个能力在部分绕过加载问题的场景中非常有用也是它作为 MTProto 加密代理与普通隧道工具的分水岭。新手上手三步让加密代理跑起来安装并启动打开应用 → 点Запустить прокси启动代理通知栏出现前台服务即代表本地 MTProto 代理端口 1443已就绪应用到 Telegram点Применить в Telegram应用会通过tg://proxy把server / port / secretdd密钥自动传给兼容客户端AyuGram、Plus Messenger、NekoGram 等在 Telegram 里确认即可观察连接在日志页可以看到每次握手的 DC 编号、协议标识与上下行流量验证 AES-256-CTR 转换链路是否健康。涉及文件速查应用主界面与应用到 Telegram入口app/src/main/java/com/amurcanov/tgwsproxy/ui/ConnectionTab.kt前台代理服务app/src/main/java/com/amurcanov/tgwsproxy/ProxyService.ktRust 原生库导出接口src/lib.rs加密核心AES-256-CTR 拆分器src/crypto.rs写在最后tg-ws-proxy-android 把MTProto 加密、AES-256-CTR 密钥流、Secret Key 验证、消息拆分这套服务端级机制完整搬到了手机本地32 位 hex 的 Secret Key 是门禁SHA-256(prekey secret) 推导出四条 CTR 密钥流完成双向重加密MsgSplitter 再按精简/中间/填充三种 MTProto 格式把字节流切成独立消息。理解了这三块你不仅会用它也能看懂任意 MTProto WebSocket 代理的实现原理 ✨。【免费下载链接】tg-ws-proxy-androidAndroid-форк популярного приложения Flowseal - tg-ws-proxy - локальный прокси-сервер MTProto с проксированием CF или без для частичного обхода проблем загрузки Telegram项目地址: https://gitcode.com/gh_mirrors/tg/tg-ws-proxy-android创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考