前一段时间整车测试中发现部分车型发送诊断请求没有响应。通过使用诊断仪对车辆诊断请求,发现该车型使用扩展帧进行uds通信。
引出一个问题,基于扩展帧的uds通信是怎样实现的,和标准帧有什么区别?
经过一顿翻标准,明白can通信的也是具有OSI 7层模型的定义
在can的网络层协议ISO-15765-4中,对扩展帧的诊断ID做了定义。18DB33F1是功能寻址
18DAXXF1为测试设备发送给ECU的ID,
18DAF1XX为ECU的响应ID
此处xx范围是00-ff,其他和标准帧一致
由此我们可以通过遍历18DA00F1到18DAFFF1的范围来发现支持的ecu。
然后探测服务、子服务,一步步展开测试。
这时已经搞明白了基于扩展帧的uds具体情况,接下来就想能不能实现测试的工具化,之前讲到caringcaribou(以下简称cc)在can总线测试中是一个很好用的工具,打算在此基础上二次开发,从而实现基于扩展帧UDS的安全测试工具。
首先,把cc的源码看了一遍,发现cc很多自动化的测试功能,ecu探测,种子爆破,fuzz等,具备扩展性,modules路径下创建自己的python代码就可以将自己内容添加到工具中去。符合预期要求,继续实现。
通过查找工具中的对应uds模块,发现在指定初始id后可以进行扩展帧的诊断探测,但是只能像标准帧那样每次+1遍历,无法满足要求,于是使用变量插入id内。
uds中的所有模块都是基于uds+discovery这个函数进行,只要修改这个函数就可以满足对扩展帧探测的要求。
增加参数“E”使用扩展帧诊断探测。
相同方法加入参数“E”,在uds auto 可以进行自动化测试。
后续对其它可能需要添加扩展帧的模块,uds fuzz和fuzz最可能需要加入。
uds-fuzz为种子爆破需要指定发送和响应ID
fuzz可以使用mutate 7f. aabbccddeeffgg指定模糊测试位。
目前可以使用
cc.py uds discovery -E
cc.py uds auto -E
进行UDS扩展帧的ecu探测和自动扫描。
最后附上工具地址:https://github.com/1in-oos/ccplus
请多多指正。
原文始发于微信公众号(安全脉脉):基于扩展帧UDS的安全测试工具