Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
toothpicker — Fuzzer in-process guidato dalla copertura per il daemon Bluetooth di iOS (bluetoothd) che utilizza FRIDA, con fuzzing over-the-air per il protocollo MagicPairing e capacità di replay dei crash. | Kitploit
Strumenti/GitHubGitHub/seemoo-lab/toothpicker
Sicurezza BluetoothAnalisi Dinamica (Sandboxing)Sicurezza iOSFuzzingSicurezza WirelessSicurezza MobileTop in Sicurezza Bluetooth n.9
GitHubseemoo-lab/toothpicker

toothpicker

Fuzzer in-process guidato dalla copertura per il daemon Bluetooth di iOS (bluetoothd) che utilizza FRIDA, con fuzzing over-the-air per il protocollo MagicPairing e capacità di replay dei crash.

2453694 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository

Logo di ToothPicker

ToothPicker

ToothPicker è un fuzzer in-process, guidato dalla copertura, per iOS. È stato sviluppato per colpire specificamente il demone Bluetooth di iOS bluetoothd e per analizzare vari protocolli Bluetooth su iOS. Poiché è costruito usando FRIDA, può essere adattato per colpire qualsiasi piattaforma che esegue FRIDA.

Questo repository include anche un fuzzer over-the-air con un'implementazione esemplificativa per fare fuzzing del protocollo MagicPairing di Apple usando InternalBlue. Inoltre, contiene lo script ReplayCrashFile.py che può essere usato per verificare i crash che il fuzzer in-process ha trovato.

Nuovo: Fuzzer Inplace (ToothFlipper)

Questo è un fuzzer molto semplice che si limita a invertire bit e byte nelle connessioni attive. Nessuna guida alla copertura, nessuna iniezione, ma carino come demo e stateful. Funziona solo con Python+Frida, nessun modulo o installazione richiesta. Testato su iOS 13.5-14.3. Vedi inplace-fuzzer.

Fuzzer In-Process

Il Fuzzer In-Process funziona out-of-the-box su varie versioni di iOS (13.3-13.7 testate), ma i simboli devono essere specificati. Altre versioni di iOS richiedono adattamenti agli indirizzi delle funzioni. Inoltre, sembra che lo stalker di FRIDA abbia qualche problema con l'iPhone 8. Su iPhone più nuovi che supportano PAC, le prestazioni risentono significativamente della firma dei puntatori. Pertanto, si consiglia di eseguirlo su un iPhone 7.

ToothPicker è costruito sulla base di codice di frizzer. Tuttavia, è stato adattato per questa applicazione specifica e quindi non è più compatibile con la versione originale. Esistono piani per sostituirlo con un componente più dedicato in futuro.

Prerequisiti:

Sull'iPhone:

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

Su Linux:

  • usbmuxd
  • libimobiledevice
  • Opzionale ma raccomandato: virtualenv
  • radamsa (richiesto da frizzer)

Per Linux basato su 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

Per Debian Linux:

Quasi lo stesso di sopra. Eccezioni:

  • radamsa deve essere installato dal repository git perché non è impacchettato.
  • Il comando iproxy richiede il pacchetto aggiuntivo libusbmuxd-tools.

Per macOS:

Comandi leggermente diversi rispetto alla configurazione di Arch Linux...

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

Su macOS, PacketLogger, che fa parte degli Additional Tools for Xcode, può decodificare vari pacchetti una volta installato il Bluetooth Debug Profile. Inoltre, se apri i log di crash di iOS con Xcode, verranno aggiunti alcuni simboli.

Configurazione e Fuzzing

Configurazione:

  • Si consiglia di impostare un ambiente virtuale Python per frizzer.
  • Installa i pacchetti richiesti eseguendo i comandi nella directory frizzer.
  • La directory projects contiene un progetto di esempio per fare fuzzing del protocollo MagicPairing.
  • Per costruire l'harness, compila l'harness generale e l'harness specializzato MagicPairing in un unico file.
  • cd nella directory harness e installa frida-compile. Nota che questo deve essere eseguito in quella cartella e può essere installato direttamente come utente eseguendo npm install frida-compile.
  • Ora esegui frida-compile ../projects/YOUR_PROJECT/YOUR_SPECIALIZED_HARNESS.JS -o ../projects/YOUR_PROJECT/harness.js. Poiché questo è stato installato nel contesto npm, potrebbe essere necessario eseguire npx frida-compile invece. Ogni volta che l'harness cambia, devi rieseguire .

Fuzzing:

  • Collega un dispositivo iOS al computer.
  • È consigliabile mettere il telefono in modalità aereo e attivare la funzione 'Non disturbare' per limitare qualsiasi altra attività sul telefono.
  • Esegui killall -9 bluetoothd per avviare bluetoothd da capo.
  • Assicurati che il telefono non si connetta ad altri dispositivi Bluetooth.
  • Ora, cd nella directory del tuo progetto, crea la directory dei log di crash (mkdir crashes) ed esegui ../../frizzer/fuzzer.py fuzz -p .
  • Evviva! Ora raccogli zero-day e ottieni grandi quantità di denaro da Apple! (Oppure raccogli un'enorme lista di dereferenze di puntatori NULL inutili...)

In breve, per avviare un nuovo progetto, esegui:

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 .

Puoi iniziare con un seed diverso usando frizzer/fuzzer.py fuzz --seed 1234 -p ..

Aggiungere nuove versioni di iOS:

Attualmente, diverse versioni di iOS sono definite in bluetoothd.js. Puoi trovarle con lo strumento di versioning Ghidra data una versione iniziale che abbia tutti i simboli richiesti. Nota che alcuni di essi non sono nominati nel binario iOS originale, quindi idealmente inizia con uno che sia già stato annotato prima. Ogni volta che bluetoothd.js cambia, devi rieseguire frida-compile.

Aumentare le capacità di bluetoothd:

I log di crash di iOS sono memorizzati in Impostazioni -> Privacy -> Analisi e Miglioramenti -> Dati di Analisi. Se contengono crash di bluetoothd con il pattern bluetoothd.cpu_resource-*.ips, ciò indica che il crash è stato causato dal superamento delle risorse. Possono essere aumentati come segue.

Su un iPhone 7, esegui:

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

Su iPhone SE2, questi si trovano in 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

Cerca bluetoothd, aggiorna la priorità a 19 (la priorità valida più alta) e imposta il limite di memoria a un valore molto alto. Applica le stesse modifiche a entrambi i file.

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>

Riscrivi le modifiche e riavvia 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

Rispettivamente su iPhone SE2:

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

Eliminare i vecchi log:

iOS smette di salvare i log di crash per un programma dopo aver raggiunto il limite di 25. Se carichi un log di crash con Xcode (tramite Simulators&Devices), vengono aggiunti alcuni simboli alla traccia dello stack. Una volta raggiunto il limite, i log possono essere rimossi tramite Xcode o direttamente sul dispositivo iOS cancellandoli nella cartella /var/mobile/Library/Logs/CrashReporter/.

A12+:

A partire da iPhone XR/Xs, è stato introdotto PAC. Questo richiede di chiamare sign() su NativeFunction in FRIDA. Mentre questa è una no-op sulle CPU precedenti, riduce enormemente la velocità sui dispositivi più nuovi, ma è necessaria per farli funzionare. Abbiamo osservato che ToothPicker opera a metà velocità quando si usa un iPhone SE2 invece di un iPhone 7.

Fuzzer Over-the-Air e Replay dei Crash

L'implementazione MagicPairing del fuzzer over-the-air richiede che InternalBlue sia installato e può essere eseguita lanciando python MagicPairingFuzzer.py TARGET_BD_ADDR.

Se vuoi riprodurre i crash, usa lo script ReplayCrashFile.py, che può prendere un file di crash e avviare una connessione over-the-air con un payload basato sul crash.

Scarica lo strumento
frida-compile