参考与术语
源码仓库与提交、二进制与工具、术语表和研究边界。
源码仓库
| 项目 | 仓库 | 分析提交 | 说明 |
|---|---|---|---|
| iOS | TelegramMessenger/Telegram-iOS | f1dd7a2d(2026-10-07) | Bazel 构建,UI 基于 AsyncDisplayKit 分叉与自研 Display 模块 |
| macOS | overtake/TelegramSwift | 579cebbf(2025-07-29) | UI 基于自研 TGUIKit,静态链接 telegram-ios 子模块中的共享模块 |
站内所有源码链接都指向上表的固定提交,所以行号不会随仓库更新而漂移。
二进制与工具
| 名称 | 用途 | 链接 |
|---|---|---|
| Telegram for macOS 13.0 | 被验证的发布版二进制(build 283305) | telegram.org/dl/macos |
| REA 6.7.0 | 二进制分析编排工具,提供 Mach-O、签名、加载关系、Rizin 命令和 LLDB 运行时观测 | morluto/rea |
| Rizin 0.9.1 | REA 的 execute-rizin-command 后端,导出字符串、类表与反汇编 | rizinorg/rizin |
| Fumadocs | 本站使用的文档框架 | fumadocs.dev |
术语表
| 术语 | 定义 |
|---|---|
| AsyncDisplayKit(ASDK) | Facebook 开源、后更名为 Texture 的异步 UI 框架。Telegram-iOS 维护自己的分叉,用 ASDisplayNode 在后台线程布局和绘制 |
| TGUIKit | TelegramSwift 的自研 UI 库,用 AppKit 复刻 UIKit 的视图、列表和导航习惯 |
| 私有 API | Apple SDK 头文件中没有声明的类、方法、selector 或 KVC 键 |
| KVC | Key-Value Coding。通过字符串键读写对象属性,私有属性也能这样访问 |
| IMP | Objective-C 方法的函数指针。取得 IMP 后可以按 C 函数调用,或替换成自己的实现 |
| 方法交换(swizzling) | 在运行时交换或替换某个 selector 对应的 IMP |
| ISA 替换 | 在运行时把对象的类指针改成自动生成的子类,以改变单个实例的行为 |
| Portal | 把同一份图层内容显示在另一位置的私有机制,例如 _UIPortalView 和 CAPortalLayer |
CABackdropLayer | 采样其下方屏幕内容的私有图层,是系统毛玻璃的底层实现 |
CAFilter | Core Animation 的私有滤镜类,可创建高斯模糊、颜色矩阵、位移贴图等效果 |
| additive 动画 | isAdditive = true 的动画。它的值叠加在模型值上,所以可以从旧位置平滑追赶新位置 |
| presentation layer | 图层当前在屏幕上的状态。中断动画时,从它取起点可以避免跳变 |
| 显示链接 | CADisplayLink(iOS)或 CVDisplayLink(macOS),按屏幕刷新回调 |
IOSurface | 可在进程与 GPU 间共享的像素缓冲 |
| Swift 小字符串 | 15 字节以内的 Swift String 直接存进两个机器字,不单独分配内存,编译后常以立即数形式出现 |
MOVZ/MOVK | arm64 中把 16 位立即数写入寄存器指定位置的指令,短字符串常用它拼出 |
| FairPlay | App Store 对 iOS 可执行文件的加密,因此 iOS 发布版无法直接做静态分析 |
| hardened runtime | macOS 的运行时保护。开启后,未带 get-task-allow 的进程不能被调试器附加 |
| ad-hoc 签名 | 不使用开发者证书的本地签名,用于在本机运行修改过的副本 |
CGEvent tap | 在系统事件流中插入的监听器,可以接收其他应用的键盘和鼠标事件 |
| 资源叉、FinderInfo | HFS+/APFS 文件的附加数据流与 Finder 元数据位,Telegram 用它们给自身 bundle 设置自定义图标 |
| Evidence ID | REA 为每次分析输出生成的内容哈希,用于复核结果 |
研究边界
- 本站内容来自公开源码的静态分析,以及一次针对 macOS 13.0 的二进制验证。
- 运行时观测只覆盖启动和登录页,没有登录账号,也没有进入聊天界面。
- iOS 部分全部是源码分析,没有二进制验证。
- 条目中的私有 API 用法仅用于技术研究。借鉴前请先看风险与可借鉴性。
数据来源
站点由 15 份主题笔记、1 份 REA 验证笔记和 1 份整合报告生成。笔记保存在项目仓库的 source-notes/ 目录中。scripts/build_content.py 把笔记转换为章节 MDX 和条目数据,所以重新运行脚本即可更新站点内容。