
Sniffer de paquetes y transmisor Bluetooth Low Energy (BLE) tanto para estándar como no estándar (bit crudo), basado en Radio Definida por Software (SDR).
BTLE es una suite de software gratuito y de código abierto de radio definida por software (Software Defined Radio) para Bluetooth Low Energy (BLE), así como un diseño de chip BTLE abierto.
Incluye:
Asegúrate de que el entorno de hardware SDR (controlador/librería) se haya configurado correctamente antes de ejecutar este proyecto.
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
El comando anterior esnifa en el canal 37. Deberías ver muchos paquetes en pantalla si tienes dispositivos BLE (teléfono/tableta/portátil) cerca.
./btle-tools/src/btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR/Bluetooth/Low/Energy r500
El comando anterior transmite paquetes de descubrimiento en el canal ADV. Deberías ver un dispositivo con el nombre "SDR/Bluetooth/Low/Energy" en otra aplicación sniffer BLE (como LightBlue).
Para tener una secuencia de operación más rápida en HACKRF, usa lo siguiente:
#define TRANSFER_COUNT 4
#define TRANSFER_BUFFER_SIZE 4096
en hackrf/host/libhackrf/src/hackrf.c. Luego recompila la librería de HACKRF y vuelve a instalarla. No olvides recompilar BTLE para que tome el cambio de la librería de HACKRF.
Además de las herramientas, el directorio matlab incluye evaluación de algoritmos y otros scripts útiles
-h --help
Imprime todos los argumentos/usos.
-c --chan
Número de canal. Valor predeterminado 37 (uno de los canales ADV). Valor válido 0~39 (todos los canales ADV y DATA).
-g --gain
Ganancia de recepción (Rx) en dB. HACKRF rxvga predeterminado 6, válido 0 - 62. bladeRF predeterminado es la ganancia máxima de Rx de 66 dB (válido 0 - 66). La ganancia debe ajustarse con mucho cuidado para asegurar el mejor rendimiento en tus condiciones. Se sugiere probar desde una ganancia baja, porque una ganancia alta siempre causa distorsión severa y no obtienes nada.
-l --lnaGain
Ganancia LNA en dB (solo HackRF). Predeterminado 32, válido 0 - 40. La ganancia debe ajustarse con mucho cuidado para asegurar el mejor rendimiento en tus condiciones.
-b --amp
Habilita el amplificador (solo HackRF). Apagado por defecto.
-a --access
Dirección de acceso. Predeterminada 8e89bed6 para los canales ADV 37, 38, 39. Debes especificar el valor correcto para el canal de datos según el procedimiento de configuración de conexión capturado.
-k --crcinit
Predeterminado 555555 para el canal ADV. Debes especificar el valor correcto para el canal de datos según el procedimiento de configuración de conexión capturado.
-v --verbose
Modo verboso. Imprime más información cuando hay un error.
-r --raw
Modo bruto (raw). Después de detectar la dirección de acceso, imprime los siguientes 42 bytes en bruto (sin desaleatorizar ni analizar).
-f --freq_hz (need argument)
Esta frecuencia (Hz) anulará la configuración de canal (en caso de que alguien quiera trabajar en una frecuencia distinta a BTLE. Más propósito general).
-m --access_mask (need argument)
Si un bit es 1 en esta máscara, el bit correspondiente de la dirección de acceso se tendrá en cuenta en la decisión de existencia de paquete (en caso de que alguien quiera una palabra única más corta/menos densa para la detección de paquetes. Más propósito general).
-o --hop
Esto activará el seguimiento del canal de datos (saltos de frecuencia) después de que la información de configuración del enlace se capture en el paquete ADV_CONNECT_REQ en el canal ADV.
-s --filename
Guarda los paquetes en un archivo pcap.
btle_tx packet1 packet2 ... packetX ... rN
o
btle_tx packets.txt
packets.txt es un archivo de texto que contiene los parámetros de línea de comandos (packet1 packet2 ... rN) como texto. Un parámetro por línea. Una línea que comience con "#" se considera comentario. Consulta el ejemplo de packets.txt.
packetX
es una cadena que describe un paquete. Todos los paquetes componen una secuencia de paquetes.
rN
significa que la secuencia se repetirá N veces. Si no se especifica, la secuencia se enviará solo una vez.
Formato de la cadena packetX
channel_number-packet_type-field-value-field-value-...-Space-value
Cada cadena descriptora comienza con el número de canal BTLE (0~39), seguido de packet_type (RAW/iBeacon/ADV_IND/ADV_DIRECT_IND/etc. Consulta todos los ejemplos de formato AL FINAL: Apéndice ), luego un par campo-valor específico de packet_type y, por último, un par Space-valor (opcional) donde el valor especifica cuántos milisegundos se esperarán después de enviar este paquete.
NO uses el carácter de espacio " " en un descriptor de paquete de línea de comandos. SÍ puedes usar espacios en el descriptor de paquete del archivo txt.
NO uses "-" dentro de cada campo. "-" es un carácter mágico que se usa para separar diferentes campos en el descriptor de paquete.
Abre la app LightBlue (u otro sniffer BLE) en tu iPhone/dispositivo antes de este comando:
./btle-tools/src/btle_tx ../btle-tools/src/packets_discovery.txt
Verás un dispositivo llamado "SDR Bluetooth Low Energy" en tu app LightBlue.
Línea de comando correspondiente:
./btle-tools/src/btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR/Bluetooth/Low/Energy r40
Nota: el espacio " " se reemplaza por "/" porque el espacio " " no es compatible en la línea de comandos.