用于TI CC1352/CC26x2硬件的蓝牙5和4.x低功耗蓝牙(LE)嗅探器,支持扩展广播、所有PHY模式、MAC/RSSI过滤,以及兼容Wireshark的PCAP导出。
Sniffle 是一款使用 TI CC1352/CC26x2 硬件进行蓝牙 5 和 4.x(LE)嗅探的工具。
Sniffle 拥有许多实用功能,包括:
如果您不想费心为固件搭建构建环境,可以直接使用 UniFlash/DSLite 刷写预构建的固件二进制文件。 预构建的固件二进制文件附在本项目的 GitHub releases 页面的发行版中。使用预构建固件时,请确保使用与发行版标签对应的 Python 代码,而不是 master 分支,以避免与落后于 master 分支的固件出现兼容性问题。
各类 Linux 发行版包管理器提供的 arm-none-eabi-gcc 通常缺少某些头文件,或者需要对链接器配置进行一些更改。为减少麻烦,建议使用上面链接的 ARM GCC。您只需下载并解压预构建的可执行文件即可。
TI SDK 以可执行二进制文件的形式提供,一旦您接受许可协议,它就会提取大量源代码。在 Linux 和 Mac 上,默认安装目录在 ~/ti/ 内。这工作正常,我的 makefile 也期望该路径,因此我建议在此处直接使用默认路径。TI SysConfig 工具也是如此。
解压 SDK 后,您需要编辑一个 makefile 以匹配您的构建环境。在 ~/ti/simplelink_cc13xx_cc26xx_sdk_8_30_01_01(或 SDK 安装到的任何位置)中有一个名为 imports.mak 的 makefile。要构建 Sniffle,需要在此处设置的唯一路径是 GCC、XDC、cmake 和 SysConfig。我们不需要 CCS 编译器。请参见下面的差异示例,并根据您的安装位置进行调整。```
diff --git a/imports.mak b/imports.mak
index b2cf5bf59..389d1a7c3 100644
--- a/imports.mak
+++ b/imports.mak
@@ -18,14 +18,14 @@
-XDC_INSTALL_DIR ?= /home/username/ti/xdctools_3_62_01_15_core -SYSCONFIG_TOOL ?= /home/username/ti/ccs1270/ccs/utils/sysconfig_1.21.1/sysconfig_cli.sh +XDC_INSTALL_DIR ?= $(HOME)/ti/xdctools_3_62_01_15_core +SYSCONFIG_TOOL ?= $(HOME)/ti/sysconfig_1.21.1/sysconfig_cli.sh
-CMAKE ?= /home/username/cmake-3.21.3/bin/cmake +CMAKE ?= cmake PYTHON ?= python3
TICLANG_ARMCOMPILER ?= /home/username/ti/ccs1270/ccs/tools/compiler/ti-cgt-armllvm_3.2.2.LTS-0 -GCC_ARMCOMPILER ?= /home/username/arm-none-eabi-gcc/12.3.Rel1-0 +GCC_ARMCOMPILER ?= $(HOME)/arm_tools/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi IAR_ARMCOMPILER ?= /home/username/iar9.50.2
As of SDK version 8.30.01.01, to compile with recent versions of GCC (and binutils),
a small modification to the SDK is needed to avoid linking errors
"Unknown destination type (ARM/Thumb)" and "dangerous relocation: unsupported relocation".```
diff --git a/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s b/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s
index 187cfd744..4cbf0d384 100644
--- a/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s
+++ b/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s
@@ -236,6 +236,7 @@ lab$1:
@ user code has set the PRIMASK and not cleared it, or when single
@ stepping with interrupts disabled.
+.type ti_sysbios_family_arm_m3_Hwi_interruptsAreDisabledButShouldNotBe, %function
ti_sysbios_family_arm_m3_Hwi_interruptsAreDisabledButShouldNotBe:
b ti_sysbios_family_arm_m3_Hwi_interruptsAreDisabledButShouldNotBe
diff --git a/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s b/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s
index 717f49c9a..1c83ed725 100644
--- a/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s
+++ b/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s
@@ -226,6 +226,7 @@ lab$1:
@ user code has set the PRIMASK and not cleared it, or when single
@ stepping with interrupts disabled.
+.type ti_sysbios_family_arm_v8m_Hwi_interruptsAreDisabledButShouldNotBe, %function
ti_sysbios_family_arm_v8m_Hwi_interruptsAreDisabledButShouldNotBe:
b ti_sysbios_family_arm_v8m_Hwi_interruptsAreDisabledButShouldNotBe
进行此修改后,您需要重新编译SDK。``` cd ~/ti/simplelink_cc13xx_cc26xx_sdk_8_30_01_01 make build-gcc -j5
### 获取 DSLite
DSLite 是 TI 基于 XDS110 调试器的命令行编程和调试服务器工具。CC26xx 和 CC13xx Launchpad 板均包含 XDS110 调试器。遗憾的是,TI 并未提供独立的命令行 DSLite 下载。获取 DSLite 的最简单方法是安装 TI 的 [UniFlash](http://www.ti.com/tool/download/UNIFLASH)。它可用于 Linux、Mac 和 Windows 平台。DSLite 可执行文件位于 UniFlash 安装目录下的 `deskdb/content/TICloudAgent/linux/ccs_base/DebugServer/bin/DSLite`。在 Linux 上,UniFlash 的默认安装目录在 `~/ti/` 内。
你应该将 DSLite 可执行文件目录添加到你的 `$PATH` 中。
## 固件构建
在安装并配置好 GCC、DSLite 和 SDK 后,构建 Sniffle 应该很简单。只需进入 `fw` 目录并运行 `make`。如果你没有将 SDK 安装到默认目录,可能需要编辑 makefile 中的 `SIMPLELINK_SDK_INSTALL_DIR`。
如果为 CC26x2R 以外的 Launchpad 变体构建或安装固件,必须指定 `PLATFORM=xxx`,可以将其作为 make 的参数,或在调用 make 之前定义环境变量。支持的 `PLATFORM` 值可在固件 makefile 中找到。在为目标平台构建之前,务必执行 `make clean`。
## 固件安装(TI Launchpad 板)
要使用 DSLite 将 Sniffle 安装到(已插入的)CC26x2R Launchpad 上,请在 `fw` 目录内运行 `make load`。对于其他 Launchpad 型号,必须如上所述在 make 命令中指定 `PLATFORM` 参数。你也可以使用 UniFlash GUI 烧写编译好的 `sniffle.hex` 文件。
## 固件安装(SONOFF USB 加密狗)
要将 Sniffle 安装到 SONOFF CC2652P 加密狗(配备 CP2102N USB/UART 桥接器)上,可以使用 [JelmerT/cc2538-bsl](https://github.com/JelmerT/cc2538-bsl) 工具,通过内置 ROM 引导加载程序烧写固件,命令如下:```
python3 cc2538-bsl.py -p /dev/ttyUSB0 --bootloader-sonoff-usb -ewv sniffle_cc1352p1_cc2652p1.hex
截至2025年1月10日,cc2538-bsl 中存在一个错误,导致其在刷新后无法重置 Sonoff 加密狗中的 CC2562P 芯片。该修复位于拉取请求 173 中,但尚未合并。在此期间等待拉取请求合并时,你可以使用我的分支:https://github.com/sultanqasim/cc2538-bsl。
2022年,由于新冠疫情导致的芯片短缺,部分 Sonoff CC2652P 加密狗使用了 CP2102(非 N 型)USB/UART 桥接芯片,其波特率上限为 921600。如果你拥有这样的加密狗,则需要刷新使用较慢波特率 921600 的不同固件映像。该特殊慢波特率版本的名称为 sniffle_cc1352p1_cc2652p1_1M.hex(构建变体 CC2652P1F_1M)。你还需要使用选项 -b 921600 调用 Sniffle 实用程序,以覆盖默认的 2000000 波特率。
警告: 请勿使用引导加载程序刷新错误的构建变体,否则可能导致设备变砖并无法再次进入引导加载程序。对于 Sonoff CC2652P 设备,请使用 sniffle_cc1352p1_cc2652p1.hex 文件(CC2652P1F 构建变体)或 sniffle_cc1352p1_cc2652p1_1M.hex 文件(CC2652P1F_1M 构建变体)以使用 921600 波特率。如果刷错了变体并锁定了引导加载程序,可能可以使用 JTAG/SWD 恢复设备。
Electronic Cats 提供了一个 Catnip Uploader 工具用于加载固件。详细信息请参考仓库。下载该工具并执行以下命令:```bash
[ec@sniffle]$ git clone https://github.com/ElectronicCats/CatSniffer-Tools.git [ec@sniffle]$ cd CatSniffer-Tools/catnip_uploader [ec@sniffle]$ pip install -r requirements.txt
[ec@sniffle]$ python3 catnip_uploader.py releases [INFO] Fetching assets from https://api.github.com/repos/ElectronicCats/CatSniffer-Firmware/releases/latest [INFO] Release: board-v3.x-v1.1.0 [INFO] Fetching assets from https://api.github.com/repos/nccgroup/Sniffle/releases/latest [INFO] Release: v1.10.0 [INFO] Found local release: releases_board-v3.x-v1.1.0 [SUCCESS] Local release is up to date: board-v3.x-v1.1.0 [SUCCESS] Available releases: 0: sniffer_fw_CC1352P_7_v1.10.hex 1: airtag_scanner_CC1352P_7_v1.0.hex 2: nccgroup_v1.10.0_sniffle_cc1352p7_1M.hex 3: airtag_spoofer_CC1352P_7_v1.0.hex 4: sniffle_CC1352P_7_v1.7.hex