Sherin-SEF-AI/CanLab

GitHub: Sherin-SEF-AI/CanLab

一款集成 AI 推理与离线机器学习的 CAN 总线逆向工程桌面工作站,覆盖从原始帧捕获、信号分类到 DBC 输出的完整分析闭环。

Stars: 2 | Forks: 0

# CanLab - CAN Bus 逆向工程工作站 [![Python](https://img.shields.io/badge/Python-3.11%2B-blue?style=flat-square&logo=python)](https://www.python.org) [![PyQt6](https://img.shields.io/badge/GUI-PyQt6-green?style=flat-square)](https://pypi.org/project/PyQt6/) [![License](https://img.shields.io/badge/License-MIT-yellow?style=flat-square)](LICENSE) [![Release](https://img.shields.io/badge/Release-v1.2.0-brightgreen?style=flat-square)](https://github.com/Sherin-SEF-AI/CanLab/releases/tag/v1.2.0) [![Groq](https://img.shields.io/badge/AI-Groq%20LLaMA-purple?style=flat-square)](https://groq.com) [![CAN Bus](https://img.shields.io/badge/Protocol-CAN%20%7C%20CAN%20FD%20%7C%20ISO--TP%20%7C%20J1939-red?style=flat-square)](https://en.wikipedia.org/wiki/CAN_bus) **15 模块桌面端 CAN RE(逆向工程)工作站,具备离线 ML 信号分类、双 AI 引擎和 MitM 网关功能。** ![CanLab Demo](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/b22c08bc0e004648.gif) ## 为什么选择 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 选项卡 —— 带有字节增量高亮显示的原始帧 ![FRAMES](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/df9a2ce6d7004650.png) ### AI ENGINE 选项卡 —— 带有 ML 上下文的流式分析 ![AI ENGINE](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/3dda07197b004651.png) ### AUTO-RE 选项卡 —— 计数器和校验和检测 ![AUTO-RE](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/cd56beb542004653.png) ### DBC BUILDER 选项卡 ![DBC BUILDER](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/a60e36761d004654.png) ### OBD-II 实时仪表盘 ![OBD-II](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/1c0c80dd20004656.png)
所有选项卡截图 ![SIGNALS](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/74084035c1004657.png) ![PLOT](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/52c9dc101d004658.png) ![CODE GEN](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/2f00301d54004659.png) ![INTELLIGENCE](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/12681ce7d5004701.png) ![INJECTION](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/8931bc9661004702.png) ![DIAGNOSTICS](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/6a1b717e53004703.png) ![DASHBOARD](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/83206eb567004705.png) ![TIMELINE](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/7bc2560b8e004706.png) ![ML INTEL](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/b7637c2bc0004707.png)
## 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绕过, 网络安全, 车联网安全, 车载网络, 逆向工具, 逆向工程, 防御绕过, 隐私保护