jiutinglifeng / ios-calltone-silence
git clone https://github.com/jiutinglifeng/ios-calltone-silence.git
Silence iOS call-recording disclosure tones over USB — no app, no jailbreak, no signing, no VPN. macOS, one cable. Verified on iOS 27.0.1 (24A446).
—
stars, 24h
+27
stars, 7 days · #1,432
+27
stars, 30 days · #9,507
27
★ total · +27% this week
5
forks · 2 open issues
Star history starts 2026-10-20; the chart appears after the second daily snapshot.
LanguagePython
LicenseMIT
Created2026-10-16 (4d ago)
Last push1d ago
Watchers1
OwnerUser
GitHub topics
Links
README excerpt
# 静音 iOS 通话录音提示音 > **不用装 App、不用越狱、不用签名、不用 VPN、不用配对文件 —— 只需要一根数据线。** > > 把 iPhone 用数据线连到 Mac,把系统通话录音的开始 / 结束提示音替换成等长静音, > 并保留完整备份随时可还原。 **简体中文** · English --- ## ⚠️ 在把手机插上去之前,请先读完这一节 我理解你在担心什么——**把手机连到电脑上跑一份陌生人写的代码,谁知道会发生什么。** 所以这一节不讲好话,只讲事实,**并且告诉你怎样自己验证**。 ### 它做了什么 - 把你 iPhone 上**两个音频文件**(通话录音的开始/结束提示音)替换成**时长完全一致的静音** - `/var/mobile/Library/CallServices/Greetings/default/StopDisclosure.caf` - `/var/mobile/Library/CallServices/Greetings/default/StartDisclosureWithTone.m4a` - 替换前先把原件**读回你电脑**存起来,随时可还原 ### 它没有做什么 - ❌ **没有联网**。我 grep 过整个 `airlift.py`:**没有任何 HTTP / urllib / requests / socket 调用**。 全部通信都走 USB,只发生在你的手机和你的电脑之间 - ❌ **没有越狱**,没有提权,没有动 kernel - ❌ **没有自动扫描**。改哪个路径由命令里**显式写死**,就是上面那两条 - ❌ **总共只碰媒体/用户数据这一层**,见下方「风险与边界」 ### 它为什么够不到"变砖" 这是机制层面的论证,不是保证: > 变砖需要**修改引导链(SecureROM / iBoot)、系统分区(APFS 快照)或 SEP**。 > 这些在**未越狱**的设备上受 **Secure Boot 与代码签名**保护,**根本写不进去**。 > > 而本方案走的是 **AirTraffic**——Apple 自己的媒体同步协议。这个通道的**能力上限就是媒体分区**。 > 换句话说:**它不是"小心地不去碰系统分区",而是这条通道本身没有那个权限。** ### 我不会向你保证的事 - 不保证 **Apple 未来不会在系统更新里还原这些文件**(实际上这类文件曾被静默更新过) - 不保证 **在除了 iOS 27.0.1 (24A446) 之外的版本上一定能用** - 不保证 `pymobiledevice3` 换版本后仍然兼容——**这个库迭代极快,我们已经因此踩过坑** (所以我们锁定了实测版本,见 `requirements.txt`) ### 你可以自己验证的三件事(推荐按顺序做) **① 先审代码。** `macos/airlift.py` 一共 **764 行**,用编辑器过一遍。 里面 90% 不是我们写的——它来自公开的上游项目 airlift / AirliftSilence, **我们只改动了"从哪里加载系统库"那约 70 行**,全部差异都在 `macos/enablement.patch` 里可以逐行对照。 **② 先只读试水,零风险。** 第 1 步的 `设备体检.py scan` **只读**设备媒体目录, 不触发任何写入,跑多少次都不会改变设备。**先跑它,看能不能正常连上、有没有报错。** **③ 再看 `read` 那一小步。** 它是往返操作——**成功时文件会回到原位**。 如果它跑通了,说明整条链路是通的;如果它失败了,你会立刻知道,而且**此时你还没写任何东西**。 > **如果你不打算读代码,也不打算跑只读步骤——那就别用。** 这不是客套,是认真的建议。 ### 🚫 什么情况下不要用 - **iOS 27.2 beta 3 或更高** —— Apple 已修补,**跑了也没用,别白折腾** - **这是你唯一的主力机,且"手机出一点问题就完蛋"** —— 那就不值得。诚实地讲,这不是给所有人用的工具 - **你不熟悉终端命令** —— 请先找个懂的人一起看一遍 --- ## 这是什么 iOS 18.1 起,Apple 加入了通话录音功能,但会在录音开始和结束时播放一段**语音提示**—— 中文设备上说的是「此通话将被录音」,英文设备上是 "This call will be recorded"。 这段提示音**通话双方都能听到**,目的是告知对方。 本项目把这两个提示音文件替换成**时长完全一致的静音文件**,因此录音功能本身不受影响, 录音的开始 / 结束时机也不会变化。 ### 与之前那些方案的区别 | | 依赖 iOS App 的方案(如 AirBeep) | **本项目** | |---|---|---| | iPhone 上装 App | 必须 | **不需要** | | IPA 签名 / 免费账号 7 天限制 | 必须 | **不需要** | | 本地回环 VPN(LocalDevVPN 等) | 必须 | **不需要** | | 配对文件 | 必须 | **不需要** | | 需要的东西 | 一堆前置条件 | **一台Mac+一根数据线** | 原因是我们找到了一个**更直接的入口**,见下方「原理」。 --- ## 🙏 致谢:这个方案是用 DSH + DeepSeek 做出来的 **特别感谢 大肥鱼 DeepSeek 和 DSH(DeepSeek Harness)。** 这套方案不是"先有思路再写代码",而是**人机协作一路摸索出来的**。下面这些关键突破, 每一个都是 AI 在会话中主动排查出来的,而不是我原本就知道的: - 最初的目标方案是另一个项目(需要给 iPhone 装 App + IPA 签名 + 本地回环 VPN)。 是 AI 逐条否掉了 **7 条更麻烦的路线**,才找到现在这条最短的 - **「macOS 上本来就有 `AirTrafficHost.framework`」** 这个决定性发现,来自核对上游代码 —— 上游之所以只做 Windows 版,仅仅因为它按目录去找 `.dll`;而 macOS 上的框架 **符号完全一致**(实测 9/9 + 8/8 可用)。换了库加载方式之后,**一台 Windows 电脑都不需要了** - 那个把所有人引向错误方向的 `product_type` bug,是逐行读源码抓出来的。 它的恶劣之处在于:异常被 `except: continue` 静默吞掉,最后报出 `no paired iPhone found` ——**你会以为是线的问题、信任没点,而真正的原因在代码里** - 连「静音件必须按设备实际时长生成」这件事,也是在真机上 dump 出原件、比对哈希后才暴露的: **差了 400 毫秒**。只看文档、照搬作者现成的静音件,绝对发现不了 **所以我特别鼓励你:直接用 DSH 来做这件事。** 你完全可以复现这条路径: [code] 把 iPhone 用数据