更进一步

接下来该做什么

如果你已完成本节中的所有教程,并正在寻找新的内容,可以尝试挑战 CTF 训练页面中的题目,或者重温过去包含 RAMN 的专业 CTF 比赛(CTF 解题报告 )。

使用外部适配器

虽然你可以将 ECU A 用作 USB 转 CAN 适配器,但你可能更倾向于使用外部 CAN 适配器以及配套的分析工具套件。例如,你可以将 BUSMASTERPCAN-USB 配合使用。这些工具通常允许你加载一个数据库文件(“DBC 文件”),该文件指定了 CAN 帧中每个比特所代表的具体含义。

RAMN 的 DBC 文件

RAMN 的“DBC”和“DBF”文件位于 misc 文件夹中。您可以使用这些文件来帮助分析 RAMN 的默认信号。

例如,借助 BUSMASTER 和兼容的外部适配器,您可以选择“数据库 -> 关联”,并加载 .DBF 文件。

这将允许您用助记符替换 CAN 标识符和有效载荷,如下所示。

这将使您能够记录并显示在 CAN 总线上观察到的数值图表。

RAMN 的 GitHub 仓库中提供了一个 PID 控制示例 ,该示例在 RAMN ECU 上以闭环方式与驾驶模拟器(参见 CARLA)协同实现。

其他 CAN 工具

其他 CAN 软件工具也可用于与 RAMN 的 ECU 进行交互。

例如,Caring Caribou 提供了多种与 UDS 和 XCP 交互的功能。请按照此处的说明进行安装:

git clone https://github.com/CaringCaribou/caringcaribou cd caringcaribou python3 setup.py install

然后,在您的主目录中创建一个 .canrc 文件(可使用 nano ~/.canrc),并添加以下内容:

[default] interface = socketcan channel = can0

如果您需要以 root 用户身份执行,应改在 /root/.canrc 中创建 .canrc 文件。

之后您应该能够使用 caring caribou 的模块。

UDS

你可以使用发现模块来确定 RAMN 的 ECU 所使用的 CAN ID。

caringcaribou uds discovery

你可以使用“services”模块来查看 ECU B 支持哪些服务:

caringcaribou uds services 0x7e1 0x7e9

在另一个窗口中,你可以使用 isotpdump can0 -s 7e1 -d 7e9 -c -u 来观察流量。

您可以使用以下命令读取 ECU B 的所有可能的 DID:

caringcaribou uds dump_dids 0x7e1 0x7e9

如果遇到错误,请尝试执行 sudo ifconfig can0 txqueuelen 10000

XCP

请参考帮助页面,了解如何使用 Caring Caribou 的 XCP 模块:

caringcaribou xcp --help

您可以使用发现模块扫描 XCP 对(自动黑名单选项会先监听流量,以避免误报):

caringcaribou xcp discovery -autoblacklist 10

您可以向 ECU 查询其基本信息,例如针对 ECU B:

caringcaribou xcp info 0x552 0x553

在另一个窗口中,使用 candump can0,552:7fe 来观察 XCP 流量。

你可以尝试使用 XCP 转储 ECU B 固件的前 256 字节,命令如下:

caringcaribou xcp dump 0x552 0x553 0x08000000 0x100 -f dump.bin

CAN 脚本编写

对于 CTF 和其他高级 CAN 活动,你可以使用 python-can 来自动化 CAN 通信。

python-can 可用于直接在 CAN 层上自动化帧的传输。你可以在这里找到一系列示例。示例 send_one.py 将向你展示如何简单地发送一条 CAN 消息,receive_all.py 将展示如何接收 CAN 消息,而 asyncio_demo.py 则会演示如何将 CAN 消息的接收与发送关联起来。

同样地,can-isotp 可用于自动化 ISO-TP 消息的传输。有关示例,请参阅其 文档

最后,udsoncan 可用于 UDS 通信交换。