开源本地化代码审查工具open-code-review实战指南
2026/10/19 3:23:21
0x27 本质是一个Seed-Key 挑战-响应状态机:先要种子,再发密钥,ECU 比对通过后才开放受保护服务。
Tester → ECU: 27 01 // 请求种子(奇数子功能) ECU → Tester: 67 01 + Seed // 返回随机种子 Tester → ECU: 27 02 + Key // 发送密钥(偶数子功能 = 奇数 + 1) ECU → Tester: 67 02 // 密钥正确,解锁成功关键规则:
| NRC | 含义 | 触发场景 |
|---|---|---|
| 0x24 | 请求顺序错误 | 没请求种子直接发27 02 |
| 0x35 | 无效密钥 | Key 算错,验证失败 |
| 0x36 | 超出尝试次数 | 连续错误达阈值,触发延时锁定 |
| 0x37 | 延时未到 | 锁定期间再次请求种子 |
| 0x33 | 安全访问被拒绝 | 未解锁就执行受保护服务 |
| 0x22 | 条件不满足 | 未在正确会话下请求 0x27 |
| 服务 | 为什么需要解锁 |
|---|---|
| 0x2E WriteDataByIdentifier | 写 DID、写标定参数、写 VIN 等 |
| 0x31 RoutineControl | 擦除 Flash、执行自检例程 |
| 0x34/0x36/0x37 | 下载/传输数据/退出传输,刷写核心链路 |
| 0x2F InputOutputControl | 控制 IO 引脚、激活执行器 |
| 0x28 CommunicationControl | 关闭/恢复非诊断通信 |
| 部分 0x22/0x23 读操作 | 读取敏感 DID 或受保护内存区域 |
一句话记:0x27 是诊断权限的"钥匙",奇数要种子、偶数发密钥;没钥匙,写、刷、控、例程都动不了。