OBD_Test_ToolKit — 车载 UDS / OBD-II 渗透测试工具箱:12 阶段覆盖 + 自动判定 HTML 报告(Web UI + TSMaster)
[AI 整理声明]本文基于作者的项目文档与开发实践,由 AI 辅助整理输出,核心内容与数据均来自作者本人。
目录
- 设计取舍
- 安装
- 12 个阶段
- 情报库
- 报告
- 红线
- 注意
做车辆诊断安全评估的时候,测试流程往往是分散的——ECU 扫描用一个脚本,SecAccess 枚举用另一个,日志各存各的,最后拼报告又是一套工序。OBD_Test_ToolKit 是把这套流程系统化的工具箱:12 个渗透阶段对应 12 张 Web 页面,每阶段的输出以 JSON 落进"情报库",最终一键出可交付的 HTML 审计报告。
- GitHub:https://github.com/cstriker1407/OBD_Test_ToolKit
设计取舍
Python 侧零总线 I/O——不依赖python-can,不开 PCAN / Vector / Kvaser 设备,不发一个 CAN 帧。总线 I/O 全部交给TSMaster IDE及其 C++ MiniProgram 完成:
Web UI (Flask) ↓ 生成 phase_inputs.h TSMaster MiniProgram (12 × .cpp) ↓ 输出 .blf + .txt 日志 Web UI ↓ 上传 .txt → 解析 → intel/*.json Verdict 引擎 + Jinja2 ↓ HTML 报告好处:换硬件不改 Python 代码;日志文件本身是取证证据,随时可回放重新解析;误 kill Web 进程不会让攻击流量卡在总线上。
代价是需要一份TSMaster IDE(TOSUN 官方免费下载)作为运行时。
安装
gitclone https://github.com/cstriker1407/OBD_Test_ToolKit.gitcdOBD_Test_ToolKit python-mvenv .venv .venv\Scripts\activate# Windows# source .venv/bin/activate # Linux/macOSpipinstall-rrequirements.txt python web/app.py# http://localhost:8081TSMaster 侧首次配置:
# 用 TSMaster IDE 打开tsmaster\.TSProj# 修改共享头后同步 12 个 .cpppython tsmaster\inline_common.py新项目直接复制整个目录——intel/*.json是全部状态,天然是"项目文件夹"。
12 个阶段
首页 12 张阶段卡片,每张显示完成度与快捷入口:
| 阶段 | 关键动作 | 输出 |
|---|---|---|
| 01 接入与拓扑发现 | 11-bit / 29-bit / J1939 全段 ECU 扫描 | ecus.json |
| 02 协议合规性扫描 | OBD-II Mode 1-10 + UDS SID 全量探测 | sid_matrix.json |
| 03 会话状态机分析 | Session 0x01-0x7F 枚举 + S3 timer 实测 | sessions.json |
| 04 SecAccess 安全访问 | Level 枚举 / seed 熵分析 / lockout 检测 | secaccess.json |
| 05 DID 读取防护 | 广播 vs 直接寻址暴露面对比 | did_exposure.json |
| 06 DID 写入防护 | Read-then-write-same 探测 | did_write.json |
| 07 内存读写防护 | SID 0x23/0x3D 可达性、ALFID 边界 | memory.json |
| 08 DTC 故障诊断 | SID 0x19 多 sub 覆盖 + ClearDTC | dtc.json |
| 09 例程控制 | SID 0x31 危险 routine 黑名单枚举 | routines.json |
| 10 固件刷写攻击面 | Programming Session 门槛 + 0x34/35/36 可达性 | flash.json |
| 11 网关与跨子网 | 网关识别 + 广播 / 直连过滤差异 | gateway.json |
| 12 Fuzz(可选) | SID 参数 / 多帧序列 / 时序 fuzz | fuzz.json |
单个阶段页的操作流程:说明 → 生成 TSMaster 输入 → 上传日志 → 解析后回显结构化数据:
情报库
每个阶段的结果以 JSON 写入intel/目录,Web UI 提供两个汇总视图。
ECU 清单(Phase 01 自动写入,可手工微调 identity / 寻址方式 / 填充字节)和诊断服务矩阵(按 ECU × SID 展示每个服务的可达性):
报告
12 阶段跑完后POST /report,verdict 引擎对intel/*.json应用内置规则(ISO 14229 / GB 44495-2024 / ISO 21434 常见基线),输出 finding + verdict(通过 / 不通过 / 严重不通过),Jinja2 渲染成单文件 HTML,全部内联样式,可离线归档 / 邮件转发:
报告页提供在线预览、下载、归档、清空测试数据(保留项目信息 / ECU 清单 / 红线)几个操作,各自独立互不影响。
红线
intel/red_lines.json是安全护栏——绝对不测的 SID、不写的 DID、不启动的 routine、危险内存段,UI 直接编辑,有"恢复默认"按钮:
跑真车前一定要检查这个文件,特别是 OEM 私有的危险 routine ID 需要手工补进去。
注意
本工具是主动式渗透测试工具,会向 ECU 发送变形 / 不合规 / 高频诊断请求。
- 严禁对上路 / 载人 / 行驶中的车辆运行任何阶段
- Phase 04(SecAccess 枚举)可能触发 ECU 永久 lockout,部分 ECU 要拆下来重刷 boot 才能恢复
- Phase 07(内存读写)任何操作都可能砖 ECU,红线覆盖不了所有 MCU 特殊寄存器
- Phase 10 / 12(固件刷写 / Fuzz)在任何非授权车辆上运行都可能构成犯罪
- 仅限持有测试对象合法所有权或 OEM 明确书面授权的场景使用
当前版本 beta,MIT 开源。
