📈 GH Trending Explorer 🎲 Surprise me

← all repos

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 用数据