汽车调校解码原理简介
Posted backahasten
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汽车调校解码原理简介相关的知识,希望对你有一定的参考价值。
汽车调校解码是一个汽修届的俗称,总的来说就是改汽车的数据(比如车检,发动机调校,二手车修改里程,解除防盗)或者配钥匙等等。当然,我们不讨论其他问题,只从嵌入式开发者的观察点出发,讨论原理问题。
汽车电脑也是电脑,是电脑就有“硬盘,CPU和内存”,这里“硬盘”部分是最重要的,也就是flash,所有的数据都在flash里,如果可以找到并修改flash中的关键数据,就可以完成特定的功能。这个flash有可能在主芯片内部,也可能在外部,外部flash芯片就是大家俗称的“八爪鱼”,或者“八脚码片”。
所以说,汽车解码调校的原理,就是改flash存储里面的数据,以完成特定的功能。
调校与钥匙解码原理
当大家用二进制代码查看器去看一个读出来的固件的时候,是这个样子的:
一般的教程,会让使用者去改几个位置,或者去替换几个字,就完成了调校或者里程数据的修改,这是为什么呢,我们使用ida pro反汇编一下刚才的二进制数据,是这个样子的:
或者这个样子:
这些平常人看不懂的二进制数据,也就是芯片的代码和数据,芯片能看得懂,如果找准了位置,对数据进行修改,就可以完成了。
这种工作十分繁琐和复杂,我的例子仅仅是s32k的小例子。如果在实际的汽车固件里,由于没有符号表,就没有这么好的可读性了,不会存在变量名函数名,程序的加载基址也需要自己确定,对于没有经验的人来说,这是很困难的。
调校器与钥匙解码器原理
鉴于所有东西都手动分析实在是难以落地,就出现了各种“器”,这一类设备的好处就是专人专干,业务分工。搞逆向的就专门搞逆向,之后把逆向出来的算法封装,搞成设备。做汽修的人就学习使用设备,开一家汽修店,出去接活赚钱。
比如说Ktag,这个用于调校发动机的小东西,就是可以视为逆向算法的一个封装,做这样的一个东西,需要逆向工程师分析出来如下的内容:
-
芯片的调试接口协议
-
关键数据或者关键代码的位置和如何替换
-
固件的校验协议
这三者缺一不可,第一个决定了数据读出来,第二个决定了数据怎么改,第三个决定了数据重打包写回去之后是有效的。
Ktag虽然可以兼容很多车,但是基本都是博世的电脑,专做一个系列对于这种调校器生产厂家来说是特别方便的,因为同一个厂家,所使用的芯片方案,协议方案,甚至开发习惯都是大同小异的,逆向工程师的经验有用武之地,这样便于最快速度完成适配,如果芯片和软件方案不同,逆向工程师又要花时间重新学习另外的架构。
顺便说一句,既然汽车芯片可以被逆向,那么调校器的芯片也可以被逆向,逆向调校器的芯片和比逆向汽车芯片省钱多了,所以现在的大调校器厂,为了保证自己逆向出来的算法不被克隆,关键的数据已经不发放在设备上了,而是要求联网之后,上传处理,避免被仿造。
挑战
挑战还是有的,而且正在涌动,目前处于萌芽阶段。
目前主流的车标芯片,都支持了安全启动和内部安全模块,这两个东西的效果是什么样的呢?
-
改动固件和数据,芯片会发现,并且直接报错,不运行。
-
程序读不出去,无法逆向。
-
协议加密,导致每个汽车的协议都不一样(实际上是秘钥不一样),导致没有通用的方法,哪怕车机型号甚至批次完全一样。
-
总里程信息放在安全区域,外界只能读取,但是不能修改。
我手里的这个nxp的汽车级别主控芯片s32k就完全支持如上的功能,但是据我了解,很多汽车电子的开发者并没有把这些功能用起来,但是未来可能会。
攻破这些安全措施也不是完全不可能,但是会造成成本的巨大增加。
以上是关于汽车调校解码原理简介的主要内容,如果未能解决你的问题,请参考以下文章