Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
toothpicker — 覆盖引导的进程内模糊测试器,用于iOS蓝牙守护进程(bluetoothd),使用FRIDA,支持MagicPairing协议的空中模糊测试和崩溃重放功能。 | Kitploit
工具/GitHubGitHub/seemoo-lab/toothpicker
蓝牙安全动态分析 (沙盒)iOS安全模糊测试无线安全移动安全蓝牙安全 分类第 9 名
GitHubseemoo-lab/toothpicker

toothpicker

覆盖引导的进程内模糊测试器,用于iOS蓝牙守护进程(bluetoothd),使用FRIDA,支持MagicPairing协议的空中模糊测试和崩溃重放功能。

查看仓库
2453694年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

ToothPicker Logo

ToothPicker

ToothPicker 是一个进程内、覆盖引导的 iOS 模糊测试工具。它专门针对 iOS 的蓝牙守护进程 bluetoothd 开发,并用于分析 iOS 上的各种蓝牙协议。由于它基于 FRIDA 构建,因此可以调整以适配任何运行 FRIDA 的平台。

该仓库还包含一个空中模糊测试器,并给出了一个使用 InternalBlue 对 Apple 的 MagicPairing 协议进行模糊测试的实现示例。此外,还包含了 ReplayCrashFile.py 脚本,可用于验证进程内模糊测试器发现的崩溃。

新增:原地模糊测试器(ToothFlipper)

这是一个非常简单的模糊测试器,仅对活跃连接中的比特和字节进行翻转。没有覆盖引导,没有注入,但适合作为演示和状态测试。仅需要 Python 和 Frida 即可运行,无需模块或安装。已在 iOS 13.5-14.3 上测试。详见 inplace-fuzzer。

进程内模糊测试器

进程内模糊测试器开箱即用,支持多种 iOS 版本(已测试 13.3-13.7),但 需要指定符号。其他 iOS 版本需要调整函数地址。另外,FRIDA 的 stalker 似乎在 iPhone 8 上存在一些问题。在支持 PAC 的新款 iPhone 上,签名指针会显著影响性能。因此,建议在 iPhone 7 上运行。

ToothPicker 基于 frizzer 的代码库构建,但已针对本特定应用进行了调整,因此与原始版本不再兼容。计划在未来用更专用的组件取代它。

先决条件:

在 iPhone 上:

  • https://frida.re/docs/ios/

在 Linux 上:

  • usbmuxd
  • libimobiledevice
  • 可选但推荐:virtualenv
  • radamsa(frizzer 需要)

对于基于 Arch 的 Linux:

root@kitploit:~
# usbmuxd 通常随 libimobiledevice 一起提供
# 但为了保险,我们手动安装它
sudo pacman -S usbmuxd libimobiledevice python-virtualenv radamsa

# 将 iPhone 连接到计算机
# 解锁手机。
# 如果弹出配对消息,请点击“信任”
# 如果没有弹出配对消息:
idevicepair pair
# 现在应该会出现弹出窗口,接受后再次执行:
idevicepair pair

# 如果出现连接错误:
sudo systemctl restart usbmuxd
# 或者重新配对手机和电脑


# 其他有用的命令

# SSH 进入 iPhone:
# Checkra1n 附带一个监听端口 44 的 SSH 服务器
# 将手机的 SSH 端口代理到本地端口 4444:
iproxy 4444 44
# 连接:
ssh root@localhost -p 4444
# 默认密码:alpine

# 获取手机的设备信息:
ideviceinfo

对于 Debian Linux:

与上述基本相同。例外情况:

  • radamsa 需要从 git 仓库 安装,因为它未被打包。
  • 命令 iproxy 需要额外安装 libusbmuxd-tools 包。

对于 macOS:

与 Arch Linux 的设置相比,命令略有不同...

root@kitploit:~
brew install libimobiledevice usbmuxd radamsa npm
idevicepair pair
npm install frida-compile
pip3 install frida-tools

在 macOS 上,PacketLogger(属于 Xcode 附加工具)可以在安装 蓝牙调试配置文件 后解码各种数据包。此外,如果用 Xcode 打开 iOS 崩溃日志,它会添加一些符号。

设置与模糊测试

设置:

  • 建议为 frizzer 设置一个虚拟 Python 环境。
  • 在 frizzer 目录下运行以安装所需包。
  • projects 目录包含一个用于模糊测试 MagicPairing 协议的示例项目。
  • 要构建 harness,请将通用 harness 和专门的 MagicPairing harness 编译成一个文件。
  • cd 进入 harness 目录并安装 frida-compile。注意这需要在那个文件夹中运行,可以通过运行 npm install frida-compile 直接安装为用户。
  • 现在运行 frida-compile ../projects/YOUR_PROJECT/YOUR_SPECIALIZED_HARNESS.JS -o ../projects/YOUR_PROJECT/harness.js。由于这是在 npm 上下文中安装的,可能需要运行 npx frida-compile 替代。每次 harness 发生变化时,都需要重新运行 frida-compile。

模糊测试:

  • 将 iOS 设备连接到计算机。
  • 建议将手机置于飞行模式并开启“勿扰模式”,以限制手机上的其他活动。
  • 运行 killall -9 bluetoothd 以重新启动 bluetoothd。
  • 确保手机未连接其他蓝牙设备。
  • 然后,cd 回到项目目录,创建崩溃日志目录(mkdir crashes)并运行 ../../frizzer/fuzzer.py fuzz -p .
  • 耶!现在收集零日漏洞并从 Apple 获得大笔金钱!(或者收集一长串无用的 NULL 指针解引用……)

简而言之,要启动一个新项目,运行:

root@kitploit:~
cd harness
npx frida-compile ../projects/YOUR_PROJECT/YOUR_SPECIALIZED_HARNESS.JS -o ../projects/YOUR_PROJECT/harness.js
cd ../projects/YOUR_PROJECT/
mkdir crashes
../../frizzer/fuzzer.py fuzz -p .

你可以使用不同的种子开始,例如 frizzer/fuzzer.py fuzz --seed 1234 -p .。

添加新的 iOS 版本:

目前,不同的 iOS 版本在 bluetoothd.js 中定义。你可以使用 Ghidra 版本工具,在拥有所有必需符号的初始版本基础上找到这些。请注意,其中一些在原始 iOS 二进制文件中没有命名,因此最好从已经注释过的版本开始。每次 bluetoothd.js 发生变化时,都需要重新运行 frida-compile。

增加 bluetoothd 容量:

iOS 崩溃日志存储在 设置 -> 隐私 -> 分析与改进 -> 分析数据 中。如果其中包含模式为 bluetoothd.cpu_resource-*.ips 的 bluetoothd 崩溃,则表明崩溃是由于资源耗尽导致的。可以按如下方式增加资源。

在 iPhone 7 上,运行:

root@kitploit:~
cd /System/Library/LaunchDaemons/
plistutil -i com.apple.jetsamproperties.D10.plist -o com.apple.jetsamproperties.D10.plist.txt
plistutil -i com.apple.jetsamproperties.D101.plist -o com.apple.jetsamproperties.D101.plist.txt

在 iPhone SE2 上,这些位于 com.apple.jetsamproperties.D79.plist:

root@kitploit:~
cd /System/Library/LaunchDaemons/
plistutil -i com.apple.jetsamproperties.D79.plist -o com.apple.jetsamproperties.D79.plist.txt

搜索 bluetoothd,将优先级更新为 19(最高有效优先级),并将内存限制设置为一个非常大的值。对这两个文件应用相同的更改。

root@kitploit:~
<dict>
       <key>ActiveSoftMemoryLimit</key>
       <integer>24000</integer>
       <key>InactiveHardMemoryLimit</key>
       <integer>24000</integer>
       <key>EnablePressuredExit</key>
       <false/>
       <key>JetsamPriority</key>
       <integer>19</integer>
</dict>

写回更改并重启 bluetoothd。

root@kitploit:~
plistutil -i com.apple.jetsamproperties.D10.plist.txt -o com.apple.jetsamproperties.D10.plist
plistutil -i com.apple.jetsamproperties.D101.plist.txt -o com.apple.jetsamproperties.D101.plist
killall -9 bluetoothd

在 iPhone SE2 上相应操作:

root@kitploit:~
plistutil -i com.apple.jetsamproperties.D79.plist.txt -o com.apple.jetsamproperties.D79.plist
killall -9 bluetoothd

删除旧日志:

iOS 在达到 25 条限制后停止为同一个程序保存崩溃日志。如果通过 Xcode(通过模拟器和设备)加载崩溃日志,堆栈跟踪中会添加一些符号。一旦达到限制,日志可以通过 Xcode 删除,或者直接在 iOS 设备上删除文件夹 /var/mobile/Library/Logs/CrashReporter/ 中的内容。

A12+:

从 iPhone XR/Xs 开始引入了 PAC。这需要在 FRIDA 中对 NativeFunction 调用 sign()。尽管在较早的 CPU 上这是个空操作,但在新设备上这会显著降低速度,但却是使其工作的必要条件。我们观察到,使用 iPhone SE2 时 ToothPicker 的速度只有 iPhone 7 的一半。

空中模糊测试器和崩溃重放

MagicPairing 的空中模糊测试器实现需要安装 InternalBlue,可以通过运行 python MagicPairingFuzzer.py TARGET_BD_ADDR 来执行。

如果你想重现崩溃,请使用 ReplayCrashFile.py 脚本,它接受一个崩溃文件,并基于该崩溃发起带有 payload 的空中连接。

下载工具