汽车CAN总线逆向及通信初探索(一)

汽车安全 3年前 (2022) admin
785 0 0

作者:橡树





大家好,我是橡树,今天给大家带来有关汽车CAN总线逆向模拟器的介绍及CAN通信初探索的文章。车联网这条探索的路上,大家拿到的资料都是比较少的,我这边好多资料其实也都是在各类书籍中寻找和探索。这篇文章是我尝试着写的,若有什么不对的地方,还是希望各位大佬可以批评指正。



汽车CAN总线逆向及通信初探索(一)

0x01 CAN总线的介绍

汽车CAN总线逆向及通信初探索(一)


CAN最初是由德国的BOSCH公司为汽车监测、控制系统而设计的。现代汽车越来越多地采用电子装置控制,如发动机的定时、注油控制,加速,刹车控制(ASC)及复杂的抗锁定刹车系统(ABS)等。由于这些控制需要检测及交换大量数据,采用硬接信号线的方式不但繁琐、昂贵,而且难以解决问题,采用CAN可以很好的解决上述问题。

下面这张图就可以清晰的表达CAN总线在总线型网络拓扑中的表示形式(图片来源网络)

汽车CAN总线逆向及通信初探索(一)


这张图可能更清晰(这次是闭合曲线图)。(图片来源网络+个人魔改)

汽车CAN总线逆向及通信初探索(一)



汽车CAN总线逆向及通信初探索(一)

0x02 抗干扰欧姆

汽车CAN总线逆向及通信初探索(一)


在这里要多提一嘴的是一般各种图上都会去画120欧姆的电阻,两端各一个120欧姆的电阻,整个can网络总线其余电脑并联在这组can线上,终端电阻不一定会放在发动机电脑或者ABS电脑里,他会放在某一个电脑里,作用是做抗干扰用的,因为我们在看示波器的时候一些细微的干扰就可能会影响我们的示波器波形图。


汽车CAN总线逆向及通信初探索(一)

0x03 CAN口小技巧

汽车CAN总线逆向及通信初探索(一)


每组主can线上肯定是有终端电阻我们测量时候会测出来是60欧姆的阻值,其实这里也有一个技巧,我们在用OBD(仅限于在实验接口)去做测试的时候,可以用万用表去测,哪个口附加有60Ω的电阻,这个端口就可能是can端口。


汽车CAN总线逆向及通信初探索(一)

0x04 串口通信

汽车CAN总线逆向及通信初探索(一)


在讲CAN之前,我们先了解一下上门叫做串行通讯,其实就是用一根线来进行通讯,我们可以来看一下这个电报机发射器。(图片来源网络)

汽车CAN总线逆向及通信初探索(一)


当触点闭合会发出一个高电平在数字电路中用1表示,当开关断开会发出一个低电平,我们在数字电路中用0表示,这个电报机大家在电影里面都看过,其实他就是通过闭合时间的长短来组成不同的编码。例如我们需要发一个SOS,那么,就是类似于这样的波形图:

汽车CAN总线逆向及通信初探索(一)


闭合时,会发出一个高电平,松开时候发出一个低电平,通过按压时间的长短来组成不同次序的密码通过密码本进行翻译,这样就明白它说的信息具体是什么。


汽车CAN总线逆向及通信初探索(一)

0x05 差分信号

汽车CAN总线逆向及通信初探索(一)


接下来我们来看差分信号,下图这种信号就叫做差分信号,即顾名思义,取这两条线之间的差值。这两条线都是2.5v的时候,相当于这个开关没有闭合,当开关闭合的时候,can高是3.5v can低是1.5v这个时候呢中间会有2v的电压差相当于有个高电平,接通了,后面can高can低一样的时候,就相当于低电平没有接通,不管是can线还是lin线都和发电报比较相似,都是串行通讯,只是不同的排列组合代表不同的含义。(图片来源网络+个人魔改)

汽车CAN总线逆向及通信初探索(一)


汽车CAN总线逆向及通信初探索(一)

0x06 CAN通信初探

汽车CAN总线逆向及通信初探索(一)


网络上针对 CAN 总线通信的文章少之又少,刚开始我使用的是 EML327 这款 OBD 诊断接口设备妄图想撬开汽车 CAN 的大门,后来发现,到底是太年轻了。在请教了新能源汽车专业的老师及团队汽车专业的小伙伴之后,才开始了接下来的测试和学习。

网络上各类相关文章都或多或少存在一些问题。这里我将问题整理进行总结。


汽车CAN总线逆向及通信初探索(一)

0x07 通信测试MCU

汽车CAN总线逆向及通信初探索(一)


在开始之前,硬件方面我需要一块树莓派 4(3,4 都无所谓,甚至烧录 Ubuntu 系统都可以),MCP2515 模块和一个 CAN 分析仪,或者一台整机操作系统,又或者一辆汽车。MCP2515 模块的晶振为 8M 的树莓派 4 就按照官方指定系统烧录即可。这里针对于树莓派 4 系统的烧录不做过多解释。首先就是 MCP2525 模块和树莓派的接线问题,这边我直接摘选大佬的接线方式。

汽车CAN总线逆向及通信初探索(一)


按照以上接线方式接线成功后,应该是如下图所示的结构现象:

汽车CAN总线逆向及通信初探索(一)


然后树莓派上电,开机。当硬件接线工作操作就绪后,接下来开始在树莓派终端的工作:

1、开启树莓派 SPI

首先,我们需要打开树莓派 SPI 功能,可以通过编辑/boot/config.txt 文件来实现:

pi@raspberrypi:~ $ sudo nano /boot/config.txt

默认使用树莓派的 nano 编辑器,然后我们进行修改。将原本关闭的 SPI 功能注释取消掉然后开启。


2、安装 CAN tools:

pi@raspberrypi:~ $ sudo apt-get install can-utilscanutils 介绍:工具包内含 5 个独立的程序:canconfig、candump、canecho、cansend、cansequence。


这几个程序的功能简述如下:

canconfig:用于配置 CAN 总线接口的参数,主要是波特率和模式。

candump:从 CAN 总线接口接收数据并以十六进制形式打印到标准输出,也可以输出到指

定文件。

canecho:把从 CAN 总线接口接收到的所有数据重新发送到 CAN 总线接口。

cansend:往指定的 CAN 总线接口发送指定的数据。

cansequence:往指定的 CAN 总线接口自动重复递增数字,也可以指定接收模式并校验检查接收的递增数字。


3、启动 CAN 接口:

ip link 命令启动 can 接口。

bitrate 500000:比特率设置为 500k,在这里比特率是波特率的两倍,所以波特率为 250k。

loopback on : 将 MCP2515 的工作模式设置为环回模式 


4、发送&接收 CAN 接口数据:

这里使用的是上面安装的 CAN Tools 这个工具里面的 candump 和 cansend 这两个功能。

candump:从 CAN 总线接口接收数据并以十六进制形式打印到标准输出,也可以输出到指定文件。

cansend:往指定的 CAN 总线接口发送指定的数据。


汽车CAN总线逆向及通信初探索(一)

0x08 测试效果

汽车CAN总线逆向及通信初探索(一)


汽车CAN总线逆向及通信初探索(一)


作者留言:鉴于本人的实际水平有限,文章或多或少存在一些问题,若有大佬发现问题请及时与本人沟通修改错误。感谢大家!


汽车CAN总线逆向及通信初探索(一)

原文始发于微信公众号(IOTsec Zone):汽车CAN总线逆向及通信初探索(一)

版权声明:admin 发表于 2022年1月6日 上午9:00。
转载请注明:汽车CAN总线逆向及通信初探索(一) | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...