如何通过CAN破解汽车
破解流程(以转速表为例)
一辆车就是一个网络
一辆汽车由多台计算机组成,以控制发动机、变速器、窗户、锁、灯等。这些计算机被称为电子控制单元(ECU),它们通过网络相互通信。例如,当你按下方向盘上的按钮来增加收音机的音量时,方向盘ECU向网络发送一个增加音量的命令,无线电ECU就会看到这个命令并采取相应的行动。 一辆车里有多个网络,通常至少有两个:
a. 一个用于关键数据,如发动机和动力系统信息
b. 另一种是不太重要的数据,比如无线电和门锁关键网络使用快速可靠的协议,而非关键网络使用较慢、可靠性较低但成本较低的协议。网络的数量以及将哪些ecu连接在一起取决于汽车制造商、车型和年份。ECU还可以连接多个网络。
连接到网络
一些网络可以通过OBD-II端口访问。OBD-II适用于1996年以后在美国和2004年以后在欧洲生产的所有轿车和轻型卡车。
连接器位于驾驶员座位触手可及的位置。你可能需要取下一些塑料盖,但不用工具就可以使用。
OBD-II标准允许五种信令协议。由制造商决定使用哪一种。CAN是最受欢迎的,也是我们将要讨论的。它可以通过OBD-II连接器的引脚6和14访问。如果你的车有一个CAN总线,你会看到金属引线在引脚上,如上图所示。
CAN总线是一种可靠的、高速的总线,用于发送关键数据。不幸的是,总线上的数据包不是标准化的,所以您需要将它们颠倒过来才能知道它们的意思。OBD-II标准还为特定于供应商的引脚留有空间,这些引脚可以用于特定于供应商的协议。这使得经销商更容易诊断问题。
在我的汽车(GM)上,我有一个标准的CAN总线在引脚6和14,和一个供应商特定的单线CAN总线在引脚1。标准CAN总线是一种可靠、高速(500kbps)的协议,也称为高速CAN (HS-CAN)。它用于关键数据。单线CAN总线(SW-CAN)或GMLAN速度较慢(33.3 kbps),可靠性较差,但成本较低,因为它只使用一根线。此总线用于非关键数据。
如果你看到一个供应商特定的引脚,但不知道使用的是哪个协议,谷歌' OBD pinout '。还有低速CAN (LS-CAN)和中速CAN (MS-CAN)。MS-CAN通常在第3和第11针,在福特和沃尔沃汽车上以125 kbps的速度运行。
硬件
为了接收和发送CAN包,您需要一个能够做到这一点的设备。您经常会遇到基于ELM327的设备。虽然它们有自己的用途,但对于黑客来说,它们是可怕的。它们的速度太慢,无法监控CAN总线。此外还有Kvaser、Peak或EMS Wünsche等高端设备。这些可以完成工作,但太过了,而且相当昂贵。
一些高端设备还要求你同时购买软件。USB2CAN是一个用于Linux的本地CAN接口,性价比很高。
你也可以使用Cantact或CANUSB。然而,这些不是Linux中的本地CAN设备,而是使用基于ASCII的协议。这意味着它们的设置稍微复杂一些,性能也较差。另一方面,它们在多个操作系统中都得到了很好的支持。我使用的CANalyze是我为自己的需求设计的。它类似于USB2CAN,因为它是一个便宜的本地CAN接口,但它使用了一个较新的微控制器,是开源的,可以使用开源工具构建。本教程的其余部分假设您使用的是本机CAN接口。
2 | Candump 打印所有收到的数据包
3 | Cansend 发送一个数据包
CAN bus
仲裁标识符
消息的标识符。ECU使用它来决定是处理还是忽略接收到的帧。它还表示消息的优先级。编号越低优先级越高。例如,如果你是一个设计网络的工程师,你会给安全气囊部署的框架一个非常高的优先级或者一个低的仲裁ID。另一方面,对于用于门锁的数据,您可能会给出较低的优先级或较高的仲裁ID。数据长度码 (DLC)
数据字段的长度,以字节为单位。一个CAN帧最多可以有8字节的数据。数据字段
最多8字节的数据。
破解CAN协议
破解CAN总线的一般方法是生成您想要模拟的行为,并找到导致该行为的消息。例如,让我们假设你车上的车道保持辅助系统(LKAS)是垃圾,而你已经制作了自己的。
为了让它控制转向,你需要知道要发送什么信息。解决这个问题的方法是打开原来的LKAS,监控CAN总线并识别负责转动方向盘的包。一旦你确定了这些数据包,你就可以让你自己的LKAS把这些数据包发送到can总线来控制方向盘。
在我们的情况下,我们想要欺骗转速表,所以我们需要改变转速通过踩油门与汽车上和空挡,然后试图找到包负责改变转速。
设置
识别
第一列(delta)显示了以秒为单位的接收仲裁ID的数据包的速率。第二列(ID)包含仲裁ID。其余的字母数字列(data…)包含数据字节。如果数据是ASCII表示,它可以在右边看到,否则它是一个点。
在此消息中有4个字节正在更改(红色),但并非所有字节都必须指示RPM。第三个字节07的变化似乎与不同的RPM无关。最后一个字节是1B。
然而,只要我们把脚从油门上拿开,它就到了00。这将表明,它代表油门位置,而不是RPM。
最后是两个字节21 C0,它们似乎与RPM中的变化相对应。更重要的是,它是一个16字节整数,即当第二个字节C0溢出时,第一个字节21增加1。似乎21对应大约2000 RPM。当您将重播消息时,请注意这一点。
重播
模糊测试
就是这样!您现在可以尝试控制速度计,收音机,灯,门锁等使用相同的方法。