逆向CAN总线
2017-05-01 23:20
218 查看
逆向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
如果发送这个命令之后,车门打开了,我们成功了。
相关文章推荐
- ios逆向--theos %c的用法
- Android逆向初步
- 逆向经验1
- Android逆向工程之反编译注入代码
- Android逆向之旅---反编译利器Apktool和Jadx源码分析以及错误纠正
- 《 iOS 应用逆向工程》作者沙梓社专访:运用逆向工程思维来优化自己的产品
- Android逆向实例笔记—在so里对游戏的修改
- android逆向和调试中内存断点的设置
- hdu 4496 并查集 逆向 并查集删边
- 【原创工具】Android逆向注入注册系统
- 逆向 iOS HomeKit 接口(非Accessory端)
- 简单谈谈mybatis逆向工程
- Android逆向之旅---基于对so中的section加密技术实现so加固
- IDF实验室-简单的ELF逆向 writeup
- Mybatis-逆向工程
- 【JAVA - SSM】之MyBatis逆向工程的使用
- 语音学习笔记4------matlab实现逆向生成音频格式的信号audiowrite()函数
- 受宠若惊,听说黑客花钱逆向我的代码:无锁ioking
- 编写函数void change(char *a,char *b,char*c)。 函数功能是首先把b指向的字符串逆向存放,然后将a指向的字符串和b指向的字符串按排列顺序交叉合并到c指向的数组中,两个字
- Android逆向基础笔记—初识逆向