逆向CAN总线

来源:互联网 发布:淘宝助理手机详情 编辑:程序博客网 时间:2024/05/22 00:21
    

逆向CAN总线

             如何去逆向工程CAN总线?首先能够读CAN数据包,然后区分数据包是控制什么的,这就是说我们不需要访问标准的诊断CAN数据包,因为这些是仅仅只读的数据,我们感兴趣的访问其他所有的在CAN总线数据包。其他的非诊断数据包才是被用来执行相关动作的。

         我们花了很长时间,抓取这些数据包中的信息,这些信息是关键的帮助我们理解汽车的行为。

1      找出CAN总线

      在我们逆向CAN总线之前,我们需要先找出CAN总线在哪里?如果你曾经了解过OBD2端口,你的车得引脚图会告诉你CAN总线在哪里,如果你没有接触过OBD2端口或者你正在寻找隐蔽的CAN信号,试试这些方法:

  •  寻找双绞线,CAN线典型的是两条导线绞在一起。
  •  使用万用表检查2.5V基线电压(这是困难去区分,因为总线常常有噪声)。
  •  使用万用表测量电阻,CAN总线在总线的两端使用了一个120欧姆的电阻,于是双绞线的阻抗应该是60欧姆。
  •  使用一个双通道的示波器,两个信号相减,应该会得到一个稳定的信号,因为CAN总线采用的差分信号。

 

注意:如果汽车关闭,CAN总线通常是静默状态,但是如果插入车钥匙,打开车门,这些操作会唤醒汽车,同信号产生。

使用can-utils逆向CAN总线通信

  首先,需要知道总线通信的类型,我们经常想要去识别某些信号或者某些组件的通信方式。例如:汽车怎么解锁,动力系统是怎么样工作的。为了做这些,定位这些目标组件使用的总线,为了识别这些目的,逆向总线中的这些数据包。

为了监听总线活动,需要一个设备能监听并且能发送CAN数据包。市场上有成吨的这样设备。最便宜的OBD2设备,只需要几十块钱,但是这些设备嗅探速度很慢,还经常丢失数据。最好的方式尽可能拥有一个开源的设备,因为它们能兼容大部分的软件工具,所以开源硬件和软件是一个理想的选择。我们会使用candump,来自can-utils工具套件

 

l使用candump

Candump不会帮你解码数据,这个工作只能我们去做。下图使用slcan0作为嗅探工具。

第一列是嗅探设备,第二列是ID,第三列是CAN数据包的大小,第四列是数据。现在已经抓捕了一些数据包,但是不是容易的去读。我们使用滤波工具帮助我们识别分析目标数据包。


分类总线中的数据

Cansniffer命令行工具通过ID分类数据包,同时高亮改变的字节。例如:下图显示在slcan0设备运行cansniffer 。

使用 –c 着色改变的字节

$ cansniffer –c slcan0

 

 

Cansniffer 工具也能移开重复的没改变的数据包,因此可以减少需要观察的数据量。

l滤波显示数据包

Cansniffer有一个优点是当数据在终端显示的时候,可以键盘输入滤波结果。例如:仅仅想看IDs 301和308的数据包,输入:

-000000

+301

+308

输入-000000关闭所有的数据包,输入+301和+308滤出其玩的IDs 301和308

 

 

 使用记录和回放

一旦使用cansniffer或者其他的工具识别某些关注的数据包,下一步是记录核和回放数据包,便于分析。我们使用can-utils工具

Can-utils工具使用一个简单ASCII格式,用text编辑器显示,大部分的工具支持这个格式记录和回放。例如:我们能记录使用candump,使用canplayer回放记录。

3发现车门解锁控制

CAN总线中有很多的噪声,就是使用一个好的嗅探工具,发现单一bit的改变还是很困难的。但是有一些通用的方法识别单一的数据包。

 

1.      点击记录

2.      执行物理动作,比如关车门

3.      停止记录

4.      点击回放

5.      看是否这个动作重复。例如:车门是否解锁了。

如果按下回放,车门没有解锁,这时候可能发生了几个错误。在记录的时候有可能错过了,在尝试一次记录和执行动作,如果还不能发现这个动作,这个消息很可能硬线连接到了物理的锁按钮,通常是驾驶门,尝试解锁乘客那边的车门。开门的报文可能是在其他的CAN总线上,我们需要去发现其他的CAN总线网络。

4使用can-utils发现解锁车门控制

使用candump记录和使用canplayer回放日志。直到你发现了一个数据包,然后使用cansend验证哪一个字节或者bit控制目标操作。例如:

 

slcan0 300 [8]00 00 84 00 00 0F 00 00

现在的工作就是编辑每一个字节核回访这个命令,直到你解锁车门。

 

我们可以验证我们的发现用 cansend:

 

$ cansend slcan0300#00008400000F0000

如果发送这个命令之后,车门打开了,我们成功了。

 

 

 


 


0 0
原创粉丝点击