导读
上一篇我们完成了 CAN 总线的”听”(监听),这一篇教你”看懂”。汽车 CAN 总线上每秒有成百上千帧数据在跑,想从里面找出”哪个 ID 代表车速、哪个代表油门、按一下解锁键发什么”,是逆向工程的核心基本功,也是车联网安全学习的必修课。本文延续零基础路线,用问题分类 → 现象 → 原因 → 解决方案的方式,带你用 ICSim 模拟器 + can-utils + SavvyCAN 完成一次完整的 CAN 消息逆向实战——不需要真车,在家就能练。
⚠️ 重要声明:本文内容仅限模拟器环境、自有车辆、授权测试环境下的安全学习与研究。对他人车辆进行监听、逆向或重放均属违法行为,请守好法律红线。
一、常见问题分类
- 看不懂日志:candump 抓到一堆
123#DEADBEEF,完全不知道啥意思。 - 识别不了信号:想找”车速””转速””油门”,但不知道它在哪个 ID 里。
- 工具太多不会选:Wireshark、SavvyCAN、Kayak、canplayer……到底用啥?
- 没有真车没法练:怕搞坏车,又没有实验室。
二、问题现象分析
1. 看不懂日志现象
现象表现:监听 10 秒,屏幕上刷出几百条帧,每条都是 ID#十六进制数据,完全缺乏头绪。
根本原因:CAN 帧是裸数据,本身不携带”语义”(哪个字节代表什么)。要理解它,你必须自己建立 ID 与动作的对应关系——这就是”逆向”。
2. 识别不了信号现象
现象表现:车里的传感器、控制器每毫秒都在发数据,但不知道哪条对应哪个动作。
根本原因:缺少对照实验思路——只有主动改变一个变量(如按解锁键、踩油门),才能锁定相关 ID。汽车出厂不公开 DBC(数据库)文件,所有规律都得靠自己”测出来”。
3. 工具选择迷茫现象
现象表现:听说 Wireshark 能分析 CAN,装了以后发现里面全是报文流,还是看不出门道。
根本原因:分析 CAN 需要”面向信号的”工具,而非仅仅”面向帧”的工具。SavvyCAN、Kayak 这类专用工具按 ID 分组、高亮变化字节,才是逆向的利器。
三、解决方案(三步完成逆向)
第 1 步:搭建 ICSim 模拟器(不花钱、不碰真车)
ICSim(Instrument Cluster Simulator)是一个开源仿真环境,自带虚拟仪表盘和可交互的 CAN 信号(速度、转向、门锁、油门等),是新手练习 CAN 逆向的顶级靶场:
# 1) 准备 vcan 虚拟接口 + 安装工具
sudo apt install -y can-utils icsim # 或 git clone 后编译
# 2) 创建虚拟 CAN 接口
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
# 3) 一个终端启动服务端模拟器(会持续向 vcan0 发模拟的仪表数据)
icsim vcan0
# 4) 另一个终端启动控制端(按键盘就能操纵车速/门锁)
controls vcan0
第 2 步:用 cansniffer 找”动作 ID”
cansniffer 会把 CAN 帧按 ID 分组,并且高亮变化字节——这是逆向第一利器:
# 监听并高亮变化
cansniffer vcan0
# 操作:在 controls 窗口按 "刹车" / "解锁" / "加速"
# 观察:哪个 ID 的字节变高亮,那个 ID 就"藏"着对应信号
你很快会发现:某几个 ID 在操作时字节在跳、其余 ID 保持不变——变化的字节就是你要逆的信号。
第 3 步:记录 + 分组 + 解码(完整闭环)
# 记录原始日志(用于后续回放和分析)
candump -l vcan0
# 会生成像 candump-2026-05-01_120000.log 的文件
# 只抓某一个 ID(比如你发现 0x164 变化)
candump vcan0,164 -l
# 回放:把日志按原速重放
canplayer -I candump-2026-05-01_120000.log
# 查看总线上各 ID 的负载占比
canbusload vcan0
第 4 步:用 SavvyCAN 做深度逆向(GUI 免费工具)
命令行看到”哪个字节在变”还不够,接下来要理解”字节怎么编码数字”。SavvyCAN(跨平台开源)就是干这个的:
- Sniffer 视图:按 bit 高亮变化,适合找离散信号(门锁、雨刷、升降窗)
- Range 视图:把连续变化的字节数值打印成时间曲线,适合找连续信号(车速、转速、电池电量)
- DBC 编辑器:把发现的信号命名为 speed、door 等,导出标准 .dbc 数据库
- Graph 功能:直接把某 ID 的数据画成波形图,一眼看出线性关系
| 工具 | 定位 | 适合 | 平台/价格 |
|---|---|---|---|
| candump + cansend | 命令行收发 | 基础监听/发帧 | Linux 免费 |
| cansniffer | 实时变化高亮 | 找离散信号 ID | Linux 免费 |
| canplayer | 日志回放 | 重放与批量测试 | Linux 免费 |
| SavvyCAN | 完整逆向 GUI | DBC 解码 / 信号曲线 / 模糊测试 | Win/Linux/Mac 免费 |
| Wireshark | 协议分析 | 已带 CAN 解析器、适用于深挖 | 全平台免费 |
四、一个真实逆向小案例(跑通全流程)
目标:从 ICSim 里找出”门锁(door)”的 CAN ID。
- 启动
icsim vcan0+controls vcan0 - 终端开
cansniffer vcan0,观察高亮 - 在 controls 里反复按门锁键(通常为”d”)
- 发现某 ID(如 0x189)的字节变化——锁定 ID
- 记录该 ID 的原始帧,再用 SavvyCAN Range 视图看变化的字节值
- 归纳:门锁开 = 某字节 = 0x01,关 = 0x00——这就是一级”信号”
✅ 整个过程没有碰任何真车,零风险、零成本,但已经把”找ID→观变化→看编码→下结论”做了一遍。
五、新手避坑清单(CAN 逆向五大坑)
- 别急着发帧:先做 30 分钟以上监听,把 ID 分布摸清再谈发送
- 分清”周期帧”和”事件帧”:周期帧固定节奏出现(怠速数据),事件帧只在操作时出现(门锁)
- 大小端别搞反:CAN 总线数据常见小端字节序,数值可能拆在多个字节里
- 别在真车开爆破式发送:模糊测试请先上 ICSim 模拟器或专用测试平台
- 记录要带时间戳:无论用 candump 还是 SavvyCAN,都保留原始日志文件
总结
CAN 消息逆向没有玄学,本质就三个字:对比法。改变一个变量、看哪个 ID 变化,然后抓住变化的字节去拆解编码。用了 ICSim + cansniffer + SavvyCAN 这套组合,你在家就能练出手感,等哪天上了真车教练车,直接无缝迁移。下一篇,我们会在模拟器里完成一次完整的”车速值还原 + 重放伪造仪表盘数据”全过程,敬请期待!
关注 星宇安全实验室——零基础手机安全研究,下一篇我们上车。记得点赞收藏,你的支持是我日更的动力✨
- 1、本网站名称: 星宇安全实验室
- 2、本站永久网址:https://bk.zhaozhiqiang.pw/
- 3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
- 4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
- 5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
- 6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
- 7、文章版权归作者所有,未经允许请勿转载。









暂无评论内容