Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
BTLE — 基于软件定义无线电(SDR)的低功耗蓝牙(BLE)数据包嗅探器和发射器,支持标准及非标准(原始比特)模式。 | Kitploit
工具/GitHubGitHub/jiaoxianjun/btle
数据包嗅探与分析蓝牙安全物联网安全无线安全
GitHubjiaoxianjun/btle

BTLE

基于软件定义无线电(SDR)的低功耗蓝牙(BLE)数据包嗅探器和发射器,支持标准及非标准(原始比特)模式。

查看仓库网站
9271712个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

BTLE

BTLE 是一个免费开源的低功耗蓝牙(BLE)软件无线电(SDR)软件套件,以及开放的 BTLE 芯片设计。

它包含:

  • BTLE 基带算法描述、Python 和 Verilog 实现、FPGA 及 SkyWater 130 PDK(OpenLane2 工作流)结果。
  • Analog Devices AD9361 + Xilinx Zynq FPGA 实现:FPGA Bluetooth
  • btle_rx - BLE 嗅探器。除了嗅探广播/固定信道外,它还可以跟踪通信链路的跳频。
  • btle_tx - 通用 BLE 数据包发射器。除了 BLE 标准外,它还支持原始比特模式以生成任意的 GFSK 数据包。这样,你可以在芯片上市前测试非标准协议或正在讨论中的标准。

功能特性

  • PHY 和上层协议均在软件(C 语言)中实现。完全的软件无线电灵活性。
  • BLE 标准 1Mbps GFSK PHY。
  • 支持 Core_V4.0(第 2 和第 3 章,PartB,Volume 6)中所有 ADV 和 DATA 信道链路层数据包格式。
  • 嗅探器能够自动解析并跟踪跳频模式,不仅限于广播信道或固定信道。

硬件

  • HackRF
  • bladeRF
  • 兼容版本的 HackRF 和 bladeRF 库

构建与快速测试

在运行此项目之前,请确保你的 SDR 硬件环境(驱动/库)已正确设置。

root@kitploit:~
git clone https://github.com/JiaoXianjun/BTLE.git
cd BTLE/host
mkdir build
cd build
cmake ../                   (默认。用于 HackRF)
cmake ../ -DUSE_BLADERF=1   (仅用于 bladeRF)

make
./btle-tools/src/btle_rx

上面的命令会在信道 37 上嗅探。如果你周围有 BLE 设备(手机/平板/笔记本),屏幕上应该会看到许多数据包。

root@kitploit:~
./btle-tools/src/btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR/Bluetooth/Low/Energy r500 

上面的命令会在 ADV 信道上发送发现数据包。你应该能在另一个 BLE 嗅探器 App(如 LightBlue)中看到一个名为 "SDR/Bluetooth/Low/Energy" 的设备。

要在 HACKRF 上获得更快的操作序列,请使用以下配置:

root@kitploit:~
#define TRANSFER_COUNT 4
#define TRANSFER_BUFFER_SIZE 4096

位于 hackrf/host/libhackrf/src/hackrf.c 中。然后重新编译 HACKRF 库并重新安装。别忘了重新编译 BTLE 以应用 HACKRF 库的更改。

除了工具之外,matlab 目录还包含算法评估和其他有用的脚本

btle_rx 用法

root@kitploit:~
-h --help

打印所有参数/用法。

root@kitploit:~
-c --chan

信道号。默认值为 37(ADV 信道之一)。有效值为 0~39(所有 ADV 和 DATA 信道)。

root@kitploit:~
-g --gain

接收增益,单位 dB。HACKRF rxvga 默认为 6,有效范围 0 - 62。bladeRF 默认为最大接收增益 66dB(有效范围 0 - 66)。应根据你的实际环境非常仔细地调整增益,以保证最佳性能。建议从低增益开始测试,因为高增益往往会导致严重失真并且一无所获。

root@kitploit:~
-l --lnaGain

LNA 增益,单位 dB(仅 HackRF)。默认为 32,有效范围 0 - 40。应根据你的实际环境非常仔细地调整增益,以保证最佳性能。

root@kitploit:~
-b --amp

启用功放(仅 HackRF)。默认关闭。

root@kitploit:~
-a --access

接入地址(Access address)。ADV 信道 37 38 39 默认为 8e89bed6。对于数据信道,应根据捕获到的连接建立过程指定正确的值。

root@kitploit:~
-k --crcinit

ADV 信道默认为 555555。对于数据信道,应根据捕获到的连接建立过程指定正确的值。

root@kitploit:~
-v --verbose

详细模式。出错时打印更多信息。

root@kitploit:~
-r --raw

原始模式。检测到接入地址后,打印出后面的原始 42 字节(不进行解扰、解析)。

root@kitploit:~
-f --freq_hz (需要参数)

该频率(Hz)将覆盖信道设置(以防有人想在不属于 BTLE 的频率上工作。更通用的用途)。

root@kitploit:~
-m --access_mask (需要参数)

如果该掩码中的某一位为 1,则接入地址中的对应位将参与数据包存在性判定(以防有人想用更短/更稀疏的唯一字来做数据包检测。更通用的用途)。

root@kitploit:~
-o --hop

在 ADV 信道上的 ADV_CONNECT_REQ 数据包中捕获到链路建立信息后,开启数据信道跟踪(跳频)。

root@kitploit:~
-s --filename

将数据包存储到 pcap 文件。

btle_tx 用法

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

或

root@kitploit:~
btle_tx packets.txt

packets.txt 是一个文本文件,其中包含命令行参数(packet1 packet2 ... rN)文本。每行一个参数。以 "#" 开头的行被视为注释。参见 packets.txt 示例

root@kitploit:~
packetX 

是一个用于描述一个数据包的字符串。所有数据包共同组成一个数据包序列。

root@kitploit:~
rN

表示该序列将被重复 N 次。如果未指定,该序列将只发送一次。

packetX 字符串格式

root@kitploit:~
channel_number-packet_type-field-value-field-value-...-Space-value

每个描述字符串以 BTLE 信道号(0~39)开头,随后是 packet_type(RAW/iBeacon/ADV_IND/ADV_DIRECT_IND/等。参见所有格式示例文末:附录),随后是特定于 packet_type 的 field-value 对,最后是 Space-value 对(可选),其中 value 指定该数据包发送后要等待多少毫秒。

不要在命令行数据包描述符中使用空格字符 " "。你可以在 txt 文件的数据包描述符中使用空格。

不要在每个字段内部使用 "-"。"-" 是用于分隔数据包描述符中不同字段的神奇字符。

  • btle_tx 示例:发现数据包

在运行此命令之前,在你的 iPhone/设备上打开 LightBlue App(或其他 BLE 嗅探器):

root@kitploit:~
./btle-tools/src/btle_tx ../btle-tools/src/packets_discovery.txt

你将在 LightBlue App 中看到一个名为 "SDR Bluetooth Low Energy" 的设备。

对应的命令行:

root@kitploit:~
./btle-tools/src/btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR/Bluetooth/Low/Energy r40

注意:空格 " " 被 "/" 替换,因为命令行中不支持空格 " "。

  • btle_tx 示例:连接建立
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

以上模拟了设备 1 和设备 2 之间的连接建立过程。对应的描述文件为 BTLE/host/btle-tools/src/packets.txt。

第 1 个数据包 -- 设备 1 在信道 37 上发送 ADV_IND 数据包。

第 2 个数据包 -- 设备 2(处于扫描状态)收到设备 1 的 ADV 数据包后,设备 2 发送 CONNECT_REQ 数据包以请求与设备 1 建立连接。在该请求数据包中,包含设备 2 的 MAC 地址(InitA)、目标 MAC 地址(设备 1 的 MAC 地址 AdvA)、设备 1 后续在数据信道发送数据包时将使用的接入地址(AA)、设备 1 后续发送数据包所使用的 CRC 初始化值、设备 1 使用的数据信道跳频信息(ChM 和 Hop)等。

第 3 个数据包 -- 设备 1 根据从设备 2 收到的这些连接请求信息,在信道 9(由跳频方案决定)发送一个空的链路层数据 PDU。(字段 "DATA" 后的 "XX" 表示该字段没有数据)

数据包之间的时间间隔为 1s(1000ms)。将 TI 的数据包嗅探器调谐到信道 37,然后将捕获到上述建立过程。

  • 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

上面的命令发送 iBeacon 数据包,并以 100ms 的时间间隔重复 100 次。对应的描述文件为 BTLE/host/btle-tools/src/packets_ibeacon.txt。你可以使用 BLE 嗅探器 dongle 来查看该数据包。

数据包描述字符串:

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

信道 37(BTLE 广播信道 37 38 39 之一)

root@kitploit:~
iBeacon

数据包格式关键字,表示 iBeacon 格式。(实际上它是 Core_V4.0.pdf 中的 ADV_IND 格式)

root@kitploit:~
AdvA

广播地址(MAC 地址),此处设置为 010203040506(参见 Core_V4.0.pdf)

root@kitploit:~
UUID

此处我们将其指定为 Estimote 的固定 UUID:B9407F30F5F8466EAFF925556B57FE6D

root@kitploit:~
Major

iBeacon 格式的主要编号。(此处为 0008)

root@kitploit:~
Minor

iBeacon 格式的次要编号。(此处为 0009)

root@kitploit:~
Txpower

iBeacon 格式的发射功率参数(此处为 C5)

root@kitploit:~
Space

该数据包发送后要等待多少毫秒。(此处为 100ms)

演示

查看与 TI 数据包嗅探器的对比:http://sdr-x.github.io/BTLE-SNIFFER/

查看 btle_rx 视频演示或btle_rx 视频演示(在中国观看)以及btle_tx 视频演示 1或btle_tx 视频演示 2(在中国观看)

附录:btle_tx 所有格式的数据包描述符示例


RAW 数据包:(所有比特将直接发送到 GFSK 调制器)

root@kitploit:~
37-RAW-aad6be898e8dc3ce338c4cb1207730144f9474e0e15eedb378c3bc

广播信道数据包(以信道 37 为例):

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

数据信道数据包(以信道 9 为例):

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

发现数据包:(可以在扫描器 App(如 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
下载工具