emclrk/rf-bitkit
GitHub: emclrk/rf-bitkit
rf-bitkit 是一个用于逆向工程 RF 协议的 Rust 库和 CLI 工具,通过对解调比特流进行熵分析和结构推断来辅助未知无线协议的解析。
Stars: 1 | Forks: 0
# rf-bitkit
一个用于逆向工程 RF 协议的 Rust 库和 CLI 工具。
在发现 URH 的协议分析选项卡有些笨重且受限之后,我编写了这个工具。rf-bitkit 提供了一系列用于处理解调比特流的分析功能——包括查找固定和可变字段、识别符号字母表、测量熵以及关联捕获数据。它接受纯文本文件(每行一个比特流)或直接从 URH 导出的 XML。
## 安装说明
```
cargo install rf-bitkit
```
或者从源码构建:
```
git clone https://github.com/emclrk/rf-bitkit
cd rf-bitkit
cargo install --path .
```
## 快速示例
```
$ bitkit infer my_captures.txt
Inferred Structure:
Fixed(3) | Varying(2) | Fixed(2) | Varying(2) | Fixed(2) | Varying(2) | Fixed(1)
```
## CLI 工具
`bitkit` 二进制程序提供了以下子命令。所有命令均接受 `.txt` 文件(每行一个比特流)或 URH `.xml` 导出文件。
### `info`
显示每个比特流的基本统计信息和十六进制表示。
```
bitkit info [-s ] [--skip ]
```
### `infer`
计算逐位置熵并推断协议字段结构。这是核心命令——给定一系列比特流,它可以识别哪些比特位置在所有捕获中是固定的,哪些是可变的。
```
bitkit infer [--eps ]
```
### `prefix`
查找所有比特流中的公共前缀。较长的公共前缀通常是前导码或同步字候选。
```
bitkit prefix
```
### `sweep`
显示每个符号长度下的归一化熵,以帮助识别正确的符号大小。注意寻找熵的突降——这信号表明分块正在与实际的符号边界对齐。
```
bitkit sweep [--max-symlen ] [--skip ]
```
### `alphabet`
显示给定符号长度下所有比特流中的符号字母表和频率统计。
```
bitkit alphabet [-s ] [--skip ]
```
### `substrings`
显示给定长度下最频繁出现的子串。可用于查找同步字候选。
```
bitkit substrings [-l ] [-t ] [--skip ]
```
### `correlate`
通过索引交叉关联文件中的两个比特流。可用于识别捕获之间的错位。
```
bitkit correlate -a -b [-t ]
```
## 库
rf-bitkit 也是一个 Rust 库。将其添加到您的 `Cargo.toml` 中:
```
[dependencies]
rf-bitkit = "0.1.0"
```
核心函数:
- `from_txt` / `from_urh` — 从文本文件或 URH XML 导出文件加载比特流
- `positionwise_entropy` — 计算一组比特流中每个比特位置的熵
- `ProtocolStructure::infer_structure` — 根据熵值推断固定/可变字段布局
- `get_alphabet_counts` — 统计给定符号长度下的符号出现次数
- `get_substr_counts` — 统计所有比特流中子串的出现次数
- `get_cross_correlation` — 计算两个比特流在所有偏移量上的交叉关联
- `get_hamming_dist` — 计算两个比特流之间的 Hamming 距离
- `find_common_prefix` — 查找所有比特流共享的最长前缀
## 状态与路线图
这是一个早期版本。当前计划的工作包括:
- 在存在未对齐数据包的情况下的同步字检测(交叉关联功能已实现;正在评估 Smith-Waterman 算法以处理比特插入/删除)
- CRC/校验和检测
- 用户自定义标签,用于标记比特流族(例如 Frame A 与 Frame B)
- 支持 JSON/TOML 配置文件,用于编写多步分析的脚本
- 可视化
从长远来看,我希望构建一个 DSP 层,并致力于在 Rust 中开发一个独立的 URH 替代方案。
## 许可证
根据您的选择,受 [MIT](LICENSE-MIT) 或 [Apache-2.0](LICENSE-APACHE) 许可证的约束。
标签:Rust, 云资产清单, 信号处理, 可视化界面, 射频协议, 文档结构分析, 无线电分析, 网络流量审计, 逆向工程, 通知系统