ameersmu2004-rgb/DOOR_ECU
GitHub: ameersmu2004-rgb/DOOR_ECU
一款基于Python的车门ECU模拟器,集成UDS/ISO-TP诊断协议栈与漏洞引擎,用于汽车CAN总线安全研究与诊断测试。
Stars: 0 | Forks: 0
# ◈ 车门 ECU 模拟器
一款基于 UDS/CAN 诊断框架构建的未来感、全息 HUD 风格车门 ECU 模拟器。具有实时动画的车门控制系统,可实时模拟 ECU 状态。
## 快速开始
```
cd DOOR_ECU
chmod +x run.sh
./run.sh
```
该脚本将自动安装缺失的依赖项并设置 vcan0。
## 手动运行
```
# 安装 deps
pip3 install python-can --break-system-packages
# 设置 vcan(可选 — 用于真实的 CAN tester tools)
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
# 启动
python3 main_door.py
```
## 功能
### 🖥 未来感车门 ECU 仪表盘
- 动画车门锁定/解锁控制
- 实时车窗升降模拟
- 儿童锁指示器
- 后视镜折叠/展开动画
- 车内照明状态指示器
- 实时 ECU 状态更新
### 📊 实时遥测指示器
- 车门锁止状态
- 车窗位置
- 儿童锁状态
- 后视镜位置
- 车厢照明状态
- ECU 电源状态
### ⚠ 激活的警告指示器
- 车门开启
- 儿童锁已激活
- 车窗卡住警告
- 电量过低
- 通信错误
### 🔬 UDS 诊断支持
支持所有标准 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 |
### 📋 支持的 DID
| DID | 描述 |
|--------|-------------|
| 0xF190 | 车门锁止状态 |
| 0xF191 | 车窗位置 |
| 0xF192 | 儿童锁状态 |
| 0xF193 | 后视镜位置 |
| 0xF194 | 车厢照明状态 |
| 0xF186 | 激活的会话 |
| 0xF187 | 零件号 |
| 0xF189 | 软件版本 |
### 🔴 Oracle / 漏洞引擎
加载内置的 `door_vulns.json`(或任何兼容的 JSON)以激活漏洞引擎:
- **DOOR-001** — 车门锁止状态溢出
- **DOOR-002** — 儿童锁绕过
- **DOOR-003** — 高频 ReadDID DoS 攻击
- **DOOR-004** — 编程会话绕过
- **DOOR-005** — 弱安全种子挑战
- **DOOR-006** — 未经授权的车窗控制写入
### 📁 日志面板
- **UDS 诊断日志** — 所有 UDS 请求/响应
- **原始帧日志** — CAN 帧(当 vcan0 处于活动状态时)
- **Oracle / 漏洞日志** — 漏洞检测和 oracle 事件
### 💾 JSON 加载/卸载
无需重启 ECU 即可热切换漏洞配置文件。
### 📤 导出日志
将会话日志保存为 `.log` 或 `.jsonl` 文件。
## 使用 cantools / isotp 进行测试
```
# 安装 tools
pip3 install can-isotp python-can
# 为 Door Lock Status 发送 ReadDataByIdentifier
python3 -c "
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, 0xF1, 0x90]))
time.sleep(0.2)
stack.process()
if stack.available():
print('Response:', stack.recv().hex().upper())
bus.shutdown()
"
```
## 文件结构
```
DOOR_ECU/
├── main_door.py ← Entry point
├── door_gui.py ← Futuristic GUI
├── door_ecu.py ← UDS service handler
├── door_state.py ← ECU state simulation
├── door_vulns.json ← Vulnerability profiles
├── run.sh ← One-click launcher
│
│ (Shared ECU framework:)
├── uds_core.py ← UDS protocol core
├── uds_constants.py ← SID / NRC constants
├── uds_helpers.py ← Hex formatting helpers
├── isotp_server.py ← ISO-TP transport layer
├── vulnerability_engine.py ← Vulnerability evaluation engine
├── vulnerability_config.py ← JSON config loader
├── logger.py ← Structured logger
├── ecu_memory.py ← Virtual memory / NVM
└── logs/ ← Auto-created log directory
```
标签:CAN总线, UDS诊断, 汽车电子, 漏洞模拟, 逆向工具