欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

如何控制一辆福特Fusion概念车

来源:本站整理 作者:佚名 时间:2017-08-20 TAG: 我要投稿


近期,我跟一位在Voyage公司上班的朋友在尝试对一辆福特Fusion汽车的A / C系统实现编程控制。Voyage是汽车自动驾驶领域内的一家专业公司,他们想要实现的终极目标是:对于世界上的任何一个人,他都可以随时随地召唤一辆汽车直接开到他的家门口,并将他安全地送达到目的地,而且价格也非常便宜。对于Voyage来说,他们将不可避免地给乘客提供汽车关键功能的控制权,因为总有一天开车的将不再是我们人类,而这一天马上就要到来了。
CAN总线介绍
CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。
一台现代化汽车拥有大量的控制系统,这些控制系统的作用与Web应用中各种微服务的作用是非常相似的。对于一台电动汽车来说,它拥有安全气囊、自动刹车系统、电动助力转向系统、音响系统、电动车门、后视镜调整系统、以及电池与充电系统等等。这些系统需要相互通信并获取其他系统的运行状态。在1983年,德国BOSCH公司便开发CAN总线来解决这个复杂的问题。
你可以把CAN总线看成一个简单的网络,车上的任何系统都可以监听系统并发送指令。它以巧妙的方式整合了所有这些复杂的组件,并给我们的汽车提供各种各样的现代化功能。下图为一辆1988年款的宝马8系,这也是全球第一台采用了CAN总线的汽车:

自动驾驶车辆以及和CAN总线
近些年来,随着自动驾驶汽车的快速发展,CAN总线的概念也得到了普及。为什么呢?因为自动驾驶汽车领域内的绝大多数公司都不会从零开始设计和制造自家的汽车,而且他们还需要想办法通过编程的方式来控制汽车。
通过对汽车CAN总线进行逆向工程分析,工程师将可以通过软件来向汽车发送控制命令。比如说,最常用的控制命令有旋转方向盘、加速(踩油门)和制动(踩刹车)。使用 LIDAR传感器的汽车就可以像超人一样俯揽这个世界,然后,汽车内置计算机便可以决定是否向CAN总线发出诸如,加速、刹车指令。
当然并不是每一辆汽车都可以进行自动驾驶,Voyage之所以选择福特Fusion概念车,上述内容便是原因之一。LiDAR作为激光雷达测距传感器,感应距离可以达到200 米。下图为LIDAR技术的实例图:

破解CAN总线
在破解福特Fusion概念车CAN总线之前,我打开了一本书(汽车黑客手册),然后开始工作。准备工作完成之后,打开本书的第二章,看这三项内容,CAN总线协议、帧结构以及CAN总线。
CAN总线
CAN总线自1994年诞生以来以来一直是美国汽车和轻型卡车的标准,但到2008年(2001年为欧洲车辆年)之前,它一直不是强制性的协议。
CAN总线通过CAN收发器接口芯片82C250的两个输出端CANH和CANL与物理总线相连,而CANH端的状态只能是高电平或悬浮状态,CANL端只能是低电平或悬浮状态。这就保证不会在出现在RS-485网络中的现象,即当系统有错误,出现多节点同时向总线发送数据时,导致总线呈现短路,从而损坏某些节点的现象。
也就是说CAN使用差分信号,这意味着当信号进入系统时,CAN总线信号会在一条线路曾上升电压趋势,并利用另一条线路维持平衡。分信号用于必须具有容错性环境,如汽车制造系统。
还有一点需要注意的是,CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响,从而保证不会出现像在网络中,因个别节点出现问题,使得总线处于“死锁”状态。而且,CAN具有的完善的通信协议可由CAN控制器芯片及其接口芯片来实现,从而大大降低系统开发难度,缩短了开发周期。
下图显示的是示波器中观察到的原始CAN总线信号:
通过CAN总线传输的数据包并不是标准的。 每个CAN总线包都包含四个关键要素:
1.仲裁ID(Arbitration ID):仲裁ID是一种广播消息,代表的是需要进行数据通信的设备ID,不过一台设备可以发送多个仲裁ID。如果两个CAN数据包同时在总线上进行发送,那么仲裁ID较小的那个数据包将优先传输;
2.CAN总线标识符扩展(IDE):该位始终为标准CAN总线协议,这部分数据永远为o。
3.数据长度代码(DLC):数据大小,范围是0到8个字节。
4.数据取决于本身,标准CAN总线数据包携带的数据最多可达8字节,但有些系统可通过填充数据包强制达到8字节。
标准CAN总线数据包格式

CAN框架
为了打开和关闭A / C系统,我们需要找到正确的CAN总线(一辆汽车可以有多个)。福特Fusion概念车至少拥有4条总线(厂商记录),
其中3条以500kbps(高速CAN)运行,其中一条以125kbps(中速CAN)运行。
OBD-II端口暴露了其中的两条总线:HS1和HS2,但这台汽车上这两条总线有防火墙的保护,因此不允许我们向其发送欺骗指令。在Alan(Voyage员工)的帮助下,我们解决了这个问题并成功拿到了HS1、HS2、HS3和MS的访问权。OBD-II端口后面有一个名叫Gateway Module的设备,所有的总线最终都要将数据传输到这个设备中,这就是我们的解决方案。
由于由于A / C系统可以直接与汽车多媒体接口(SYNC)进行对接,并利用计算机可修改,所以我们直接访问MS总线。
但是我们如何让我们的计算机能够读写CAN数据包? 答案是SocketCAN。这是开源CAN驱动程序,这是一个由德国大众公司向Linux内核基金会研发的开源CAN驱动和网络栈协议集。我们可以把车辆的GND、MSCANH、MSCANL3条线连接到Kvaser Leaf Light HSv2(亚马逊上卖300美元)和CANable(Tindie上卖25美元)设备上,在另一端,使用安装有较新版本Linux系统电脑相连,最后将CAN总线作为网络设备识别加载:

[1] [2] [3] [4] [5]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载