reverse-skills-max: initial public release (restored, redacted, hardened)

This commit is contained in:
baradok609hecl1pq6qi
2026-10-20 02:17:15 +03:00
commit da24c2bd20
2227 changed files with 443931 additions and 0 deletions

View File

@@ -0,0 +1,119 @@
---
name: re-sdr
type: atomic
description: >
射频逆向:信号采集、频谱分析、解调、帧同步与协议恢复、重放。
触发词:SDR、射频、信号分析、解调、RTL-SDR、HackRF、无线协议、遥测。
capabilities: [rf-analysis, sdr-analysis]
---
# 射频信号逆向(SDR)
## 何时使用 / 何时不用
- 用:无线协议/遥控/遥测信号(IoT 无线、遥控器、遥测链路)、信号级协议恢复
- 用:433/868/915MHz ISM 频段传感器/遥控设备快速识别(`rtl_433` 自带解码器,见 [[commands]])
- 用:重放攻击验证(仅授权目标——先把帧解出来再重放,别盲放)
- 不用:有线协议(转 [[re-protocol]]);无线 IoT 协议已封装分析(转 [[re-iot-proto]])
- 不用:只分析已解调的数据流/应用层(直接 [[re-proto-rev]] / [[re-crypto-decrypt]])
- 不用:多通道同时监测(单 RTL-SDR 单通道;多通道需多设备或相位一致的采集方案)
## 工具准备
### RTL-SDR / HackRF(接收硬件)
- 选购指引:RTL-SDR(接收,低成本入门)/ HackRF(收发,重放需要)
- 驱动: `apt install rtl-sdr` / `brew install rtl-sdr`;HackRF: `apt install hackrf` / `brew install hackrf`
- 验证: 硬件插入后 `rtl_test` 或 `hackrf_info` 有输出
- 频率校准: `rtl_test -p` 挂几分钟读稳定 ppm 误差值,采集时 `rtl_sdr ... -e <ppm>` 补偿——频率偏移是解调乱码的首要原因
- 带宽差异: RTL-SDR 稳定带宽约 2.4MHz(理论 3.2MHz 不稳);HackRF 最高 20MHz、半双工——宽带采集/主动发射选 HackRF(见 [[gotchas]])
### GNU Radio(信号处理)
- Linux: `apt install gnuradio` / `pacman -S gnuradio`;macOS: `brew install gnuradio`
- Windows: 官方安装包
- 验证: `gnuradio-companion --version` 或 `grcc --version`
- 无头编译: `grcc flow.grc` 把流程图编译成可执行 Python 脚本——批量/重复解调链用文件管理比每次 GUI 拖线快
### Gqrx(频谱/接收 GUI)
- Debian/Ubuntu: `apt install gqrx-sdr`(注意包名带 -sdr 后缀);Arch: `pacman -S gqrx`;Fedora: `dnf install gqrx`;macOS: `brew install --cask gqrx`
- 验证: `gqrx --version`(或 GUI 能打开并看到频谱瀑布)
- 用途: 实时频谱/瀑布图快速定位活跃信号与中心频率,比命令行扫频直观
### inspectrum(频谱/时序可视化)
- Linux: `apt install inspectrum` 或源码编译;macOS: `brew install inspectrum`
- 验证: `inspectrum --version`
- 用途: 对录好的 IQ 文件做离线时域/频谱分析(找帧结构、符号宽度)
### Universal Radio Hacker (URH)(解调与帧恢复)
- 多平台: `pip install urh`
- 验证: `urh --version`
- 用途: 解调(调制识别)、位流分析(同步字/编码反转)、字段划分一体
### rtl_433(ISM 频段传感器解码)
- Debian/Ubuntu: `apt install rtl-433`;Fedora: `dnf install rtl-433`;macOS: `brew install rtl_433`(下划线);Arch: `pacman -S rtl_433`
- 验证: `rtl_433 -h` 列出支持设备列表(如 0: 通用协议族、1: 温湿度计……)
- 用途: 433/868MHz 气象站/温湿度/车库门等常见遥控协议一键解码
- 持续输出: `rtl_433 -F json -f 433.9M` 按 JSON 持续打印解码结果——长时间监测/采集多个设备信号时配合日志重定向
## 操作步骤
按顺序执行;仅限授权测试(红线:重放/交互需授权)。
1. **信号采集与频谱分析**:
```sh
# 示例(工具可替换):GNU Radio 或命令行采集
rtl_sdr -f 433.9M -s 1M capture.iq
```
- 先全频段扫(找活跃信号)→ 定中心频率与带宽 → 采集 IQ
- 扫描: `rtl_power -f 400M:470M:250k -g 40 -i 10 scan.csv`(输出 CSV,可用 gnuplot 画图)或用 Gqrx 瀑布图
- 调制识别:频谱形状(FSK 双峰/PSK 平坦/AM 载波);Gqrx 实时看,inspectrum 离线细看
- 采集参数: `rtl_sdr -f <频率> -s <采样率> -g <增益> -n <采样数> out.iq`;`-g 0` 自动增益
- 采样率原则: 采样率 ≥ 2×信号带宽——窄带遥控(几十 kHz)用 250k–1M 足够,别为省事开满 2.4M 徒增文件体积
2. **解调**:
- URH:加载 IQ → 自动/手动调制识别 → 解调出位流
- GNU Radio:按识别结果搭解调链(AM/FM/PSK/QAM/FSK)
- 快速监听: `rtl_fm -f 433.9M -M fm -s 22050`(FM 语音/FSK 音频监听,听/录音频辅助识别)
- 产出:解调位流(0/1 序列)
3. **帧同步与协议恢复**:
- URH 打开捕获文件 → 位流分析视图找同步字、试编码反转(NRZ/Manchester)
- 找同步字(重复模式/固定前缀)→ 定帧边界 → 字段划分(地址/长度/载荷/CRC)
- 多帧对照(重复发射)→ 不变字段=固定头、变化字段=数据/序号
- 位流转字节: 先确认位序(MSB/LSB first)与长度对齐(8 的倍数)——URH 默认按位显示,转字节前核对,否则字段划分全错
- 产出:帧结构表(字段偏移/长度/语义)
- 已知 ISM 设备: 先跑 `rtl_433 -f 433.9M -A`(`-A` 分析模式打印解出的脉冲序列与协议猜测)——常见协议(气象站/车库门/胎压)直接命中,省去人工恢复
4. **重放与交互**(授权场景):
- HackRF 回放捕获帧(重放攻击验证——仅授权目标):
```sh
hackrf_transfer -r capture.iq # 先采集(HackRF 口)
hackrf_transfer -t capture.iq -f 433.9M -a 1 -s 2M # 回放(-a 1 开放大器)
```
- 交互式:改字段重发(滚动码/加密需先分析算法——转 [[re-crypto-id]] / [[re-crypto-decrypt]])
- 重放前先验证采样率/增益与采集时一致——参数不匹配重放出去目标收不到(见 [[gotchas]])
5. **证据整理(收尾)**:IQ 文件、解调位流、帧结构表(字段偏移/长度/语义)、重放记录(时间/参数/结果)对照入档;结论写 [[re-analyze/analysis-contract]]——信号级证据(截图/波形)与协议级结论(帧结构)分开归档
## 跨域联合
- [[re-iot-proto]]:无线 IoT 协议衔接(MQTT/CoAP 等封装层)
- [[re-protocol]]:帧结构状态机重建衔接
- [[re-crypto-id]] / [[re-crypto-decrypt]]:载荷加密分析
- [[re-feedback]]:信号案例经验沉淀(脱敏后)
## 常见坑与陷阱
- **频率偏移/采样率错误**:现象——解调全乱码;原因——中心频率偏、采样率不匹配;对策——先用已知信号(FM 广播)校准
- **调制误判**:现象——FSK 当 PSK 解;原因——频谱特征相似;对策——对照时域波形(inspectrum)再定
- **重放需授权**:现象——未授权重放触发设备动作;原因——越界操作;对策——红线:仅授权目标
- **编码反转漏看**:现象——位流全反;原因——NRZ/Manchester 未识别;对策——试反相与编码模式组合
- **捕获不完整**:现象——帧被截断;原因——带宽不够/触发时机;对策——加宽带宽、延长采集、按同步字触发
- **RTL-SDR 镜像频率/带宽限制**:现象——采到的信号在错误频率出现、带宽超 2.4MHz 后解调全乱;原因——直接采样混叠、USB 传输不稳;对策——带宽 ≤2.4M、先 `rtl_test -p` 校准 ppm 后用 `-e` 补偿(详见 [[gotchas]])
- **URH 对复杂调制支持弱**:现象——DSSS/OFDM/跳频信号 URH 解不出稳定位流;原因——URH 面向简单调制(ASK/FSK/PSK)设计;对策——频谱扩展类信号改用 GNU Radio 搭完整解调链(解扩/均衡),URH 只做后续位流分析
- 硬件差异、工具特有坑见 [[gotchas]];命令速查见 [[commands]]

View File

@@ -0,0 +1,98 @@
# SDR 命令速查与操作序列
SDR 链路按「采集 → 频谱 → 解调 → 位流/帧分析 → 重放」五段组织工具。命令以各工具官方文档为准(osmocom rtl-sdr、greatscottgadgets hackrf、rtl_433 官方 README、URH 文档)。
## 命令族速查
### 硬件验证
- `rtl_test [-s 采样率]`:RTL-SDR 自检(开机会自测,输出 `Successfully opened` 即 OK)
- `rtl_test -p`:测 ppm 频率误差(挂几分钟读稳定值,采集时 `-e <ppm>` 补偿)
- `hackrf_info`:HackRF 固件/序列号信息(`board_id`/`serial_number` 可见即 OK)
### 采集
- `rtl_sdr -f <频率> -s <采样率> -g <增益> -n <采样数> out.iq`:RTL-SDR 采集裸 IQ(8-bit 无符号交错 I/Q;`-g 0` 自动增益;`-e` 加 ppm 补偿)
- `rtl_sdr -f 433.9M -s 1M capture.iq`:基础采集(后续 GNU Radio / inspectrum / URH 都能读)
- `hackrf_transfer -r capture.iq -f 433.9M -s 2M -a 1`:HackRF 采集(`-a 1` 开 RX 放大器;采样率上限高,宽带场景用)
- `hackrf_transfer -t capture.iq -f 433.9M -s 2M -a 1`:HackRF 回放发射(重放攻击验证——仅授权目标)
### 频谱/监测
- `rtl_power -f 400M:470M:250k -g 40 -i 10 scan.csv`:扫频输出 CSV(频率/时间/功率),gnuplot/Excel 画瀑布
- `gqrx`:GUI 频谱+瀑布实时看;`rtl_fm`:快速听/录 AM/FM 音频(`rtl_fm -f 433.9M -M fm -s 22050`)
### 解调
- URH(GUI): `urh` → 打开 IQ → Signal 视图自动/手动调制识别 → Demodulate → 位流视图
- GNU Radio: `gnuradio-companion` 搭解调链(RTL-SDR Source → 滤波器 → 解调器 → 位流);`grcc flow.grc` 无头编译成 Python 脚本
- `rtl_433 -f 433.9M -A`:ISM 设备一键解调+协议猜测(`-A` 打印脉冲序列与协议命中);`-F json` JSON 输出
### 帧/位流分析
- `inspectrum capture.iq`:离线频谱+时域(看帧结构、符号宽度、找同步字时域特征)
- URH 位流分析视图: 找同步字、编码反转(NRZ/Manchester)、字段划分
- `rtl_433 -R <协议号>`:限定协议族解码(`-h` 列表查协议号)
### 信号生成(授权场景辅助)
- GNU Radio 波形生成: 构建发射链回放/修改字段(HackRF Source 输出)
- `hackrf_transfer -t` 直接回放原始 IQ(不做修改时的最快路径)
## 常用操作序列(组合套路)
### 1. 全频段扫描 → 定位 → 采集
```
rtl_power -f 300M:500M:250k -g 40 -i 10 scan.csv # 找活跃频点
# CSV 里找稳定高功率频点 → gqrx 对该频点确认
rtl_sdr -f <频点> -s 1M -g 40 -n 8000000 cap.iq # 8M 采样 ≈ 8 秒(1M 采样率)
```
### 2. 未知遥控协议恢复(采集 → URH 全流程)
```
rtl_sdr -f 433.9M -s 1M -g 40 -n 8000000 cap.iq
urh → 打开 cap.iq → 调制识别(ASK/FSK)→ 解调 → 位流
找重复帧 → 标同步字 → 编码反转试验(NRZ/Manchester 组合)
多帧对照 → 字段划分(固定头/地址/长度/载荷/CRC)→ 帧结构表
```
### 3. 已知 ISM 设备快速识别(rtl_433 直解)
```
rtl_433 -f 433.9M -A # 分析模式:看协议猜测与脉冲序列
rtl_433 -f 433.9M -F json # 持续 JSON 输出(长时间监测)
# 命中协议 → 用 -R 限定 → 字段语义对照官方/社区解码器
```
### 4. 重放验证(仅授权目标)
```
hackrf_transfer -r cap.iq -f 433.9M -s 2M -a 1 # 用 HackRF 重新采集(保证采样率匹配)
hackrf_transfer -t cap.iq -f 433.9M -s 2M -a 1 # 原样回放
# 观察目标动作;失败先查采样率/增益是否与采集一致
# 改字段重放: GNU Radio 解调→改 bit→重新调制→hackrf_transfer -t
```
### 5. 解调位流 → 协议状态机重建(与 [[re-proto-rev]] 衔接)
```
URH 导出位流/字段 → 帧结构表(偏移/长度/语义)
多帧时序分析(重发/序号递增/ACK)→ 状态机假设 → 改字段重发验证
```
## 实现教训(内化)
- 采样率与带宽关系先算好:采样率 ≥ 2×信号带宽,窄带信号别开满 2.4M(文件大、没收益)
- 频率偏移先校准再采集:`rtl_test -p` 拿 ppm,`-e` 补偿——解调乱码时先怀疑频率而非调制识别
- 编码反转/位序是第二位流坑:NRZ/Manchester、MSB/LSB 都要试,URH 里一键切换成本低
- 多帧对照是帧结构恢复的核心方法:同一遥控按多次,不变字段=固定头,变化字段=数据/序号
- 已知设备先跑 `rtl_433 -A`:常见协议(气象站/车库门/胎压)自带解码器,别在人工恢复上浪费时间
- IQ 文件命名带频率/采样率/时间(如 `cap_433.9M_1M_20260825.iq`)——跨会话可复现
## 使用注意
- 全部在沙箱/授权环境内执行([[re-analyze/platform-tips]] 最高原则);发射/重放红线:仅授权目标
- 采集与重放参数(频率/采样率/增益)必须记录并保持一致
- 结论写 [[re-analyze/analysis-contract]];信号级证据(IQ/波形)与协议级结论(帧结构)分开归档

View File

@@ -0,0 +1,38 @@
# SDR 工具特有坑与边界
## 硬件坑(RTL-SDR / HackRF)
- **带宽上限不是标称值**:RTL-SDR 标称最高 3.2MHz,实际 2.4MHz 以上 USB 传输不稳定(掉采样/乱码)——常规采集用 ≤2.4M,宽带需求换 HackRF
- **镜像频率(镜像混叠)**:直接采样架构下,中心频率 ± 采样率/2 之外的能量会折叠到带内——强信号源附近出现「幽灵信号」时先怀疑镜像,用滤波器/换频率验证,别当成真实信号分析
- **ppm 频率误差**:RTL-SDR 晶振偏差(典型几十 ppm),频率越高偏移越大——`rtl_test -p` 测稳定值,采集加 `-e <ppm>`;窄带信号(遥控器类)对频率偏移最敏感
- **HackRF 半双工**:HackRF One 同一时刻只能收或发(半双工)——「一边录一边回放」做不到,先录后放;全双工需要更高级硬件
- **增益不当**:`-g` 过高削波(IQ 值顶到 255 饱和,解调全错)、过低淹没噪声——看 `rtl_sdr` 输出统计或瀑布图调节;自动增益 `-g 0` 是稳定起点
- **采样率不匹配(重放)**:回放参数(采样率/增益)与采集时不一致,目标收不到或解调错——重放前核对采集命令参数,最好用同一设备同一参数
## 信号分析坑
- **调制误判**:FSK 与 PSK 频谱相似(都像平坦带)——看时域(inspectrum)区分:FSK 有明确符号跳变、PSK 相位突变;先听/看瀑布再定解调方案
- **编码反转/位序**:位流全反(NRZ-I 类)或字节序反——URH 里试反相与编码组合;转字节前确认 MSB/LSB
- **载波偏移**:信号不在采集中心频率正中(偏出滤波器通带)解调质量差——采集前用 Gqrx 精调中心频率,或在解调链加频偏校正(GNU Radio `freq_xlating_fir_filter` 思路)
- **帧截断**:触发时机晚/带宽不够导致帧不全——延长采集窗口、按同步字触发(GNU Radio 触发块)、多采集几段取完整帧
- **URH 对复杂调制支持弱**:DSSS/OFDM/跳频解不出稳定位流——这类信号用 GNU Radio 搭完整链(解扩/均衡),URH 只做位流后处理
- **干扰/谐波**:相邻频段强发射源(WiFi、FM 广播)谐波/互调落入目标频段——换频点或加带通滤波器(硬件)排除
## 工具坑(按工具)
- **gqrx 包名(Debian)**:包名是 `gqrx-sdr` 不是 `gqrx`(`apt install gqrx` 找不到包);Arch/Fedora 才是 `gqrx`
- **rtl_433 包名平台差异**:Debian `rtl-433`、Fedora `rtl-433`、macOS `rtl_433`(下划线)、Arch `rtl_433`——跨平台脚本里注意包名不统一
- **URH 版本节奏**:`pip install urh` 装的是 PyPI 最新版,更新节奏慢于主仓库——新硬件/新调制支持查 URH 仓库 release;GUI 与命令行接口以安装版本帮助为准
- **inspectrum 只读分析**:inspectrum 不能解调/导出位流——它是可视化确认工具,位流工作仍走 URH/GNU Radio
- **rtl_power CSV 解析**:输出按 `date,time,Hz_start,Hz_step,samples,power1,power2,...` 排列——写脚本解析时按行尾功率列处理,别错位
## 授权红线(工具无关)
- 采集接收侧一般无限制(法律上依地区规定);**发射/重放/干扰属于主动交互**——仅限授权目标与频段,先确认当地无线电法规
- 重放验证做前先记录目标行为基线(授权范围内),结果只用于分析结论,不扩散
- 滚动码/加密设备重放无效属正常(算法层面问题)——转 [[re-crypto-id]] / [[re-crypto-decrypt]] 分析算法,别反复盲放
## 使用注意
- 全部在沙箱/授权环境内执行([[re-analyze/platform-tips]] 最高原则);发射类操作默认沙箱物理隔离
- 采集参数(频率/采样率/增益/时间)完整记录;IQ 文件保留原始副本(重放/复分析复用)