CAN 总线消息逆向实战:ICSim + cansniffer + SavvyCAN 三步找出车速与门锁信号

导读

上一篇我们完成了 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。

  1. 启动 icsim vcan0 + controls vcan0
  2. 终端开 cansniffer vcan0,观察高亮
  3. 在 controls 里反复按门锁键(通常为”d”)
  4. 发现某 ID(如 0x189)的字节变化——锁定 ID
  5. 记录该 ID 的原始帧,再用 SavvyCAN Range 视图看变化的字节值
  6. 归纳:门锁开 = 某字节 = 0x01,关 = 0x00——这就是一级”信号”

✅ 整个过程没有碰任何真车,零风险、零成本,但已经把”找ID→观变化→看编码→下结论”做了一遍。

五、新手避坑清单(CAN 逆向五大坑)

  • 别急着发帧:先做 30 分钟以上监听,把 ID 分布摸清再谈发送
  • 分清”周期帧”和”事件帧”:周期帧固定节奏出现(怠速数据),事件帧只在操作时出现(门锁)
  • 大小端别搞反:CAN 总线数据常见小端字节序,数值可能拆在多个字节里
  • 别在真车开爆破式发送:模糊测试请先上 ICSim 模拟器或专用测试平台
  • 记录要带时间戳:无论用 candump 还是 SavvyCAN,都保留原始日志文件

总结

CAN 消息逆向没有玄学,本质就三个字:对比法。改变一个变量、看哪个 ID 变化,然后抓住变化的字节去拆解编码。用了 ICSim + cansniffer + SavvyCAN 这套组合,你在家就能练出手感,等哪天上了真车教练车,直接无缝迁移。下一篇,我们会在模拟器里完成一次完整的”车速值还原 + 重放伪造仪表盘数据”全过程,敬请期待!

关注 星宇安全实验室——零基础手机安全研究,下一篇我们上车。记得点赞收藏,你的支持是我日更的动力✨

© 版权声明
THE END
喜欢就支持一下吧
点赞12赞赏 分享
相关推荐
评论 抢沙发

请登录后发表评论

    暂无评论内容