AirBeep:一鍵靜音 iPhone 通話錄音提示音的開源工具
iOS 的通話錄音有個「防君子」設計:開始和結束錄音時,系統會播放提示音,讓對方知道正在被錄音。開源專案 AirBeep 做的事很單純:一個開關,把這兩段提示音換成等長靜音;再撥一次,從自動備份還原。
專案:LinkPass888/AirBeep | 授權:GPL-3.0
它是怎麼做到的
iOS 把這兩段提示音存成系統檔案:
.../CallServices/Greetings/default/StartDisclosureWithTone.m4a.../CallServices/Greetings/default/StopDisclosure.caf
AirBeep 透過 scoped container 存取權限操作這兩個檔案,關鍵有三:
- 等長靜音替換:替換檔來自 AirliftSilence 的靜音素材,並保留原始檔長度——不是刪掉音檔,而是讓系統「播了一段沒有聲音的聲音」,錄音流程的時序不受影響
- 先備份、永不覆寫:第一次動手前自動把原檔備份到 App 的
Documents/AirBeepBackups,備份只建一次 - 寫入後回讀驗證:每次寫完都把檔案讀回來確認,確保真的寫進去了
底層依賴的是 0xjohnny 的 airlift 研究(AirTraffic / Airlock)來取得容器存取——這是非公開的系統行為,iOS 一更新就可能失效,作者在 README 裡也老實寫了。
迭代速度驚人
這個專案 2026-10-07 才開源,五天內推了 5 個版本、累積 700+ stars,完全是「邊被回報邊修」的節奏:
- v2.3.0:修 iOS 27.0.1 的 “AirTraffic did not recover” 讀取問題(探針改用非空 payload+加強診斷日誌);支援範圍擴大到 iOS/iPadOS 27.0–27.2 B2;新增運行日誌一鍵匯出、操作中螢幕常亮警示;移除未使用的 BadQuery 漏洞,只保留 airlift——主動縮小攻擊面的做法值得肯定
- v2.4.0:拿掉啟動時自動檢查提示音狀態的機制,改從本地快取還原上次狀態、只在撥動開關時才實際存取檔案;若提示音異常,可透過更改系統語言強制恢復系統預設音
實測小記
筆者實測 v2.3.0 時,仍遇到讀取探針不穩定的報錯(正是 v2.3.0 宣稱修復的那個問題),還原功能倒是正常把原音寫了回去,目前手機上的提示音是原始版本。
冷思考
- 備份跟著 App 走:備份放在 App 自己的 Documents 裡,刪除 App=備份一起消失。還原之前別手滑刪 App
- 法律灰色地帶:提示音的存在意義是告知對方「正在錄音」。README 自己也警告:拿掉提示音可能影響對方是否被告知,請確認當地法規並取得必要同意。在要求雙方同意錄音的地區,關掉提示音可能直接違法
- 系統更新就可能失效:依賴非公開行為的工具,壽命跟著 iOS 版本走,要有心理準備
使用方式
GitHub Actions 每次發版都會編好未簽名 IPA,用 AltStore / SideStore / TrollStore 簽名安裝即可。需要 iOS/iPadOS 27.0–27.2 B2。開啟Wifi,打開LocalDevVPN,ios27可以在手機直接配對iparing,打開設定⮕隱私與安全性⮕開啟開發者模式配對,ios27以下電腦安裝iLoader配對,開啟silence recording tone
結語
AirBeep 是個「小而專」的工具:只做一件事,但把備份、驗證、還原、日誌這些工程細節都做齊了。五天五版的迭代速度,說明作者真的在聽回報。如果你被通話錄音提示音困擾、又清楚相關法律風險,它是目前最乾淨的解法——記得先確認法規,再動開關。