ameersmu2004-rgb/Speedometer-ECU-Simulator

GitHub: ameersmu2004-rgb/Speedometer-ECU-Simulator

基于虚拟 CAN 总线的汽车速度表 ECU 模拟器,提供完整 UDS 诊断协议栈与漏洞引擎,供汽车网络安全研究、CAN 模糊测试和学习诊断协议使用。

Stars: 0 | Forks: 0

# 速度表 ECU 模拟器 这是一个基于 **Tkinter** 的未来感 **GUI**,用于模拟真实的汽车速度表 ECU。它通过虚拟 CAN 总线 (`vcan0`) 通信,使用 **UDS 诊断协议**,是汽车安全测试、CAN 模糊测试工具(如 **FucyFuzz**)或学习 ECU 诊断工作原理的绝佳练习目标。 ## 此工具的功能 - 渲染一个带有动态指针、RPM 弧线、挡位指示器、燃油液位、冷却液温度和电池电压的实时**全息风格速度表表盘** - 在 `vcan0` 上运行完整的 **UDS/ISO-TP 协议栈** — 响应真实的诊断请求(ReadDID、WriteData、SecurityAccess、ECUReset 等) - 内置**漏洞引擎** — 加载 JSON 配置文件以植入预设的 ECU 漏洞,用于模糊测试 - 在独立的面板中记录每一个 UDS 帧、原始 CAN 帧和漏洞触发事件,并可导出为 `.log` / `.jsonl` 文件 ## 环境要求 | 要求 | 原因 | |---|---| | Ubuntu / Debian Linux | `vcan0` 虚拟 CAN 依赖 Linux 内核的 `vcan` 模块 | | Python 3.8+ | 核心运行时 | | `python3-tk` | GUI 图形界面 (Tkinter) | | `python-can` | CAN 总线接口库 | | `can-isotp` *(可选)* | 仅当您希望从自定义脚本发送测试帧时需要 | ## 安装与运行 ### 第 1 步 — 克隆或复制项目 ``` git clone https://github.com/ameersmu2004-rgb/Speedometer-ECU-Simulator.git cd Speedometer-ECU-Simulator/speedo-ecu ``` ### 第 2 步 — 一键启动 *(推荐)* ``` chmod +x run.sh ./run.sh ``` `run.sh` 脚本会自动执行以下操作: - 检查 Python 3 - 如果缺失,自动安装 `python3-tk` 和 `python-can` - 配置 `vcan0` 虚拟 CAN 接口 - 启动 GUI ### 手动设置(如果您偏好逐步操作) **安装依赖项:** ``` sudo apt update sudo apt install -y python3-tk pip3 install python-can --break-system-packages ``` **设置虚拟 CAN 接口:** ``` sudo modprobe vcan sudo ip link add dev vcan0 type vcan sudo ip link set up vcan0 ``` **启动 GUI:** ``` python3 main_speedo.py ``` ## 使用 GUI 一旦运行,GUI 会分为三个主要区域打开: ### 左侧面板 — 速度表表盘 动态表盘会自动运行物理模拟:ECU 从停车状态开始,加速、巡航,然后刹车,循环往复。所有实时数值(速度、RPM、燃油、温度)都会实时更新。 ### 右侧面板 — 控制与日志 | 标签页 | 显示内容 | |---|---| | **UDS 日志** | 所有 UDS 请求与响应(SID、DID、NRC) | | **原始帧日志** | `vcan0` 处于活动状态时的原始 CAN 帧 | | **Oracle / 漏洞日志** | 漏洞命中和 Oracle 事件 | ### 加载漏洞配置文件 1. 在控件中点击 **Load Vuln JSON** 2. 选择 `speedometer_vulns.json`(包含在项目文件夹中) 3. Oracle 现已激活 — 特定格式的畸形 UDS 帧将触发记录在案的漏洞事件 ## 从您自己的工具发送 UDS 帧 GUI 运行后,`vcan0` 即处于活跃状态。您可以从任何工具(FucyFuzz、cantools、原始 Python)与其进行通信: ``` pip3 install can-isotp ``` ``` # 读取 Vehicle Speed (DID 0xF40D) import can, isotp, time bus = can.Bus('vcan0', bustype='socketcan') addr = isotp.Address(isotp.AddressingMode.Normal_11bits, txid=0x7E0, rxid=0x7E8) stack = isotp.CanStack(bus, address=addr) stack.send(bytes([0x22, 0xF4, 0x0D])) time.sleep(0.2) stack.process() if stack.available(): print('Response:', stack.recv().hex().upper()) bus.shutdown() ``` **ECU 地址配置:** | | 数值 | |---|---| | Tester → ECU (RX) | `0x7E0` | | ECU → Tester (TX) | `0x7E8` | | 接口 | `vcan0` | ## 支持的 UDS 服务 | SID | 服务 | |---|---| | `0x10` | DiagnosticSessionControl (Default / Extended / Programming) | | `0x11` | ECUReset | | `0x27` | SecurityAccess (seed/key challenge) | | `0x22` | ReadDataByIdentifier | | `0x2E` | WriteDataByIdentifier | | `0x3E` | TesterPresent | | `0x19` | ReadDTCInformation | | `0x14` | ClearDTC | | `0x28` | CommunicationControl | ## 项目结构 ``` speedo-ecu/ ├── main_speedo.py ← Entry point — run this ├── speedo_gui.py ← Tkinter GUI (dial, gauges, log panels) ├── speedo_ecu.py ← UDS service handler ├── speedo_state.py ← ECU state + physics simulation loop ├── speedometer_vulns.json ← Vulnerability profiles for the Oracle engine ├── run.sh ← Auto-setup + launch script ├── config.py ← CAN interface / address config ├── uds_core.py ← UDS protocol core ├── uds_constants.py ← SID / NRC hex constants ├── uds_helpers.py ← Hex formatting helpers ├── isotp_server.py ← ISO-TP framing layer ├── vulnerability_engine.py ← Evaluates frames against vuln profiles ├── vulnerability_config.py ← Loads JSON vuln config ├── logger.py ← Structured logger (text + JSONL) ├── ecu_memory.py ← Virtual NVM / memory map ├── ecu_state.py ← Base ECU state class └── logs/ ← Auto-created; session logs saved here ``` ## 故障排除 **`ModuleNotFoundError: No module named 'can'`** ``` pip3 install python-can --break-system-packages ``` **`ModuleNotFoundError: No module named 'tkinter'`** ``` sudo apt install python3-tk ``` **未找到 `vcan0` / CAN 帧未出现** ``` sudo modprobe vcan sudo ip link add dev vcan0 type vcan sudo ip link set up vcan0 ``` **GUI 打开但表盘空白 / 卡死** 确保您在带有图形显示界面的环境下运行(而非无头 SSH 会话)。如果使用 SSH,请使用 `ssh -X` 转发显示,或使用桌面会话。 ## 许可证 本项目作为 FucyTech 汽车网络安全实习项目的一部分开发。仅供研究与教育用途。
标签:CAN总线, ECU模拟器, UDS协议, 汽车安全, 漏洞靶场, 逆向工具, 防御检测