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
BTLE — 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). | Kitploit
Herramientas/GitHubGitHub/jiaoxianjun/btle
Sniffing y Análisis de PaquetesSeguridad BluetoothSeguridad IoTSeguridad Inalámbrica
GitHubjiaoxianjun/btle

BTLE

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).

Ver Repositorio
927171hace 2 mesesRevisado 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
Sitio web

BTLE

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:

  • Descripción de algoritmos, implementación en Python y Verilog, resultados de FPGA y PDK SkyWater 130 (flujo de trabajo OpenLane2) de la banda base BTLE.
  • Implementación con Analog Devices AD9361 + FPGA Xilinx Zynq: FPGA Bluetooth
  • btle_rx - Sniffer BLE. Además de esnifar el canal de difusión/fijo, también puede rastrear el salto de canal de un enlace de comunicación.
  • btle_tx - Transmisor universal de paquetes BLE. Además del estándar BLE, también admite el modo de bits en bruto para generar paquetes GFSK arbitrarios. De esta manera, puedes probar protocolos no estándar o estándares en discusión antes de que el chip llegue al mercado.

Características

  • La PHY y la capa superior están implementadas en software (lenguaje C). Flexibilidad total de radio definida por software (Software Defined Radio).
  • PHY GFSK BLE estándar de 1 Mbps.
  • Se admiten todos los formatos de paquetes de la capa de enlace de los canales ADV y DATA en Core_V4.0 (Capítulos 2 y 3, Parte B, Volumen 6).
  • El sniffer es capaz de analizar y rastrear automáticamente el patrón de salto de canal, sin limitarse al canal de difusión o a un canal fijo.

Hardware

  • HackRF
  • bladeRF
  • versión compatible de las librerías de HackRF y bladeRF

Compilación y prueba rápida

Asegúrate de que el entorno de hardware SDR (controlador/librería) se haya configurado correctamente antes de ejecutar este proyecto.

root@kitploit:~
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.

root@kitploit:~
./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:

root@kitploit:~
#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

Uso de btle_rx

root@kitploit:~
-h --help

Imprime todos los argumentos/usos.

root@kitploit:~
-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).

root@kitploit:~
-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.

root@kitploit:~
-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.

root@kitploit:~
-b --amp

Habilita el amplificador (solo HackRF). Apagado por defecto.

root@kitploit:~
-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.

root@kitploit:~
-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.

root@kitploit:~
-v --verbose

Modo verboso. Imprime más información cuando hay un error.

root@kitploit:~
-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).

root@kitploit:~
-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).

root@kitploit:~
-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).

root@kitploit:~
-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.

root@kitploit:~
-s --filename

Guarda los paquetes en un archivo pcap.

Uso de btle_tx

root@kitploit:~
btle_tx packet1 packet2 ... packetX ...  rN

o

root@kitploit:~
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.

root@kitploit:~
packetX 

es una cadena que describe un paquete. Todos los paquetes componen una secuencia de paquetes.

root@kitploit:~
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

root@kitploit:~
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.

  • Ejemplo de btle_tx: Paquetes de descubrimiento

Abre la app LightBlue (u otro sniffer BLE) en tu iPhone/dispositivo antes de este comando:

root@kitploit:~
./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:

root@kitploit:~
./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.

  • Ejemplo de btle_tx: Establecimiento de conexión
root@kitploit:~
btle_tx 37-ADV_IND-TxAdd-0-RxAdd-0-AdvA-90D7EBB19299-AdvData-0201050702031802180418-Space-1      37-CONNECT_REQ-TxAdd-0-RxAdd-0-InitA-001830EA965F-AdvA-90D7EBB19299-AA-60850A1B-CRCInit-A77B22-WinSize-02-WinOffset-000F-Interval-0050-Latency-0000-Timeout-07D0-ChM-1FFFFFFFFF-Hop-9-SCA-5-Space-1     9-LL_DATA-AA-60850A1B-LLID-1-NESN-0-SN-0-MD-0-DATA-XX-CRCInit-A77B22-Space-1

Lo anterior simula un procedimiento de establecimiento de conexión entre el dispositivo 1 y el dispositivo 2. Archivo descriptor correspondiente: BTLE/host/btle-tools/src/packets.txt.

El primer paquete -- el dispositivo 1 envía el paquete ADV_IND en el canal 37.

El segundo paquete -- Después de que el dispositivo 2 (en estado de escaneo) recibe el paquete ADV del dispositivo 1, el dispositivo 2 envía el paquete CONNECT_REQ para solicitar el establecimiento de conexión con el dispositivo 1. En este paquete de solicitud se incluyen la dirección MAC del dispositivo 2 (InitA), la dirección MAC de destino (dirección MAC del dispositivo 1, AdvA), la dirección de acceso (AA) que usará el dispositivo 1 en el envío posterior de paquetes en el canal de datos, el valor de inicialización de CRC para el posterior envío de paquetes del dispositivo 1, la información de saltos de canal (ChM y Hop) para el canal de datos usado por el dispositivo 1, etc.

El tercer paquete -- el dispositivo 1 envía una PDU de datos vacía de la capa de enlace en el canal 9 (determinado por el esquema de saltos) de acuerdo con la información de solicitud de conexión recibida del dispositivo 2. ("XX" después del campo "DATA" significa que no hay datos para este campo).

El espacio de tiempo entre paquetes es de 1s (1000 ms). Sintoniza el sniffer de paquetes de TI al canal 37 y se capturará el procedimiento de establecimiento anterior.

  • Ejemplo de btle_tx: iBeacon
root@kitploit:~
./btle-tools/src/btle_tx 37-iBeacon-AdvA-010203040506-UUID-B9407F30F5F8466EAFF925556B57FE6D-Major-0008-Minor-0009-TxPower-C5-Space-100     r100

El comando anterior envía el paquete iBeacon y lo repite 100 veces con un espacio de tiempo de 100 ms. Archivo descriptor correspondiente: BTLE/host/btle-tools/src/packets_ibeacon.txt. Puedes usar un dongle sniffer BLE para ver el paquete.

La cadena descriptora del paquete:

root@kitploit:~
37-iBeacon-AdvA-010203040506-UUID-B9407F30F5F8466EAFF925556B57FE6D-Major-0008-Minor-0009-TxPower-C5-Space-100
root@kitploit:~
37

canal 37 (uno de los canales de publicidad BTLE 37, 38, 39)

root@kitploit:~
iBeacon

palabra clave de formato de paquete que significa formato iBeacon. (En realidad, es el formato ADV_IND en Core_V4.0.pdf)

root@kitploit:~
AdvA

dirección de publicidad (dirección MAC) que se establece como 010203040506 (ver Core_V4.0.pdf)

root@kitploit:~
UUID

aquí la especificamos como el UUID fijo de Estimote: B9407F30F5F8466EAFF925556B57FE6D

root@kitploit:~
Major

número mayor del formato iBeacon. (Aquí es 0008)

root@kitploit:~
Minor

número menor del formato iBeacon. (Aquí es 0009)

root@kitploit:~
Txpower

parámetro de potencia de transmisión del formato iBeacon (Aquí es C5)

root@kitploit:~
Space

Cuántos milisegundos se esperarán después de enviar este paquete. (Aquí son 100 ms)

Demostraciones

Consulta una comparación con el sniffer de paquetes de TI aquí: http://sdr-x.github.io/BTLE-SNIFFER/

Consulta demo en video de btle_rx o demo en video de btle_rx (en China) y demo en video 1 de btle_tx o demo en video 2 de btle_tx (en China)

Apéndice: ejemplos de descriptores de paquetes de btle_tx para todos los formatos


Paquetes RAW: (Todos los bits se enviarán directamente al modulador GFSK)

root@kitploit:~
37-RAW-aad6be898e8dc3ce338c4cb1207730144f9474e0e15eedb378c3bc

Paquetes de canal de PUBLICIDAD (ADVERTISING) (canal 37, por ejemplo):

root@kitploit:~
37-IBEACON-AdvA-010203040506-UUID-B9407F30F5F8466EAFF925556B57FE6D-Major-0008-Minor-0009-TxPower-C5
37-ADV_IND-TxAdd-1-RxAdd-0-AdvA-010203040506-AdvData-00112233445566778899AABBCCDDEEFF
37-ADV_DIRECT_IND-TxAdd-1-RxAdd-0-AdvA-010203040506-InitA-0708090A0B0C
37-ADV_NONCONN_IND-TxAdd-1-RxAdd-0-AdvA-010203040506-AdvData-00112233445566778899AABBCCDDEEFF
37-ADV_SCAN_IND-TxAdd-1-RxAdd-0-AdvA-010203040506-AdvData-00112233445566778899AABBCCDDEEFF
37-SCAN_REQ-TxAdd-1-RxAdd-0-ScanA-010203040506-AdvA-0708090A0B0C
37-SCAN_RSP-TxAdd-1-RxAdd-0-AdvA-010203040506-ScanRspData-00112233445566778899AABBCCDDEEFF
37-CONNECT_REQ-TxAdd-1-RxAdd-0-InitA-010203040506-AdvA-0708090A0B0C-AA-01020304-CRCInit-050607-WinSize-08-WinOffset-090A-Interval-0B0C-Latency-0D0E-Timeout-0F00-ChM-0102030405-Hop-3-SCA-4

Paquetes de canal de DATOS (DATA) (canal 9, por ejemplo):

root@kitploit:~
9-LL_DATA-AA-60850A1B-LLID-1-NESN-0-SN-0-MD-0-DATA-XX-CRCInit-A77B22
9-LL_CONNECTION_UPDATE_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-WinSize-02-WinOffset-0e0F-Interval-0450-Latency-0607-Timeout-07D0-Instant-eeff-CRCInit-A77B22
9-LL_CHANNEL_MAP_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-ChM-1FFFFFFFFF-Instant-0201-CRCInit-A77B22
9-LL_TERMINATE_IND-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-ErrorCode-12-CRCInit-A77B22
9-LL_ENC_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-Rand-0102030405060708-EDIV-090A-SKDm-0102030405060708-IVm-090A0B0C-CRCInit-A77B22
9-LL_ENC_RSP-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-SKDs-0102030405060708-IVs-01020304-CRCInit-A77B22
9-LL_START_ENC_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-CRCInit-A77B22
9-LL_START_ENC_RSP-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-CRCInit-A77B22
9-LL_UNKNOWN_RSP-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-UnknownType-01-CRCInit-A77B22
9-LL_FEATURE_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-FeatureSet-0102030405060708-CRCInit-A77B22
9-LL_FEATURE_RSP-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-FeatureSet-0102030405060708-CRCInit-A77B22
9-LL_PAUSE_ENC_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-CRCInit-A77B22
9-LL_PAUSE_ENC_RSP-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-CRCInit-A77B22
9-LL_VERSION_IND-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-VersNr-01-CompId-0203-SubVersNr-0405-CRCInit-A77B22
9-LL_REJECT_IND-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-ErrorCode-00-CRCInit-A77B22

Paquetes de descubrimiento: (que pueden mostrar cualquier nombre o servicio en una app de escaneo, como LightBlue):

root@kitploit:~
37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-FLAGS-02-LOCAL_NAME09-CA-TXPOWER-03-SERVICE03-180D1810-SERVICE_DATA-180D40-MANUF_DATA-0001FF-CONN_INTERVAL-0006 (-SERVICE_SOLI14-1811)

FLAGS: 0x01 LE Limited Discoverable Mode; 0x02 LE General Discoverable Mode
SERVICE:
0x02 16-bit Service UUIDs More 16-bit UUIDs available
0x03 16-bit Service UUIDs Complete list of 16-bit UUIDs available
0x04 32-bit Service UUIDs More 3a2-bit UUIDs available
0x05 32-bit Service UUIDs Complete list of 32-bit UUIDs available
0x06 128-bit Service UUIDs More 128-bit UUIDs available
0x07 128-bit Service UUIDs Complete list of 128-bit UUIDs available
Descargar herramienta