汽车调校解码原理简介

Posted backahasten

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汽车调校解码原理简介相关的知识,希望对你有一定的参考价值。

(这个文章的受众和我之前文章的受众不太一样,比较偏向介绍)

@作者:backahasten

序言

汽车调校解码是一个汽修届的俗称,总的来说就是改汽车的数据(比如车检,发动机调校,二手车修改里程,解除防盗)或者配钥匙等等。当然,我们不讨论其他问题,只从嵌入式开发者的观察点出发,讨论原理问题。

汽车电脑也是电脑,是电脑就有“硬盘,CPU和内存”,这里“硬盘”部分是最重要的,也就是flash,所有的数据都在flash里,如果可以找到并修改flash中的关键数据,就可以完成特定的功能。这个flash有可能在主芯片内部,也可能在外部,外部flash芯片就是大家俗称的“八爪鱼”,或者“八脚码片”。

所以说,汽车解码调校的原理,就是改flash存储里面的数据,以完成特定的功能。

调校与钥匙解码原理

当大家用二进制代码查看器去看一个读出来的固件的时候,是这个样子的:

技术图片

一般的教程,会让使用者去改几个位置,或者去替换几个字,就完成了调校或者里程数据的修改,这是为什么呢,我们使用ida pro反汇编一下刚才的二进制数据,是这个样子的:

技术图片

或者这个样子:

技术图片

这些平常人看不懂的二进制数据,也就是芯片的代码和数据,芯片能看得懂,如果找准了位置,对数据进行修改,就可以完成了。

这种工作十分繁琐和复杂,我的例子仅仅是s32k的小例子。如果在实际的汽车固件里,由于没有符号表,就没有这么好的可读性了,不会存在变量名函数名,程序的加载基址也需要自己确定,对于没有经验的人来说,这是很困难的。

调校器与钥匙解码器原理

鉴于所有东西都手动分析实在是难以落地,就出现了各种“器”,这一类设备的好处就是专人专干,业务分工。搞逆向的就专门搞逆向,之后把逆向出来的算法封装,搞成设备。做汽修的人就学习使用设备,开一家汽修店,出去接活赚钱。

比如说Ktag,这个用于调校发动机的小东西,就是可以视为逆向算法的一个封装,做这样的一个东西,需要逆向工程师分析出来如下的内容:

  • 芯片的调试接口协议

  • 关键数据或者关键代码的位置和如何替换

  • 固件的校验协议

这三者缺一不可,第一个决定了数据读出来,第二个决定了数据怎么改,第三个决定了数据重打包写回去之后是有效的。

Ktag虽然可以兼容很多车,但是基本都是博世的电脑,专做一个系列对于这种调校器生产厂家来说是特别方便的,因为同一个厂家,所使用的芯片方案,协议方案,甚至开发习惯都是大同小异的,逆向工程师的经验有用武之地,这样便于最快速度完成适配,如果芯片和软件方案不同,逆向工程师又要花时间重新学习另外的架构。

顺便说一句,既然汽车芯片可以被逆向,那么调校器的芯片也可以被逆向,逆向调校器的芯片和比逆向汽车芯片省钱多了,所以现在的大调校器厂,为了保证自己逆向出来的算法不被克隆,关键的数据已经不发放在设备上了,而是要求联网之后,上传处理,避免被仿造。

挑战

挑战还是有的,而且正在涌动,目前处于萌芽阶段。

目前主流的车标芯片,都支持了安全启动和内部安全模块,这两个东西的效果是什么样的呢?

  • 改动固件和数据,芯片会发现,并且直接报错,不运行。

  • 程序读不出去,无法逆向。

  • 协议加密,导致每个汽车的协议都不一样(实际上是秘钥不一样),导致没有通用的方法,哪怕车机型号甚至批次完全一样。

  • 总里程信息放在安全区域,外界只能读取,但是不能修改。

我手里的这个nxp的汽车级别主控芯片s32k就完全支持如上的功能,但是据我了解,很多汽车电子的开发者并没有把这些功能用起来,但是未来可能会。

攻破这些安全措施也不是完全不可能,但是会造成成本的巨大增加。

这里也牵扯到,车企对调校汽车或者解码这两个产业的态度,有的车企可能会很激进,完全禁止,但是有的车企可能不会做。

 

以上是关于汽车调校解码原理简介的主要内容,如果未能解决你的问题,请参考以下文章

调研助力4S店,解码困境谜团

ffmpeg视频解码器

VC++详解Base64编解码原理以及Base64编解码接口实现(附源码)

Go是如何实现protobuf的编解码的: 原理

一文了解视频编解码原理

Android 音视频编解码 -- 视频编码和H264格式原理讲解