蓝牙与无线信号
蓝牙与无线信号
本文适合
已经理解 流量包基础、音频频谱与DTMF 和基础文件分析的 Misc 学习者。学完你能:区分蓝牙、Wi-Fi、RF/SDR 和音频调制材料,选择 Wireshark、aircrack-ng、Inspectrum、Universal Radio Hacker 或 GNU Radio 做最小验证
一句话判断
题目给 btsnoop_hci.log、无线抓包、Wi-Fi 握手包、IQ 样本、频谱图、.wav 调制音频或 SDR 采样时,就按蓝牙与无线信号题处理。
这类题不是要求你会所有无线协议,而是要求先识别“数据在哪一层”:协议层、链路层、物理信号层,还是音频/频谱隐藏。
题目中常见信号
常见文件:
btsnoop_hci.log
capture.pcap / capture.pcapng
handshake.cap
samples.iq
signal.complex64
signal.wav
radio.cu8工具信号:
Wireshark
aircrack-ng
hcxdumptool / hcxpcapngtool
Universal Radio Hacker
Inspectrum
GNU Radio
Audacity协议或术语:
BLE
GATT
HCI
EAPOL
SSID / BSSID
ASK / OOK / FSK
IQ samples
sample rate
center frequency核心概念
无线题常分四层:
材料:btsnoop_hci.log、BLE pcap
优先工具:Wireshark
材料:cap、pcapng、EAPOL
优先工具:Wireshark、aircrack-ng
材料:IQ 样本、complex64、cu8
优先工具:Inspectrum、URH、GNU Radio
材料:wav、mp3、频谱图
优先工具:Audacity、Python
不要把 IQ 当普通音频,也不要在已经解码到协议层的蓝牙日志上直接做 SDR 解调。先判断层级,工具才不会跑偏。
最小分析流程
1. 识别文件类型
file *如果是 pcap/pcapng:
tshark -r capture.pcapng -q -z io,phs如果是未知二进制,先看大小和字节分布:
xxd -l 64 samples.iq2. 蓝牙先看协议字段
btsnoop_hci.log 可直接用 Wireshark 打开,重点过滤:
btatt
bthci_evt
btle关注:
- Device Name。
- MAC 地址。
- Service UUID。
- Characteristic UUID。
- Read / Write 数据。
- 广播包 Manufacturer Data。
3. Wi-Fi 先看 EAPOL 和明文流量
tshark -r wifi.cap -Y "eapol || wlan.ssid" -T fields -e wlan.ssid -e wlan.bssid如果有握手包,再考虑字典:
aircrack-ng wifi.cap -w wordlist.txt如果没有加密或已经有密钥,继续看 HTTP、DNS、TCP 流量。
4. IQ 样本先确认格式
原始 RF 样本需要知道:
- 采样率。
- 中心频率。
- 数据格式:cu8、cs8、complex64、float32。
- 调制方式:ASK/OOK、FSK、PSK 等。
没有这些信息时,先用 Inspectrum 或 URH 看频谱和重复结构。
5. 音频先看波形和频谱
ffprobe signal.wav或用 Audacity 看:
- 是否有 DTMF。
- 是否有 SSTV。
- 是否在频谱中藏文字。
- 是否是 FSK/ASK 音频调制。
最小验证示例
蓝牙 GATT 数据导出
从蓝牙日志中导出 ATT 写入值:
tshark -r btsnoop_hci.log -Y "btatt.value" -T fields -e btatt.value如果输出:
666c61677b626c655f646174617d验证:
print(bytes.fromhex("666c61677b626c655f646174617d"))得到:
b'flag{ble_data}'Wi-Fi 握手验证
先确认是否有 EAPOL:
tshark -r wifi.cap -Y "eapol" | head有 EAPOL 再跑字典:
aircrack-ng wifi.cap -w rockyou.txt破解成功后,回到 Wireshark 配置密钥,再看上层流量。不要只把密码当最终答案,题目可能还要你解密 HTTP 内容。
IQ 样本最小判断
如果题目给 signal.cu8 和采样率:
sample_rate = 2_000_000
format = unsigned 8-bit IQ在 URH 中按 cu8 导入,先看是否有明显脉冲和重复包。能看到包边界,才继续解调和 bit 解析。
常见利用 / 解题路线
路线总览:
路线一:BLE 日志取证
适合:
btsnoop_hci.log。- BLE 广播、GATT 读写。
- Android 蓝牙日志。
步骤:
- Wireshark 打开日志。
- 过滤
btatt、btle。 - 找设备名、UUID、读写值。
- 十六进制解码。
- 还原 token、flag 或操作序列。
路线二:Wi-Fi 握手和明文流量
适合:
.cap/.pcapng。- 出现 SSID、BSSID、EAPOL。
- 题目给字典或弱密码线索。
步骤:
- 确认 SSID/BSSID。
- 判断是否有完整握手。
- 字典破解或使用题目提示密码。
- 解密后分析 HTTP/DNS/TCP。
路线三:ASK/OOK 或 FSK 遥控信号
适合:
- IQ 样本。
- 重复短包。
- 频谱中有明显载波或两条频率轨迹。
步骤:
- 导入 Inspectrum/URH。
- 找包边界和符号宽度。
- 解调为 bit 流。
- 找前导码、校验、重复帧。
- 解码成文本或控制码。
路线四:音频调制和频谱隐藏
适合:
.wav、.mp3。- 题目暗示听、频谱、拨号音。
步骤:
- 看频谱。
- 识别 DTMF、SSTV、FSK 或隐藏文字。
- 用对应工具解码。
- 回到 音频频谱与DTMF 做细化。
常见失败原因
- 不先判断层级:协议层数据拿去做 SDR,原始 IQ 又直接当 pcap 打开。
- 不确认采样率和格式:IQ 格式错,频谱和解调都会错。
- 只爆破 Wi-Fi 密码:有些题明文信息在 Beacon、Probe 或解密后的 HTTP 里。
- 忽略蓝牙 GATT 数据:flag 常藏在 characteristic value 里。
- 把十六进制当最终答案:很多字段需要 hex、base64、ASCII 再解码。
- 没有记录解调参数:复盘时无法解释 symbol rate、阈值和编码规则。
- 忽略重复帧:无线信号常重复发送,应该比对多帧确认稳定 bit。
迷你案例
题目给:
btsnoop_hci.log第一步确认:
file btsnoop_hci.log第二步导出 GATT 写入值:
tshark -r btsnoop_hci.log -Y "btatt.value" -T fields -e btatt.value得到:
6c6f67696e3a6775657374
666c61677b676174745f6c6f677d第三步解码:
for x in ["6c6f67696e3a6775657374", "666c61677b676174745f6c6f677d"]:
print(bytes.fromhex(x).decode())输出:
login:guest
flag{gatt_log}WP 要说明:
材料是蓝牙 HCI 日志,不是普通网络流量
btatt.value 中包含 GATT 写入值
字段为十六进制 ASCII
解码得到 flag{gatt_log}这条链路短,但完整可复现。