关于CAN总线逆向工程的初步探讨
2015-05-08
关于CAN总线逆向工程的初步探讨
随着中国汽车业的发展,汽车的后端市场也日趋繁荣,但由于各汽车生产厂家的技术壁垒,后端设备供应商如GPS,车载音响,车载DVD,诊断仪等供应商很难得到原汽车厂家各车型的报文定义,以使自己的产品完全和车载兼容。本文将以美国英特佩斯控制系统有限公司的产品(软件:Vehicle Spy,硬件:neoVI)为例,探讨如何解码CAN总线报文。
Vehicle Spy产品是美国通用汽车的标准测试工具,可以同时支持HS CAN、MS CAN、ISO9141、J1850VPW、J1850PWM、LIN等多种总线协议、 实现车载网络诊断、节点/ECU仿真、数据采集、自动测试和车载网络总线监控等功能,相对于其它的总线工具,该产品注重用户使用的高效性和便捷性,易于用户学习和使用。
Vehicle Spy可以通过两种方式监控总线通信:通过车载的ODB接口监控汽车总线通信(图1)和直接监控ECU之间的通信(包括诊断仪和被诊断设备,图2)
当设备连接正常并设置好正确的波特率后,打开Vehicle Spy运行界面,无论是车载总线通信数据或是ECU间的总线通信数据都会被毫无遗漏的实时显示在监控界面上,图3显示的是监控的车载CAN总线数据,这些数据都是未经解码的原始数据,接下来 我将介绍监控界面的各项:
1)、图3中①所在的部分是滤波器,因为vspy可以同时监控多种网络数据,该滤波器基于网络类型滤波,例如,勾选HSCAN,则监控界面将只显示HSCAN类型网络数据。
2)、图3中②所指的栏为滤波栏,在该栏中可以更灵活实现滤波功能,如根据报文名称,ArbID等滤波,支持“?”“*”等符号,比如现在我们只想监控Arb ID为110和120的报文,则只需要在ArbID栏输入110,120则可,如图4所示:
3)、图3中③所指为进制切换按钮,只需简单点击即可将报文数据切换成其它进制(默认为16进制)。
4)、图3中数据字节为蓝色背景的部分表示变化较慢的数据(④所指)
5)、图3中数据字节为黑色背景的部分表示变化较快的数据(⑤所指)
6)、图3中数据字节无背景颜色的部分表示出现过后在一段时间没有再出现的数据(该时间值是可以设定的)
7)、整个监控界面实际上也是一个缓冲区,该缓冲区的数据可以随时保存,保存的数据可以用于以后回放以分析数据,图3所其实就是在回放数据文件,⑥所指为缓冲区进度条。
8)、vspy的默认属性栏包含了报文数量统计,报文接收时间等属性,还有其他的属性用户可以在设置栏自己定义,这将非常有助于逆向分析。
通过以上的介绍,相信有经验的工程师已经看出这款产品在总线数据解码方面的优越性。对于车载CAN总线,由于CAN报文的优先级取决于ArbID,ID值越小,优先级越高,这为我们揣测报文是来自于车载上的哪个ECU提供了依据,由于vspy可以实时无遗漏地监视总线通信报文变化并能以各种颜色来区分数据变化的快慢,因此我们可以通过反复动作车辆来观察报文变化情况,如开关车门,开和关会引起某个数据字节中的某位产生状态变化,由于这种变化是非连续性的快速变化数据,在监控界面中必然会以蓝色背景显示,因此我们可以在开关车门的时候在监控界面查找有蓝色变化的报文,并将这些报文用上述的滤波功能过滤出来以缩小监视范围,然后反复动作车门以确定是哪条报文的某位随着车门动作在变化,这将很容易辨别,在得出结论以后,再将该位提取出来并命名然后再动作车门以进行验证。当然,vspy提供解析报文的功能,比如我们判定图3中ArbID为510的报文中第二字节第二位表示车门开关,则可将该位命名为door control,并将该条报文设置为其它颜色,以方便观察,解析的结果如图5所示,对解析的结果,vspy还可以将其保存为标准的DBC格式。对于直接监视ECU之间的通信,则过程会简单的多。
当然,如果要解码ECU的所有报文,工作量会非常大,如果是解码整个车辆的报文,那可能是需要团队来完成,本文只是对解码工作做初步探讨,抛砖引玉,希望能与大家交流。