Sherin-SEF-AI/CanLab
GitHub: Sherin-SEF-AI/CanLab
一款集成 AI 推理与离线机器学习的 CAN 总线逆向工程桌面工作站,覆盖从原始帧捕获、信号分类到 DBC 输出的完整分析闭环。
Stars: 2 | Forks: 0
# CanLab - CAN Bus 逆向工程工作站
[](https://www.python.org)
[](https://pypi.org/project/PyQt6/)
[](LICENSE)
[](https://github.com/Sherin-SEF-AI/CanLab/releases/tag/v1.2.0)
[](https://groq.com)
[](https://en.wikipedia.org/wiki/CAN_bus)
**15 模块桌面端 CAN RE(逆向工程)工作站,具备离线 ML 信号分类、双 AI 引擎和 MitM 网关功能。**

## 为什么选择 CanLab
https://github.com/user-attachments/assets/cb47f85b-2551-44b2-9939-4f529962fbe0
大多数 CAN RE 工具只专注做一件事:SavvyCAN 负责捕获和过滤,canutils 负责解码,Wireshark 负责解析。CanLab 填补的空白是**分析闭环** —— 从原始帧捕获、信号假设、ML 验证、AI 解释到 DBC 输出之间的完整往返流程。
具体包括:
- **离线 ML 上下文注入** —— 在每次 AI 提示之前,CanLab 会运行字节角色分类、校验和检测以及嵌入相似度计算,并将这些结果注入到提示词中。AI 基于结构化事实进行推理,而非原始的十六进制数据。
- **计数器和校验和自动检测** —— 一键对所有 ID 运行 9 种校验和算法,采用 70/30 的训练/验证比例划分,并报告置信度分数。
- **AUTOSAR 双向转换** —— 导入 `.arxml`,可视化编辑信号,并从同一 UI 导出到 AUTOSAR 4.3、Vector CANdb++、openpilot DBC 和 Wireshark Lua 解析器。
- **OBD-II 实时仪表盘** —— 26-PID 轮询仪表盘,支持自动发现(Mode 01 PID 0x00 位掩码),无需 ELM327 脚本。
- **MitM/网关** —— 桥接两个 CAN 总线,支持有序的通过/阻止/修改规则、字节级重写和实时帧日志。
- **视频与日志同步** —— 加载行车记录仪或台架录像,并通过与视频同步来滑动查看 CAN 信号。
## v1.2.0 中的新特性
| 功能 | 详情 |
|---|---|
| **GATEWAY (网关) 选项卡** | 双向 CAN MitM 桥接。两个独立总线,有序的过滤规则 (Pass/Block/Modify),字节重写,ID 重写,实时帧日志 |
| **视频与日志同步** | TIMELINE 选项卡现在拥有 VIDEO SYNC 子选项卡 —— 加载任意视频,点击信号尖峰即可跳转,滑动以移动信号播放头 |
| **pcap/pcapng 导入** | 直接加载 Wireshark 捕获 (通过 dpkt 支持 SocketCAN linktype 227) |
| **Replay v2** | 循环复选框,滑动条,29 位扩展 ID 支持,线程干净关闭 |
| **ARXML 双向转换** | DBC Builder 可以导入和导出 AUTOSAR 4.3 System Template `.arxml` |
| **CANdb++ 导出** | 导出带有 `BA_DEF_` / `BA_` 属性块的 Vector CANdb++ `.dbc` |
| **相关性热力图修复** | DASHBOARD 热力图切换为 matplotlib plasma 色彩映射表 (此前在暗色主题下不可见) |
## 下载
| 平台 | 文件 | 大小 |
|---|---|---|
| Linux x86_64 | [CanLab-1.2.0-linux-x86_64.tar.gz](https://github.com/Sherin-SEF-AI/CanLab/releases/download/v1.2.0/CanLab-1.2.0-linux-x86_64.tar.gz) | 200 MB |
```
tar -xzf CanLab-1.2.0-linux-x86_64.tar.gz
cd CanLab/
./CanLab
```
无需安装 Python。
## 从源码运行
```
git clone https://github.com/Sherin-SEF-AI/CanLab.git
cd CanLab
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
# 可选:用于 AI 功能的 Groq (free tier) 或 Anthropic key
export GROQ_API_KEY="gsk_..."
export ANTHROPIC_API_KEY="sk-ant-..."
cd canlab # source root — all imports are relative to here
python3 main.py
```
## 系统要求
- Linux (Ubuntu 20.04+)、macOS 12+ 或 Windows 10+,需安装 Python 3.11+
- 4 GB 内存(推荐 8 GB,以使用 ML 功能)
- 可选:SocketCAN 内核模块,用于连接真实硬件 (`sudo modprobe can_raw`)
- 可选:comma.ai Panda,用于车辆 CAN 捕获
## 功能特性 — 15 个选项卡
| # | 选项卡 | 功能描述 |
|---|---|---|
| 1 | **FRAMES** | 原始帧表格,带字节增量高亮显示。十六进制过滤器,总线过滤器,冻结/跟随。 |
| 2 | **SIGNALS** | DBC 解码后的信号表格 —— 物理值、单位、最小值/最大值、熵、推测类型。 |
| 3 | **PLOT** | 多信号时间序列。按字节追踪,鼠标滚轮缩放,实时更新。 |
| 4 | **AI ENGINE** | 将任意 ID 发送给 Groq LLaMA 或 Claude AI。自动注入 ML 上下文。跨完整数据集的自然语言查询。跨会话的持久记忆。 |
| 5 | **DBC BUILDER** | 可视化信号编辑器。导出:DBC、openpilot DBC、CANdb++、ARXML、Wireshark Lua。导入:DBC、ARXML、CAN matrix。 |
| 6 | **CODE GEN** | 根据 DBC 定义自动生成 Python 或 C 解析代码。 |
| 7 | **INTELLIGENCE** | 跨 ID 的皮尔逊相关性。滞后扫描。余弦相似度嵌入搜索。 |
| 8 | **INJECTION** | 信号注入,CAN 模糊测试 (随机/顺序/变异),触发规则,带循环和滑动条的重放。 |
| 9 | **DIAGNOSTICS** | UDS 深度扫描,ISO-TP 会话,J1939 PGN 解码器,OBD-II Mode 01,总线健康监视器。 |
| 10 | **DASHBOARD** | 相关性热力图,消息时间轴,物理叠加仪表盘。 |
| 11 | **AUTO-RE** | 一键对所有 ID 进行计数器/校验和检测。9 种算法,置信度评分。熵边界。 |
| 12 | **TIMELINE** | 可滑动的多 ID 事件时间轴 + VIDEO SYNC 子选项卡 (行车记录仪/台架视频 ↔ 信号播放头)。 |
| 13 | **OBD-II** | 26-PID 实时仪表网格。自动发现支持的 PID。可配置的轮询速率。 |
| 14 | **ML INTEL** | 字节角色分类,异常检测,变点检测,信号嵌入搜索。 |
| 15 | **GATEWAY** | 双向 CAN MitM 桥接。两个独立总线,有序的通过/阻止/修改规则,字节 + ID 重写,实时日志。 |
## 截图
### FRAMES 选项卡 —— 带有字节增量高亮显示的原始帧

### AI ENGINE 选项卡 —— 带有 ML 上下文的流式分析

### AUTO-RE 选项卡 —— 计数器和校验和检测

### DBC BUILDER 选项卡

### OBD-II 实时仪表盘

## ML 特性 (全部离线运行,无需 API 密钥)
| 算法 | 模块 | 检测内容 |
|---|---|---|
| 字节角色分类器 | `core/signal_classifier.py` | 每个字节判断为 COUNTER、CHECKSUM、BOOLEAN、PHYSICAL、PADDING |
| 校验和逆向器 | `core/checksum_guesser.py` | XOR8、SUM8、CRC8-SAE、HYUNDAI\_FULL 及其他 5 种 —— 70/30 的训练/验证划分 |
| 跨 ID 相关性 | `core/correlation_engine.py` | 跨 ID 的字节对皮尔逊 r 值,最近邻时间戳对齐,滞后扫描 |
| 变点检测器 | `core/change_detector.py` | 用户标记事件前后的字节分布偏移 |
| 异常检测器 | `core/anomaly_detector.py` | 每字节的 Z-score + 完整帧向量上的 Isolation Forest |
| 周期性分类器 | `core/periodicity.py` | CYCLIC 与 EVENT 判别,中位数周期 (毫秒),抖动百分比 |
| 信号嵌入搜索 | `core/signal_embedding.py` | 跨所有 ID 的余弦相似度结构化模式匹配 |
## 支持的日志格式
| 格式 | 备注 |
|---|---|
| SavvyCAN CSV | SavvyCAN 的默认导出格式 |
| candump log | `candump -l` 输出 |
| openpilot rlog | `.rlog` / `.bz2` 通过 openpilot `cereal` 读取 |
| pcap / pcapng | 使用 SocketCAN linktype 227 的 Wireshark 捕获 (通过 dpkt) |
| CAN FD | 最多支持 64 字节负载 |
## 支持的硬件 (通过 python-can)
`socketcan`、`pcan`、`kvaser`、`virtual`、`usb2can`、`serial`、comma.ai Panda
## DBC 生态
| 格式 | 导入 | 导出 |
|---|---|---|
| Standard DBC | 是 | 是 |
| openpilot DBC | 是 (通过 opendbc 交叉引用) | 是 |
| Vector CANdb++ | 否 | 是 (包含 BA\_DEF\_ 属性块) |
| AUTOSAR ARXML 4.3 | 是 | 是 |
| Wireshark Lua dissector | 否 | 是 |
| Excel/CSV CAN matrix | 是 | 否 |
## AI 引擎
支持的提供商:**Groq LLaMA 3.3 70B** (免费额度) 和 **Anthropic Claude Sonnet**。
在每次 AI 调用之前,CanLab 会运行离线 ML,并将结构化上下文注入到提示词中:
- 带有置信度百分比的字节角色
- 消息类型 (CYCLIC/EVENT) 和周期
- 校验和算法及置信度
- 通过嵌入余弦相似度计算出的前 3 个相似 ID
在 **Settings > API Keys** 中进行配置。Groq 的免费额度每天足以进行数百次分析。
## REST API
通过 **Tools > Start REST API** 启动。默认端口 5000。
```
GET /api/frames # all loaded frames
GET /api/frames/ # frames for one CAN ID
GET /api/signals # decoded signals
POST /api/inject # inject a frame {"id":"0x200","data":[0,1,2,3,4,5,6,7]}
GET /api/dbc # current DBC signal definitions
```
## 架构
```
canlab/
├── main.py Entry point — safety disclaimer + QApplication
├── mainwindow.py Main window, tab registration, menus, toolbar
├── theme.py Dark theme QSS + mono_font
├── settings_dialog.py API keys, CAN interface, AI provider settings
├── core/ Pure-logic modules (no UI, fully testable)
│ ├── ai_client.py Groq + Anthropic streaming workers
│ ├── dbc_manager.py DBC string builder, cantools decode, ARXML round-trip
│ ├── log_parser.py SavvyCAN CSV, candump, rlog, pcap/pcapng parsers
│ ├── signal_classifier.py Byte role classifier
│ ├── checksum_guesser.py 9-algorithm checksum reverser
│ ├── correlation_engine.py Pearson cross-ID correlation
│ ├── anomaly_detector.py Z-score + Isolation Forest
│ ├── replay.py ReplayWorker — loop, scrubber, extended ID
│ ├── gateway.py GatewayWorker — bidirectional MitM bridge
│ ├── isotp.py ISO-TP session layer
│ ├── uds.py UDS scanner + OBD-II Mode 01
│ ├── j1939.py J1939 PGN decoder
│ ├── obd2_pids.py 26-PID SAE J1979 table with decode lambdas
│ ├── obd2_poller.py OBD2Poller QThread
│ ├── arxml_export.py AUTOSAR 4.3 emitter
│ ├── arxml_import.py AUTOSAR 4.3 parser
│ └── candbpp_export.py Vector CANdb++ exporter
└── tabs/ One file per tab
```
## 安全提示
**注入、模糊测试和网关功能仅限于隔离的台架测试使用。**
在将 CanLab 连接到车辆的真实 CAN 总线时,若使用注入、重放、模糊测试或网关功能,可能会导致:
- ABS 或 ESC 失效
- 触发意外的安全气囊弹射
- 干扰电动助力转向系统
- 导致意外加速或制动
请使用 `vcan0` (虚拟 CAN) 或台架 ECU 进行所有测试。应用程序在首次启动时会显示安全确认对话框。
## 许可证
MIT 许可证。详情请见 [LICENSE](LICENSE)。
**作者:** Sherin Joseph Roy — sherin.joseph2217@gmail.com
**仓库:** https://github.com/Sherin-SEF-AI/CanLab
所有选项卡截图
        标签:Apex, AUTOSAR, CAN FD, CAN总线, DBC文件, LLaMA, MitM网关, OBD-II, PyQt6, Python, 中间人攻击, 云资产清单, 人工智能, 信号分析, 嵌入式安全, 报文注入, 报文解析, 数据抓包, 无后门, 机器学习, 汽车安全, 汽车渗透测试, 用户模式Hook绕过, 网络安全, 车联网安全, 车载网络, 逆向工具, 逆向工程, 防御绕过, 隐私保护