星期六, 02 10月 2021 12:22

汽车破解笔记系列:反向推断哪些CAN ID属于同一个ECU?

汽车传感器的数目也就几十个到100+个。但有些车辆的总线ID数目高达300+。就是说,ECU传感器本身有多个ID来实施不同功能。ECU在工作状态中可以发出不同ID的数据包。那么当这些传感器汇总在一辆车里让我们分析的时候,面对如此多的数据包,如何反向推断哪些ID属于同一个ECU?

依然如同之前我们的实验方式,使用的软件和工具都是自己研发的。 这个实验要用到的工具包括:总线采集软件,ECU模块扫描软件,云端log service分析平台,外加ECU测试bench和连接工具。

实验目的

收集ECU测试bench数据,判断有几个ECU? 每个ECU的CAN包ID列表。

实验方法

实际上这个实验非常简单:用我们的ECU模块扫描工具, 不需要做任何硬件上的拆解,直接进行扫描,几分钟就可以得出结果。

很明显结果包括两组,即两个ECU,每组ID跃然纸上。然而,细看一下,有一个非常有趣的地方,导致我们花更多的时间来进行验证排查。为什么0x440和0x442这两个ID分在不同的组中?于是又进行了第2次扫描,扫描结果依然是一样的。

结果验证排查

为了确认模块扫描结果的正确性,我们用VT-CANBusLogger软件对该ECU bench进行了流量采集,并进行了 统计分析。

对统计结果进行标注后(绿色和红色各自代表不同的分组),0x440和0x442两个ID无论是从发包间隔还是频率都极其相似,再加上他们的ID数值只相差2。简直就是一对双胞胎!为什么他们却天各一方,分在两个不同的家庭(组),难道是我们的结果出错了吗!?

上粗暴但最有效的方法:接卸ECU bench,只留一个ECU!我们只收集剩下这个ECU的流量。流量数据里所有的ID都只和这个ECU相关。流量数据如下:

这些CAN ID和上面标注的分组ID完全一致,说明我们的ECU模块扫描软件的结果是正确的:0x440和0x442这个两个ID就是属于两个不同ECU的!

更上一层楼

再进一步,把ECU  bench流量上传到云端汽车数据分析平台。画出这两个ID的时间分布图。可以看到这两个ID的包前后错落有致,报文里面的一个字节分别有0x42和0x40,难道是巧合?

对数据进行放大,明显看到这两个ID发包的间隔是一样。这就是很好地解释为什么它们的统计特征也是完全一致的,但却不属于一个ECU。基于它们的频率是流量里最高的,个人认为,是按照周期发布的广播包来通知自身的存在感。

结论

这个实验一方面验证了我们的模块扫描软件的正确性;另外一个方面是告诉我们:基于统计特性的ID分类有时不靠谱。统计特征的完美性往往会欺骗我们。应该采取多种不同维度的工具叠加验证,提高准确性。

查看 7762

按标签查找相关文章

AI 智能舌象仪

Tongue imager rafavi

导航信号采集及测试设备

Portable singal acquisition and replay
 
Please support our site by viewing this advertisement.

Please support our site by viewing this advertisement

Free Content