Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
toothpicker — Fuzzer en processus guidé par couverture pour le démon Bluetooth iOS (bluetoothd) utilisant FRIDA, avec fuzzing over-the-air pour le protocole MagicPairing et capacités de rejeu de crash. | Kitploit
Outils/GitHubGitHub/seemoo-lab/toothpicker
Sécurité BluetoothAnalyse Dynamique (Sandboxing)Sécurité iOSFuzzingSécurité Sans FilSécurité Mobile
GitHubseemoo-lab/toothpicker

toothpicker

Fuzzer en processus guidé par couverture pour le démon Bluetooth iOS (bluetoothd) utilisant FRIDA, avec fuzzing over-the-air pour le protocole MagicPairing et capacités de rejeu de crash.

Voir le dépôt
24536il y a 4 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

ToothPicker Logo

ToothPicker

ToothPicker est un fuzzer in-process guidé par couverture pour iOS. Il a été développé pour cibler spécifiquement le démon Bluetooth d'iOS bluetoothd et pour analyser divers protocoles Bluetooth sur iOS. Construit avec FRIDA, il peut être adapté pour cibler n'importe quelle plateforme exécutant FRIDA.

Ce dépôt inclut également un fuzzer over-the-air avec une implémentation exemplaire pour fuzzer le protocole MagicPairing d'Apple en utilisant InternalBlue. De plus, il contient le script ReplayCrashFile.py qui peut être utilisé pour vérifier les crashes trouvés par le fuzzer in-process.

Nouveau : Fuzzer Inplace (ToothFlipper)

C'est un fuzzer très simple qui ne fait que retourner des bits et des octets dans des connexions actives. Pas de guidage par couverture, pas d'injection, mais intéressant comme démonstration et avec état. Fonctionne simplement avec Python+Frida, aucun module ou installation requis. Testé sur iOS 13.5-14.3. Voir inplace-fuzzer.

Fuzzer In-Process

Le fuzzer In-Process fonctionne directement sur diverses versions d'iOS (13.3-13.7 testées), mais les symboles doivent être spécifiés. Les autres versions d'iOS nécessitent des adaptations des adresses de fonctions. De plus, il semble que le stalker de FRIDA ait quelques problèmes avec l'iPhone 8. Sur les iPhones plus récents supportant PAC, la performance souffre significativement de la signature des pointeurs. Il est donc recommandé de l'exécuter sur un iPhone 7.

ToothPicker est construit sur la base de code de frizzer. Cependant, il a été adapté pour cette application spécifique et n'est donc plus compatible avec la version originale. Il existe des plans pour remplacer cela par un composant plus dédié à l'avenir.

Prérequis :

Sur l'iPhone :

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

Sur Linux :

  • usbmuxd
  • libimobiledevice
  • Optionnel mais recommandé : virtualenv
  • radamsa (nécessité par frizzer)

Pour Linux basé sur 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

Pour Debian Linux :

Presque identique à ci-dessus. Exceptions :

  • radamsa doit être installé depuis le dépôt git car il n'est pas empaqueté.
  • La commande iproxy nécessite le paquet supplémentaire libusbmuxd-tools.

Pour macOS :

Commandes légèrement différentes par rapport à la configuration Arch Linux...

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

Sur macOS, PacketLogger, qui fait partie des Additional Tools for Xcode, peut décoder divers paquets une fois le Bluetooth Debug Profile installé. De plus, si vous ouvrez les logs de crash iOS avec Xcode, cela ajoutera quelques symboles.

Configuration et Fuzzing

Configuration :

  • Il est recommandé de configurer un environnement virtuel Python pour frizzer.
  • Installez les paquets requis en exécutant dans le répertoire frizzer.
  • Le répertoire projects contient un projet exemple pour fuzzer le protocole MagicPairing.
  • Pour construire le harnais, compilez le harnais général et le harnais spécialisé MagicPairing en un seul fichier.
  • Placez-vous dans le répertoire harness et installez frida-compile. Notez que cela doit être exécuté dans ce dossier et peut être installé directement en tant qu'utilisateur en exécutant npm install frida-compile.
  • Exécutez maintenant frida-compile ../projects/YOUR_PROJECT/YOUR_SPECIALIZED_HARNESS.JS -o ../projects/YOUR_PROJECT/harness.js. Comme cela a été installé dans le contexte npm, il peut être nécessaire d'utiliser npx frida-compile à la place. Chaque fois que le harnais change, vous devez réexécuter frida-compile.

Fuzzing :

  • Connectez un appareil iOS à votre ordinateur.
  • Il est conseillé de mettre le téléphone en mode avion et d'activer la fonction « Ne pas déranger » pour limiter toute autre activité sur le téléphone.
  • Exécutez killall -9 bluetoothd pour redémarrer bluetoothd.
  • Assurez-vous que le téléphone ne se connecte pas à d'autres appareils Bluetooth.
  • Maintenant, revenez dans le répertoire de votre projet, créez le répertoire crashlog (mkdir crashes) et exécutez ../../frizzer/fuzzer.py fuzz -p .
  • Youpi ! Maintenant, collectez des zero days et obtenez de grandes sommes d'argent de la part d'Apple ! (Ou collectez une immense liste de déréférencements de pointeurs NULL inutiles...)

En résumé, pour démarrer un nouveau projet, exécutez :

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 .

Vous pouvez commencer avec une graine différente en utilisant frizzer/fuzzer.py fuzz --seed 1234 -p ..

Ajout de nouvelles versions d'iOS :

Actuellement, différentes versions d'iOS sont définies dans bluetoothd.js. Vous pouvez les trouver avec l'outil de versionnage Ghidra à partir d'une version initiale qui contient tous les symboles requis. Notez que certains d'entre eux ne sont pas nommés dans le binaire iOS original, donc idéalement commencez avec une version qui a déjà été annotée auparavant. Chaque fois que bluetoothd.js change, vous devez réexécuter frida-compile.

Augmentation des capacités de bluetoothd :

Les logs de crash iOS sont stockés dans Réglages -> Confidentialité -> Analyses et améliorations -> Données d'analyse. S'ils contiennent des crashes bluetoothd du motif bluetoothd.cpu_resource-*.ips, cela indique que le crash a été causé par un dépassement des ressources. Ils peuvent être augmentés comme suit.

Sur un iPhone 7, exécutez :

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

Sur iPhone SE2, ceux-ci se trouvent dans 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

Recherchez bluetoothd, mettez à jour la priorité à 19 (priorité valide la plus élevée) et définissez la limite de mémoire à quelque chose de très élevé. Appliquez les mêmes modifications aux deux fichiers.

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>

Reécrivez les modifications et redémarrez 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

Respectivement sur l'iPhone SE2 :

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

Suppression des anciens logs :

iOS cesse d'enregistrer les logs de crash pour un programme après avoir atteint la limite de 25. Si vous chargez un log de crash avec Xcode (via Simulators&Devices), certains symboles sont ajoutés à la trace de la pile. Une fois la limite atteinte, les logs peuvent être supprimés soit via Xcode, soit directement sur l'appareil iOS en les supprimant dans le dossier /var/mobile/Library/Logs/CrashReporter/.

A12+ :

À partir de l'iPhone XR/Xs, PAC a été introduit. Cela nécessite d'appeler sign() sur NativeFunction dans FRIDA. Bien que cela soit une opération nulle sur les CPU plus anciens, cela réduit considérablement la vitesse sur les nouveaux appareils, mais est nécessaire pour les faire fonctionner du tout. Nous avons observé que ToothPicker fonctionne à moitié vitesse en utilisant un iPhone SE2 au lieu d'un iPhone 7.

Fuzzer Over-the-Air et Rejeu de Crash

L'implémentation MagicPairing du fuzzer over-the-air nécessite l'installation d'InternalBlue et peut être exécutée en lançant python MagicPairingFuzzer.py TARGET_BD_ADDR.

Si vous souhaitez reproduire des crashes, utilisez le script ReplayCrashFile.py, qui peut prendre un fichier de crash et initier une connexion over-the-air avec une charge utile basée sur le crash.

Télécharger l’outil