URH:开源无线电协议分析工具
一、URH简介
URH 是一款开源的 无线电协议分析工具,专注于解码、分析和逆向工程无线通信协议(如 Wi-Fi、蓝牙、RFID、LoRa、Zigbee 等)。它支持信号捕获、协议树构建、数据可视化及自定义脚本扩展,适用于安全研究、物联网设备调试和通信协议开发。
核心功能:
- 多协议支持:内置 200+ 种常见协议解码器(如 IEEE 802.11、BLE、Modbus)。
- 信号处理:频谱分析、时频图、IQ 图显示。
- 协议逆向:自动识别未知协议并生成解析规则。
- 脚本扩展:通过 Python 或 Lua 编写自定义解码逻辑。
二、硬件与软件要求
1. 硬件准备
组件 | 说明 |
---|---|
支持 RF 的硬件设备 | RTL-SDR、HackRF One、USRP 等 |
电脑 | Windows/macOS/Linux(64位) |
2. 软件环境
- 操作系统:Linux (Debian/Ubuntu)、macOS、Windows
- 依赖库:Python 3.8+、NumPy、SciPy、PyQt5
- 推荐工具:GNU Radio(信号处理)、Wireshark(辅助分析)
三、安装指南
1. Linux/macOS 安装
# 使用pip安装
sudo pip3 install urh# 验证安装
urh --version
2. Windows 安装
- 下载预编译安装包:https://github.com/URH-project/URH/releases
- 运行
URH_Setup.exe
完成安装
四、硬件驱动配置
1. RTL-SDR 配置(Linux)
# 安装驱动
sudo apt-get install rtl-sdr# 检查设备是否被识别
lsusb | grep RTL2832U
2. HackRF One 配置(Windows/macOS)
- 下载官方驱动:https://hackrf.com/pages/download
- 连接设备后重启 URH
五、基础使用说明
1. 信号捕获
示例:捕获 Wi-Fi 信道 6
urh start --device=rtl_sdr --freq=2437000000 # 2.4 GHz 频段中心频率
捕获参数说明:
参数 | 说明 |
---|---|
--device | 无线电设备名称(如 rtl_sdr) |
--freq | 目标频率(单位:Hz) |
--gain | 增益值(0~31,默认自动) |
2. 协议解码
内置协议解码示例(BLE):
- 启动 URH 并打开捕获文件(
.urh
或.sdr
) - 在左侧协议树中展开 BLE 节点
- 右侧面板显示解码后的数据(如 UUID、Characteristic Value)
自定义解码规则:
- 创建
.xml
解码文件(如custom_ble.xml
):
<protocol name="CustomBLE"><field name="ManufacturerID" type="uint16" endianness="big"/><field name="Data" type="bytes" length="4"/>
</protocol>
- 加载规则:
urh decode --input captured.sdr --decoder custom_ble.xml
3. 数据可视化
时频图显示:
- 在信号捕获界面点击 View → Spectrum
- 调整 FFT 点数(建议 1024~4096)
IQ 图显示:
urh plot --iq input.sdr
六、高级配置
1. 协议树扩展
编写 Python 解码插件:
from urh.protocol import Protocol, Fieldclass MyProtocol(Protocol):def __init__(self):super().__init__()self.fields = [Field("Magic", "uint32", 4),Field("Payload", "bytes", variable_length=True),]def decode(self, data):self.Magic = int.from_bytes(data[:4], byteorder='big')self.Payload = data[4:]return self
注册插件:
将脚本保存为 my_protocol.py
,并在 URH 设置中启用。
2. 脚本自动化
示例:自动重放 BLE 广播包
from urh import URHurh = URH()
urh.open_file("ble_broadcasts.urh")for packet in urh.packets:if packet.protocol == "BLE":urh.send_packet(packet.raw_data)
七、典型应用场景
-
物联网设备破解
- 分析智能家居设备的 BLE 通信协议
- 破解穿戴设备的运动传感器数据
-
无线安全审计
- 检测未加密的 LoRa 传感器数据泄露
- 分析恶意软件的 RF 信标信号
-
协议开发验证
- 对比自研协议与标准规范的兼容性
- 生成测试用例(如 Zigbee 网络组网测试)
八、学习资源
- 官方文档:https://urh.readthedocs.io
- GitHub 仓库:https://github.com/URH-project/URH
- 社区论坛:https://forum.URH-project.com
结语
URH 是无线电协议分析领域的强大工具,其灵活性和开源特性使其成为研究人员和开发者的理想选择。无论是逆向工程未知协议,还是优化现有通信系统,URH 都能提供从信号层到应用层的全方位支持。建议结合 GNU Radio 进行信号处理实验,并参与社区项目贡献解码规则。