Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
toothpicker — Fuzzer en proceso guiado por cobertura para el demonio Bluetooth de iOS (bluetoothd) usando FRIDA, con fuzzing over-the-air para el protocolo MagicPairing y capacidades de reproducción de fallos. | Kitploit
Herramientas/GitHubGitHub/seemoo-lab/toothpicker
Seguridad BluetoothAnálisis Dinámico (Sandboxing)Seguridad iOSFuzzingSeguridad InalámbricaSeguridad Móvil
GitHubseemoo-lab/toothpicker

toothpicker

Fuzzer en proceso guiado por cobertura para el demonio Bluetooth de iOS (bluetoothd) usando FRIDA, con fuzzing over-the-air para el protocolo MagicPairing y capacidades de reproducción de fallos.

Ver Repositorio
24536hace 4 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Logotipo de ToothPicker

ToothPicker

ToothPicker es un fuzzer en proceso, guiado por cobertura para iOS. Se desarrolló para atacar específicamente el demonio de Bluetooth de iOS bluetoothd y analizar varios protocolos de Bluetooth en iOS. Como está construido usando FRIDA, se puede adaptar para atacar cualquier plataforma que ejecute FRIDA.

Este repositorio también incluye un fuzzer over-the-air con una implementación ejemplar para fuzzear el protocolo MagicPairing de Apple usando InternalBlue. Además, contiene el script ReplayCrashFile.py que se puede usar para verificar los crashes que el fuzzer en proceso ha encontrado.

Nuevo: Inplace Fuzzer (ToothFlipper)

Este es un fuzzer muy simple que solo cambia bits y bytes en conexiones activas. Sin guía de cobertura, sin inyección, pero bueno como demostración y con estado. Se ejecuta solo con Python+Frida, no requiere módulos ni instalación. Probado en iOS 13.5-14.3. Ver inplace-fuzzer.

Fuzzer en Proceso

El Fuzzer en Proceso funciona listo para usar en varias versiones de iOS (probado en 13.3-13.7), pero es necesario especificar los símbolos. Otras versiones de iOS requieren adaptaciones a las direcciones de las funciones. Además, parece que el stalker de FRIDA tiene algunos problemas con el iPhone 8. En iPhones más nuevos que soportan PAC, el rendimiento se resiente significativamente al firmar punteros. Por lo tanto, se recomienda ejecutar esto en un iPhone 7.

ToothPicker está construido sobre la base de código de frizzer. Sin embargo, se ha adaptado para esta aplicación específica y por lo tanto ya no es compatible con la versión original. Existen planes para reemplazar esto con un componente más dedicado en el futuro.

Requisitos previos:

En el iPhone:

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

En Linux:

  • usbmuxd
  • libimobiledevice
  • Opcional pero recomendado: virtualenv
  • radamsa (necesario para frizzer)

Para Linux basado en Arch:

root@kitploit:~
# usbmuxd typically comes with libimobiledevice
# but just to be sure, we manually install it as well
sudo pacman -S usbmuxd libimobiledevice python-virtualenv radamsa

# Connect the iPhone to the computer
# Unlock it.
# If a pairing message pops up, click "Trust"
# If no pairing message pops up:
idevicepair pair
# Now there should be the pop up, accept and then again:
idevicepair pair

# In case of connection errors:
sudo systemctl restart usbmuxd
# or pair phone and computer again


# Other useful commands

# To ssh into the iPhone:
# Checkra1n comes with an SSH server listening on Port 44
# Proxy the phone's SSH port to 4444 localport:
iproxy 4444 44
# Connect:
ssh root@localhost -p 4444
# Default password: alpine

# To fetch some device information of the phone:
ideviceinfo

Para Debian Linux:

Casi lo mismo que arriba. Excepciones:

  • radamsa necesita instalarse desde el repositorio de git porque no está empaquetado.
  • El comando iproxy requiere el paquete adicional libusbmuxd-tools.

Para macOS:

Comandos ligeramente diferentes en comparación con la configuración de Arch Linux...

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

En macOS, PacketLogger, que es parte de las Herramientas Adicionales para Xcode, puede decodificar varios paquetes una vez que el Perfil de Depuración de Bluetooth está instalado. Además, si abres los registros de crashes de iOS con Xcode, agregará algunos símbolos.

Configuración y Fuzzing

Configuración:

  • Se recomienda configurar un entorno virtual de Python para frizzer.
  • Instala los paquetes requeridos ejecutando en el directorio frizzer.
  • El directorio projects contiene un proyecto de ejemplo para fuzzear el protocolo MagicPairing.
  • Para construir el harness, compila el harness general y el harness especializado MagicPairing en un solo archivo.
  • Haz cd al directorio harness e instala frida-compile. Ten en cuenta que esto debe ejecutarse en esa carpeta y se puede instalar directamente como usuario ejecutando npm install frida-compile.
  • Ahora ejecuta frida-compile ../projects/YOUR_PROJECT/YOUR_SPECIALIZED_HARNESS.JS -o ../projects/YOUR_PROJECT/harness.js. Como esto se instaló en el contexto de npm, podría requerir ejecutar npx frida-compile en su lugar. Cada vez que el harness cambie, necesitas volver a ejecutar .

Fuzzing:

  • Conecta un dispositivo iOS a tu computadora.
  • Es recomendable poner el teléfono en modo avión y activar la función "No molestar" para limitar cualquier otra actividad en el teléfono.
  • Ejecuta killall -9 bluetoothd para reiniciar bluetoothd de manera limpia.
  • Asegúrate de que el teléfono no se conecte a otros dispositivos Bluetooth.
  • Ahora, haz cd de vuelta al directorio de tu proyecto, crea el directorio de registros de crash (mkdir crashes) y ejecuta ../../frizzer/fuzzer.py fuzz -p .
  • ¡Yay! ¡Ahora recolecta zero days y obtén grandes cantidades de dinero de Apple! (O recolecta una enorme lista de dereferencias de puntero NULL inútiles...)

En resumen, para iniciar un nuevo proyecto, ejecuta:

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 .

Puedes comenzar con una semilla diferente usando frizzer/fuzzer.py fuzz --seed 1234 -p ..

Añadiendo nuevas versiones de iOS:

Actualmente, diferentes versiones de iOS están definidas en bluetoothd.js. Puedes encontrar estas con la herramienta de versionado de Ghidra dada una versión inicial que tenga todos los símbolos requeridos. Ten en cuenta que algunos de ellos no están nombrados en el binario original de iOS, por lo que idealmente comienza con uno que ya haya sido anotado antes. Cada vez que bluetoothd.js cambie, necesitas volver a ejecutar frida-compile.

Aumentando las capacidades de bluetoothd:

Los registros de crash de iOS se almacenan en Settings -> Privacy -> Analytics & Improvements -> Analytics Data. Si contienen crashes de bluetoothd del patrón bluetoothd.cpu_resource-*.ips, esto indica que el crash fue causado por exceder los recursos. Se pueden aumentar de la siguiente manera.

En un iPhone 7, ejecuta:

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

En iPhone SE2, estos están en 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

Busca bluetoothd, actualiza la prioridad a 19 (la prioridad válida más alta) y establece el límite de memoria a algo muy alto. Aplica los mismos cambios a ambos archivos.

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>

Escribe los cambios de vuelta y reinicia 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

Respectivamente en el iPhone SE2:

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

Eliminando registros antiguos:

iOS deja de guardar registros de crash para un programa después de alcanzar el límite de 25. Si se carga un registro de crash con Xcode (vía Simulators&Devices), se añaden algunos símbolos al stack trace. Una vez alcanzado el límite, los registros pueden eliminarse ya sea a través de Xcode o directamente en el dispositivo iOS eliminándolos en la carpeta /var/mobile/Library/Logs/CrashReporter/.

A12+:

A partir del iPhone XR/Xs, se ha introducido PAC. Esto requiere llamar a sign() en NativeFunction en FRIDA. Aunque esto es un no-op en CPUs anteriores, reduce enormemente la velocidad en dispositivos más nuevos, pero es necesario para que funcionen en absoluto. Observamos que ToothPicker opera a la mitad de la velocidad cuando se usa un iPhone SE2 en lugar de un iPhone 7.

Fuzzer Over-the-Air y Reproducción de Crashes

La implementación MagicPairing del fuzzer over-the-air requiere tener InternalBlue instalado y se puede ejecutar ejecutando python MagicPairingFuzzer.py TARGET_BD_ADDR.

Si quieres reproducir crashes, usa el script ReplayCrashFile.py, que puede tomar un archivo de crash e inicia una conexión over-the-air con un payload basado en el crash.

Descargar herramienta
frida-compile