UDS(统一诊断服务)是车上很重要的一个诊断协议,但除非能接触到实际项目,否则目前没见过有开源的能进行真实 UDS 诊断的练习板,纯讲理论没啥意思
我在闲鱼买了一套 UDS_bootloader 的源码,目前跑通了几个 UDS 服务的功能,水一篇文章,介绍一下如何通过一块 STM32 的开发板实际练习 UDS 诊断,配套固件也会传上来,师傅们可以自己买板子烧进去练习
STM32F103ZE 开发板,用来跑我们的 UDS 代码的
TJA1050 CAN 控制器接口模块,用来转换 CAN 信号的,淘宝卖的默认是没有排针的,要是自己有电烙铁可以焊上排针,方便接杜邦线
CAN 调试仪,用来与 STM32 建立 CAN 通信的,什么品牌无所谓,我用 PCAN 习惯了
Jlink 或 STlink(主要是烧写固件的,最好买带这个排线的,不然自己按照引脚定义去接杜邦线去嗷)
还需要一些杜邦线用来连接这几个硬件设备
软件主要是用两个,一个是 Jflash(413K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2K6k6h3N6Y4k6i4u0Q4x3X3g2U0L8$3#2Q4x3V1k6H3M7X3!0V1N6h3y4@1M7#2)9J5c8X3c8W2j5Y4g2Y4i4K6u0V1M7s2u0G2j5X3g2K6i4K6u0r3K9W2)9J5k6r3I4A6L8X3E0Q4x3V1k6@1L8$3!0D9M7#2)9J5c8X3A6Q4x3X3c8X3L8r3q4K6K9q4)9J5c8X3q4T1L8%4g2@1i4K6u0V1K9W2)9J5k6r3k6D9j5i4y4Z5i4K6u0r3i4K6t1K6M7$3!0X3N6s2N6S2M7X3g2Q4c8f1k6Q4b7V1y4Q4z5o6W2Q4c8e0N6Q4z5e0c8Q4b7e0S2Q4c8e0k6Q4z5f1c8Q4b7e0g2Q4c8e0N6Q4z5o6y4Q4b7e0N6Q4c8e0g2Q4b7V1c8Q4z5e0g2Q4c8e0g2Q4z5f1u0Q4b7V1q4Q4c8e0c8Q4b7V1u0Q4b7U0k6Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0g2Q4b7V1c8Q4z5e0y4Q4c8e0N6Q4z5o6c8Q4b7U0k6Q4c8e0g2Q4b7e0k6Q4z5o6u0Q4c8e0k6Q4z5f1g2Q4z5f1y4Q4c8e0c8Q4b7V1c8Q4b7e0m8Q4c8e0N6Q4z5e0c8Q4b7e0S2Q4c8e0g2Q4z5o6S2Q4b7f1u0Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0S2Q4b7U0m8Q4z5o6y4Q4c8e0S2Q4b7f1k6Q4z5e0g2Q4c8e0g2Q4z5e0W2Q4b7e0S2Q4c8e0g2Q4b7U0m8Q4b7U0q4Q4c8e0W2Q4z5o6m8Q4z5o6W2Q4c8e0k6Q4z5p5u0Q4b7e0W2Q4c8e0g2Q4b7f1k6Q4b7U0W2Q4c8e0g2Q4b7V1q4Q4z5e0c8Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0S2Q4b7V1c8Q4b7f1k6Q4c8e0c8Q4b7V1u0Q4b7U0k6Q4c8e0g2Q4z5p5c8Q4b7U0y4Q4c8e0g2Q4z5p5k6Q4b7f1k6Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0c8Q4b7U0S2Q4z5o6m8Q4c8e0c8Q4b7U0S2Q4b7f1q4Q4c8e0k6Q4z5e0S2Q4b7f1j5`. TSMaster(ad6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6f1e0#2y4g2e0W2)9J5k6q4y4Z5j5h3&6Y4K9r3q4A6i4K6u0r3g2q4y4y4j5i4y4@1k6i4u0Q4x3V1k6J5k6h3I4W2j5i4y4W2M7#2!0q4c8W2!0n7b7#2)9^5z5g2!0q4y4#2)9&6y4q4!0m8z5q4!0q4y4W2)9&6c8q4!0m8y4g2!0q4z5q4!0n7c8W2)9&6b7W2!0q4z5q4!0m8x3g2)9^5b7H3`.`. CAN 通信的(夸一夸 TSMaster,个人觉得很好用
Jlink 直接通过排线与 STM32 开发板相连即可,STM32 右边的 USB 接口是个串口可以看 UART 日志
TJA1050 的 RX 接 STM32 的 PA11,TX 接 STM32 的 PA12,VCC 接STM32 的 5V,GND 接 STM32 的 GND
TJA1050 的 CANH 接 CAN 分析仪的 CAN_H、CANL 接 CAN 分析仪的 CAN_L( 这里以 PCAN 为例)
安装好 Jflash 之后打开,选择新建项目
点击三个点,在输入框输入 STM32F103ZE 过滤出来,选择下面那个短的,然后 ok
把两个固件都拖到右边的数据文件窗口,然后点击 Target -> Production Programming 烧写固件(hex 文件都是记录着地址信息的,直接烧录即可)
然后打开串口调试工具,波特率设置为 115200,按下复位键看看是不是有输出了,如下输出说明正常
UDS 定义了一系列的服务,每个服务都有自己的 ID 即 SID(Service Identifier),接下来通过开发板实际进行 UDS 诊断通信体验一下,具体理论知识可以参考网上其他文章或者直接看 14229 的标准,文末我会上传附件
22 服务通过 ID 读取数据,例如读取当前会话状态的 ID 是 F1 86,那么可以使用 7DF # 03 22 F1 86 来读取当前会话,F1 86 后面跟的 01 就是当前会话状态
在 14229 标准里面还有很多 ID,比如 F1 90 读取 VIN 码等(开发板暂未实现),以及厂商也会自定义 ID
先使用 7DF # 03 22 F1 86 读取当前会话
切换到扩展会话 7DF # 02 10 03 然后 0x22 读取会话确认一下 7DF # 03 22 F1 86,一般在扩展会话进行一些高权限的操作,比如读写数据
切换到编程会话 7DF # 02 10 02 此时观察串口可以看到进入到了 bootloader 的代码中,一般在这个会话状态进行刷写烧录相关操作
当进入非默认会话后如果不及时发送 3E 维持会话,过一阵就会退回默认会话
[招生]系统0day安全-IOT设备漏洞挖掘(第6期)!