一种用于固件的保护方法技术

技术编号:12912400 阅读:115 留言:0更新日期:2016-02-24 17:22
本发明专利技术公开了一种用于固件的保护方法,所述固件存储在硬件设备中,所述保护方法包括:将所述固件的待保护的代码段中的各条指令打乱顺序;将每条指令与实际应当执行的下一条指令之间的偏移量保存到偏移量表中,将偏移量表保存在所述硬件设备的外部;在每条指令末尾添加跳转指令,所述跳转指令用于根据所述偏移量表在指令顺序打乱后的所述代码段内执行从每条指令到实际应当执行的下一条指令的跳转。通过本发明专利技术的用于固件的保护方法,可以保护固件中的关键代码段,增加破解固件的难度,从而提高固件的安全性。

【技术实现步骤摘要】

本专利技术涉及软件保护领域,特别涉及。
技术介绍
固件(Firmware,固件程序)是固化在硬件设备中的软件程序,一般由硬件设备的开发商提供,在硬件设备出厂前下载到硬件中。固件一般存储于硬件设备中的电可擦除只读存储器 EEPROM(Electrically Programmable ROM)或 FLASH 芯片中。固件是担任着硬件设备系统最基础最底层工作的软件。在硬件设备中,固件就是硬件设备的灵魂。一些硬件设备除了固件以外没有存储其他软件,因此固件也就决定着硬件设备的功能及性能,其重要性不言而喻。为保护固件安全,有些硬件设备开发商会采用安全芯片,将固件程序存储在安全芯片中,通过高强度的安全芯片来保护技术秘密和数据安全。但是,由于安全芯片成本较高,并且在使用上相对来说较为复杂(例如加密等操作)等原因,目前安全芯片更多地应用在软件保护行业(如加密锁产品)或其他对技术保密有要求的安全产品上,而市场上大部分硬件设备基本上采用的都还是非安全芯片。—般来讲,对于固件程序,通常可以通过专门的固件读取工具或一些硬件设备来读取固件的二进制代码,之后再反编译成汇编语言,很容易就能获得固件的源码,这样一来,采用非安全芯片存储的固件基本上就没有安全性可言。
技术实现思路
有鉴于此,本专利技术提供了,以解决目前用单片机或ARM等非安全芯片存储的固件的安全问题。在本专利技术提供的用于固件的保护方法中,所述固件存储在硬件设备中,所述保护方法包括:将所述固件的待保护的代码段中的各条指令打乱顺序;将每条指令与实际应当执行的下一条指令之间的偏移量保存到偏移量表中,将偏移量表保存在所述硬件设备的外部;在每条指令末尾添加跳转指令,所述跳转指令用于根据所述偏移量表在指令顺序打乱后的所述代码段内执行从每条指令到实际应当执行的下一条指令的跳转。作为优选,所述偏移量表还包括入口点信息,所述入口点信息为关联于指令顺序打乱后的所述代码段中实际应当首先执行的指令的偏移量。作为优选,在紧接所述代码段之前添加入口点跳转指令,其用于根据偏移量表中的所述入口点信息跳转到所述代码段中实际应当首先执行的指令。作为优选,预先生成所述偏移量表并根据所述偏移量表将固件的所述待保护的代码段中的各条指令打乱顺序。作为优选,在将所述待保护的代码段中的各条指令打乱顺序之后生成所述偏移量表。作为优选,根据自定义算法或随机乱序算法自动将所述各条指令打乱顺序。作为优选,根据用户指令将所述各条指令打乱顺序。作为优选,所述偏移量表通过文件的方式存储或通过变量的方式记录。作为优选,将所述偏移量表经过加密后保存在所述硬件设备外部。作为优选,所述偏移量表中还包括指令顺序打乱后的所述代码段中各指令的实际执行顺序信息。本专利技术提供的固件保护方法,通过将固件待保护代码段中的指令打乱顺序,给各指令增加跳转指令,并将其偏移量等信息存储在硬件设备外部,运行时从外部载入偏移量表,根据偏移量表中的偏移量找到正确的指令执行顺序并执行指令,因此,即使非法破解者绕过硬件设备芯片的内存保护获取到存储在芯片内部的固件的二进制代码,由于受保护代码段中的指令已经完全无序打乱,在没有偏移量表的情况下,即使翻译出指令代码,也无法获得指令正确的执行顺序,由此可以增加破解的难度,保护关键代码,提高安全性。【附图说明】图1为本专利技术的用于固件的保护方法的第一实施例的流程图;图2为本专利技术的用于固件的保护方法的第二实施例的流程图;图3为本专利技术的用于固件的保护方法的第三实施例的流程图。【具体实施方式】为使本专利技术的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本专利技术进一步详细说明。图1为本专利技术的用于固件的保护方法的第一实施例的流程图。其中,固件存储在硬件设备的EEPROM中或者FLASH芯片中。如图1所示,本实施例的用于固件的保护方法包括如下步骤:首先,将固件的待保护的代码段中的各条指令打乱顺序;其次,将已打乱指令顺序的代码段中的每条指令与实际应当执行的下一条指令之间的偏移量保存到偏移量表中,并将偏移量表保存在硬件设备的外部;最后,在每条指令末尾添加跳转指令,该跳转指令用于根据偏移量表在指令顺序打乱的代码段内执行指令间的正确跳转。例如,当固件中的待保护的代码段按正常执行顺序包括指令1、指令2、指令3和指令4时,将汇编后的指令1-4打乱顺序,假定打乱后的指令顺序为指令1、指令4、指令3和指令2。打乱指令顺序的步骤可以由计算机通过自定义算法或随机乱序算法来自动执行,或者计算机也可以根据用户指令进行指定方式的顺序打乱。将上述指令1、指令4、指令3和指令2中每条指令语句与实际应当执行的下一条指令语句之间的偏移量进行保存。例如从指令1跳转到指令2的偏移量记作A,从指令2跳转到指令3的偏移量记作B,从指令3跳转到指令4的偏移量记作C。将与各指令对应的偏移量以文件的方式存储为偏移量表或以变量的方式记录为偏移量表,并将偏移量表存储在存储了上述固件的硬件设备之外的其他位置,例如存储在客户端软件中或者服务器上等,但存储的位置不限于此,还可以是移动存储设备等。当需要提高安全等级时,还可以将偏移量表加密后再进行存储。在以上过程中,待保护的代码段的指令正常执行顺序是默认知晓的,代码段中的指令在打乱顺序后其实际的执行顺序也默认知晓。之后,在上述指令1、指令4、指令3和指令2中每条指令末尾添加跳转指令,跳转指令用于从偏移量表中获得从当前指令跳转到实际应当执行的下一条指令的偏移量并由此跳转到该下一条指令处。跳转指令代码可以为:Jmp PC+0FFSET,其中PC为程序执行的当前位置,OFFSET为偏移量表中的具体偏移量。固件程序运行时,从硬件设备外部载入上述偏移量表并保存到硬件设备内存的某个固定位置,运行到受保护代码段时,根据偏移量表中记录的与每条指令末尾的跳转指令对应当前第1页1 2 本文档来自技高网...

【技术保护点】
一种用于固件的保护方法,所述固件存储在硬件设备中,所述保护方法包括:将所述固件的待保护的代码段中的各条指令打乱顺序;将每条指令与实际应当执行的下一条指令之间的偏移量保存到偏移量表中,将偏移量表保存在所述硬件设备的外部;在每条指令末尾添加跳转指令,所述跳转指令用于根据所述偏移量表在指令顺序打乱后的所述代码段内执行从每条指令到实际应当执行的下一条指令的跳转。

【技术特征摘要】

【专利技术属性】
技术研发人员:吴晓龙孙吉平
申请(专利权)人:北京深思数盾科技有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1