×

IC解密知识:Flash型单片机破解/解密技术分析

    使用带有密码的加密方式,   通过研究发现。看似给破解代码留有了可能性,但因为接受和验证密码都需要由用户程序完成,只要用户程序设计的可靠,这种可能性是很小的。

    单片机加密的技术已经有了较大的变化。这里我以HCS12系列单片机为例,   随着Flash型单片机的普及。介绍一种典型的加解密机制,并着重讨论使用密码加解密的方法以及相应的用户接口程序设计思路。厂商利用单片机进行产品开发时,都会关心其代码和数据的保密性。考虑到用户在编写和调试代码时所付出的时间和精力,代码的成本是不言而喻的

    代码是交给芯片制造商制成掩膜ROM有两种加密的机制,   早期的单片机。一是彻底破坏读取代码的功能,无论是开发者还是使用者都永远无法读取其中的内容。从安全上来说,这种方式很彻底,但是已经无法检查ROM中的代码了另一种方法是不公开读取方法,厂商仍可以读取代码。这种方式留有检查代码的可能性,但是并不能算是一种真正的加密”被破解的可能性是存在客观地讲,一方面希望加密很彻底,而另外一方面又希望留有检查代码的可能,这是相互矛盾的要求。

    对此作了一些研究,   Freescal公司的HCS12单片机采用的加解密思路有一定的典型性。现以MC9S12DP256单片机为例,介绍Flash型单片机的加密解密方法。

    BDM程序调试接口

    芯片通过一个引脚与编程器进行通信。HCS12系列单片机中,   Freescal公司的很多单片机都借用一种被称为后台调试模式(BackgroundDebugModeBDM作为下载和调试程序的接口。BDM一种单线调试模式。内部都置有标准的BDM调试模块。

    该模块有三种作用:

    1对内部存储器的读写。将用户程序下载到目标芯片中或是将存储器中的数据读出。

    2利用BDM模块可以读写内存和CPU内部寄存器。

    3对单片机工作方式和资源进行配置。部分涉及到单片机工作方式和资源配置的寄存器只能在特殊模式下由编程器发送BDM命令来修改。

    使用BDM硬件命令可以将FlashROM中的程序读出或将新的程序写入。BDM命令可以由独立的硬件系统来送出,   HCS12单片机未加密的状态下。一般称此类系统为BDM编程器。

    实现BDM编程器的功能。使用BDM接口,BDM编程器的时序协议是公开的任何人都可以根据协议设计硬件、编写程序。编程器可以很容易的访问到目标系统的存储器,这给程序调试和烧写带来了很大的方便,然而,便利的对外接口也给盗用者留下了可乘之机。

    先前的HC12系列单片机的D家族中,带有BDM模块的单片机中引入数据保密机制并非HCS12系列的首创。就已经引入了屏蔽LockoutBDM读写的机制,可惜,该机制在单片机的扩展工作模式下存在着漏洞。相比之下,HCS12系列单片机中的保密机制更加完善,无论在BDM模式下或是扩展模式下,都可以屏蔽外部对FlashROM读写。

    两种加密解密方法

    加密可以分成两种方法:完全加密和使用密码的加密。这两种加密的方法根据用户的需求,   HCS12系列单片机中。使用的场合也有所不同。

    完全加密

    就是将芯片彻底的保护起来,就是所谓完全加密。屏蔽对芯片的所有读操作。MC9S12DP256单片机中,加密是通过对某一Flash单元($FF0F编程来实现的加密后的芯片,BDM编程器对Flash读操作就被禁止了采用完全加密,读取ROM代码的可能性就不存在这是一种最为“安全”加密方法。如果用户想修改ROM内容,唯一的办法就是将Flash内容全部擦除,这一操作可以通过BDM编程器来完成。使用BDM编程器擦除FlashROM和EEPROM过程与在普通模式下对片内的FlashROM擦除操作过程基本一样,区别是对寄存器或是存储单元的读写要改由BDM命令来实现。通过BDM编程器将一连串完整的擦除指令序列送给单片机,就可将FlashROM和EEPROM内容全部擦除了全擦除操作完成后,BDM编程器将系统复位,系统会自动检查全擦除操作是否成功。如果成功,BDM状态寄存器的UNSEC位会自动置“1系统进入解密状态。由于系统靠检查FlashROM和EEPROM否清空来决定系统是否保持加密状态,所以,如果用户程序偶然将FlashROM和EEPROM内容全部擦除,那么系统也将自动解密。

    使用密码的加密

    用户可以采用一种带有密码的加密方式。解密时,为了留有读取ROM代码的可能。用户只要给出正确的密码(称为“后门密码”就可以读写ROM而不破坏其内容了使用这种方法,用户需要在加密之前,设定4个字长的密码,并将其存放在Flash中,MC9S12DP256存放密码的Flash地址是从$FF00$FF07设定的密码可以随用户程序一起下载到芯片中。解密时,接受用户输入的密码并验证的工作只能由一个用户接口程序来完成的不能使用BDM编程器。接口的方式没有限制,如SCISPIIICMSCA N等等,只要用户能够将正确的密码输入,任何一种接口方式都是可以的最为典型的接口是串口。