
Sniffer di pacchetti e trasmettitore Bluetooth Low Energy (BLE) sia per standard che non standard (bit grezzi) basato su Software Defined Radio (SDR).
BTLE è una suite software libera e open-source per Bluetooth Low Energy (BLE) basata su Software Defined Radio, insieme a un progetto open di chip BTLE.
Include:
Assicurati che l'ambiente hardware SDR (driver/lib) sia stato configurato correttamente prima di eseguire questo progetto.
git clone https://github.com/JiaoXianjun/BTLE.git
cd BTLE/host
mkdir build
cd build
cmake ../ (default. for HackRF)
cmake ../ -DUSE_BLADERF=1 (only for bladeRF)
make
./btle-tools/src/btle_rx
Il comando precedente effettua lo sniffing sul canale 37. Dovresti vedere molti pacchetti sullo schermo se hai dispositivi BLE (telefono/tablet/portatile) nelle vicinanze.
./btle-tools/src/btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR/Bluetooth/Low/Energy r500
Il comando precedente trasmette pacchetti discovery sul canale ADV. Dovresti vedere un dispositivo con nome "SDR/Bluetooth/Low/Energy" in un'altra app sniffer BLE (come LightBlue).
Per avere una sequenza di operazioni più veloce su HACKRF, usa quanto segue:
#define TRANSFER_COUNT 4
#define TRANSFER_BUFFER_SIZE 4096
in hackrf/host/libhackrf/src/hackrf.c. Quindi ricompila la libreria HACKRF e reinstallala. Non dimenticare di ricompilare BTLE per applicare la modifica alla libreria HACKRF.
Oltre agli strumenti, la directory matlab include la valutazione degli algoritmi e altri script utili
-h --help
Stampa tutti gli argomenti/gli usi.
-c --chan
Numero del canale. Valore predefinito 37 (uno dei canali ADV). Valori validi 0~39 (tutti i canali ADV e DATA).
-g --gain
Guadagno di ricezione in dB. HACKRF rxvga predefinito 6, valori validi 0 - 62. Il default di bladeRF è il guadagno rx massimo di 66dB (valido 0 - 66). Il guadagno deve essere regolato con molta attenzione per garantire le migliori prestazioni nella tua situazione. Si consiglia di provare partendo da un guadagno basso, perché un guadagno alto provoca sempre una forte distorsione e non ottieni nulla.
-l --lnaGain
Guadagno LNA in dB (solo HackRF). Predefinito 32, valori validi 0 - 40. Il guadagno deve essere regolato con molta attenzione per garantire le migliori prestazioni nella tua situazione.
-b --amp
Abilita l'amplificatore (solo HackRF). Predefinito: disattivato.
-a --access
Access address. Predefinito 8e89bed6 per i canali ADV 37, 38, 39. Dovresti specificare il valore corretto per il canale dati in base alla procedura di setup della connessione catturata.
-k --crcinit
Predefinito 555555 per il canale ADV. Dovresti specificare il valore corretto per il canale dati in base alla procedura di setup della connessione catturata.
-v --verbose
Modalità verbose. Stampa più informazioni quando c'è un errore
-r --raw
Modalità raw. Dopo il rilevamento dell'access addr, stampa i successivi 42 byte raw (senza de-scrambling né parsing)
-f --freq_hz (need argument)
Questa frequenza (Hz) avrà la precedenza sull'impostazione del canale (nel caso in cui si voglia lavorare su una frequenza diversa da BTLE. Scopo più generale).
-m --access_mask (need argument)
Se un bit di questa maschera è 1, il bit corrispondente nell'access address verrà incluso nella decisione sull'esistenza del pacchetto (nel caso in cui si voglia una parola unica più corta/rada per il rilevamento dei pacchetti. Scopo più generale).
-o --hop
Questo attiva il tracciamento del canale dati (frequency hopping) dopo che le informazioni di setup del collegamento vengono catturate nel pacchetto ADV_CONNECT_REQ sul canale ADV.
-s --filename
Salva i pacchetti in un file pcap.
btle_tx packet1 packet2 ... packetX ... rN
oppure
btle_tx packets.txt
packets.txt è un file di testo che contiene i parametri della riga di comando (packet1 packet2 ... rN) come testo. Un parametro per riga. Una riga che inizia con "#" è considerata un commento. Vedi esempio packets.txt
packetX
è una stringa che descrive un pacchetto. Tutti i pacchetti compongono una sequenza di pacchetti.
rN
significa che la sequenza verrà ripetuta N volte. Se non viene specificato, la sequenza verrà inviata una sola volta.
Formato della stringa packetX
channel_number-packet_type-field-value-field-value-...-Space-value
Ogni stringa descrittiva inizia con il numero del canale BTLE (0~39), seguita dal packet_type (RAW/iBeacon/ADV_IND/ADV_DIRECT_IND/etc. Vedi tutti gli esempi di formato ALLA FINE: Appendice), quindi dalla coppia campo-valore specifica del packet_type; alla fine c'è la coppia Space-value (opzionale), in cui il valore specifica quanti millisecondi attendere dopo l'invio di questo pacchetto.
NON usare il carattere spazio " " in un descrittore di pacchetto da riga di comando. PUOI usare lo spazio nel descrittore di pacchetto nel file txt.
NON usare "-" all'interno di ciascun campo. "-" è un carattere magico usato per separare i diversi campi nel descrittore di pacchetto.
Apri l'app LightBlue (o un altro sniffer BLE) sul tuo iPhone/dispositivo prima di questo comando:
./btle-tools/src/btle_tx ../btle-tools/src/packets_discovery.txt
Vedrai un dispositivo chiamato "SDR Bluetooth Low Energy" nella tua app LightBlue.
Riga di comando corrispondente:
./btle-tools/src/btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR/Bluetooth/Low/Energy r40
Nota: lo spazio " " è sostituito da "/" perché lo spazio " " non è supportato nella riga di comando.