CN108460254B - 固件保护方法及装置 - Google Patents
固件保护方法及装置 Download PDFInfo
- Publication number
- CN108460254B CN108460254B CN201810205361.8A CN201810205361A CN108460254B CN 108460254 B CN108460254 B CN 108460254B CN 201810205361 A CN201810205361 A CN 201810205361A CN 108460254 B CN108460254 B CN 108460254B
- Authority
- CN
- China
- Prior art keywords
- file
- protected
- basic information
- protection
- target
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 44
- 230000006870 function Effects 0.000 claims description 41
- 238000004458 analytical method Methods 0.000 claims description 3
- 230000011218 segmentation Effects 0.000 claims description 2
- 238000005516 engineering process Methods 0.000 description 15
- 238000010586 diagram Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 230000002093 peripheral effect Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000005336 cracking Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供一种固件保护方法及装置。在一实施例中,所述方法包括:识别读取到的待保护命令行参数是否有只编译不链接参数;若存在所述只编译不链接参数为所述待保护命令行参数设置第一状态标签;若带有所述第一状态标签的所述待保护命令行参数的参数中存在源文件路径,则将所述带有所述第一状态标签的所述待保护命令行参数中的待保护的源代码文件的全路径存储至指定存储空间中;使用安全编译器对所述指定存储空间中的全路径中的待保护的源代码文件进行编辑以生成保护文件;使用目标编译器对所述保护文件进行编译以得到目标文件。
Description
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种固件保护方法及装置。
背景技术
随着反编译技术的发展,基于ARM或者X86等处理器编译的程序很容易被逆向。因此也针对代码的保护产生了一些保护措施,但是在一些条件下并不能满足需求,因此发明新的代码保护方法也变得越发的重要。
发明内容
有鉴于此,本发明实施例的目的在于提供一种固件保护方法及装置。
本发明实施例提供的一种固件保护方法,所述固件保护方法包括:
识别读取到的待保护命令行参数是否有只编译不链接参数;
若存在所述只编译不链接参数为所述待保护命令行参数设置第一状态标签;
若带有所述第一状态标签的所述待保护命令行参数的参数中存在源文件路径,则将所述带有所述第一状态标签的所述待保护命令行参数中的待保护的源代码文件的全路径存储至指定存储空间中;
使用安全编译器对所述指定存储空间中的全路径中的待保护的源代码文件进行编辑以生成保护文件;
使用目标编译器对所述保护文件进行编译以得到目标文件。
本发明实施例还提供一种固件保护装置,所述固件保护装置包括:
识别模块,用于识别读取到的待保护命令行参数是否有只编译不链接参数;
设置模块,用于若存在所述只编译不链接参数为所述待保护命令行参数设置第一状态标签;
存储模块,用于若带有所述第一状态标签的所述待保护命令行参数的参数中存在源文件路径,则将所述带有所述第一状态标签的所述待保护命令行参数中的待保护的源代码文件的全路径存储至指定存储空间中;
第一编译模块,用于使用安全编译器对所述指定存储空间中的全路径中的待保护的源代码文件进行编辑以生成保护文件;
第二编译模块,用于使用目标编译器对所述保护文件进行编译以得到目标文件。
与现有技术相比,本发明实施例提供的固件保护方法及装置,通过将符合条件的待保护命令行参数贴上第一状态标签,以有效地进行后续的保护操作;将带有所述第一状态标签的所述待保护命令行参数使用安全编译器进行编辑保护,然后再进一步地使用目标编辑器编译得到目标文件,以实现代码的保护。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明实施例提供的电子终端的方框示意图。
图2为本发明实施例提供的固件保护方法的流程图。
图3为本发明实施例提供的固件保护方法的步骤S104的详细流程图。
图4为本发明实施例提供的固件保护方法的步骤S1044的详细流程图。
图5为本发明另一实施例提供的固件保护方法的流程图。
图6为本发明实施例提供的固件保护装置的功能模块示意图。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
如图1所示,是电子终端100的方框示意图。所述电子终端100包括固件保护装置110、存储器111、存储控制器112、处理器113、外设接口114、输入输出单元115、显示单元116。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对电子终端100的结构造成限定。例如,电子终端100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
所述存储器111、存储控制器112、处理器113、外设接口114、输入输出单元115及显示单元116各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述固件保护装置110包括至少一个可以软件或固件(Firmware)的形式存储于所述存储器111中或固化在所述电子终端100的操作系统(Operating System,OS)中的软件功能模块。所述处理器113用于执行存储器中存储的可执行模块,例如所述固件保护装置110包括的软件功能模块或计算机程序。
其中,所述存储器111可以是,但不限于,随机存取存储器(Random AccessMemory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(ProgrammableRead-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-OnlyMemory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-OnlyMemory,EEPROM)等。其中,存储器111用于存储程序,所述处理器113在接收到执行指令后,执行所述程序,本发明实施例任一实施例揭示的过程定义的电子终端100所执行的方法可以应用于处理器113中,或者由处理器113实现。
本实施例中,所述电子终端100中安装安卓(Android)操作系统。所述Android操作系统存储在所述存储器111中。其中操作系统可包括各种用于管理系统任务(例如内存管理、存储设备控制、电源管理等)的软件组件和/或驱动。
所述处理器113可能是一种集成电路芯片,具有信号的处理能力。上述的处理器113可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述外设接口114将各种输入/输入装置耦合至处理器113以及存储器111。在一些实施例中,外设接口114,处理器113以及存储控制器112可以在单个芯片中实现。在其他一些实例中,他们可以分别由独立的芯片实现。
所述输入输出单元115用于提供给用户输入数据。所述输入输出单元115可以是,但不限于,鼠标和键盘等。
所述显示单元116在所述电子终端100与用户之间提供一个交互界面(例如用户操作界面)或用于显示图像数据给用户参考。在本实施例中,所述显示单元可以是液晶显示器或触控显示器。若为触控显示器,其可为支持单点和多点触控操作的电容式触控屏或电阻式触控屏等。支持单点和多点触控操作是指触控显示器能感应到来自该触控显示器上一个或多个位置处同时产生的触控操作,并将该感应到的触控操作交由处理器进行计算和处理。
目前在PC端或者移动端平台(Android/iOS)已经发展出了较多的代码保护技术,主要的保护技术主要分为两种:一种是“壳”保护技术,一种是代码混淆保护技术。
传统PC端或者移动端平台的“壳”保护技术通常是对编译器编译好的二进制程序进行压缩、加密等保护,当程序运行时通过加载器对压缩、加密过的数据进行还原处理,为了防止被静态分析和动态调试,壳的加载器部分通常会加上大量的花指令,反调试代码。
传统壳保护技术的优点是可以对被保护文件一定程度优化体积大小,对程序的执行效率影响较小,但是缺点是由于程序加载到内存中会还原出原始程序,因此安全保护强度低,容易被破解,且兼容性较差。
传统PC端或者移动端平台的代码混淆技术通常是在编译器层面,通过修改高级语言源代码、中间层语言等方式实现对代码的保护,这种保护方式与壳不同之处在于,壳保护是对已经通过编译器编译好的二进制文件进行保护,壳与被保护的代码是有明显的界限的,而代码混淆技术是将被保护代码与保护代码融为一体,两者合二为一,不存在明显的界限,因此也无法对其进行脱壳。代码混淆的优点是代码保护强度高,逆向分析难度大,被保护程序不易被破解,兼容性好;但缺点是会影响原程序的执行效率。
当前IoT(Internet of Things,物联网)领域采用的硬件架构与型号繁多,包括8051,ARM,MIPS,AVR等,不同体系结构的硬件所采用的机器指令集也不相同,不同的硬件所使用的操作系统也不相同,包括linux、rtos、vxworks等,有些硬件甚至没有操作系统。现有的代码保护技术主要是针对x86/x86_64/arm平台,其支持的操作系统平台也主要是windows/linux/android/iOS,对于除了上述四种操作系统之外的应用程序则无法进行保护。由于嵌入式平台的固件采用专有的编译器和二进制文件格式,因此,传统的加壳技术和代码混淆技术无法保护嵌入式固件。
基于上述问题,本申请通过以下几个实施例有效解决上述问题,具体描述如下。
本申请中的方法实施例和装置实施例可以用于对内嵌入物联网系统中的固件进行保护。本申请实施例中的运行环境可以主要分为两大组件,一个是中间层组件,一个是安全编译器组件。中间层组件主要用于接管和处理目标编译器的编译过程。在一种实施方式中,所述中间层组件可包括目标编译器、链接器等组件。
所述中间层组件可以用于将原始的高级语言C/C++直接编译为二进制格式的目标.o,最终把编译出的多个目标文件.o通过链接器链接成二进制格式的可执行文件。
本申请实施例中的中间层组件的作用是,接管目标编译器的编译过程,当用户调用编译命令对源代码进行编译时,中间层组件拦截到此请求,将源代码通过目标编译器-s命令编译成特定目标机器的汇编语言格式,然后调用安全编译器组件对汇编文件.s进行代码保护处理,最后调用目标编译器将被保护的汇编文件编译成二进制目标文件.o,最终再由链接器将多个目标文件.o链接在一起形成最终的二进制格式的可执行文件,该可执行文件即是被本方案安全保护后的固件文件。
请参阅图2,是本发明实施例提供的应用于图1所示的电子终端的固件保护方法的流程图。下面将对图2所示的具体流程进行详细阐述。
步骤S101,识别读取到的待保护命令行参数是否有只编译不链接参数。
本实施例中的方法可用于对内嵌系统中的固件进行保护。
本实施例中,可以先将IoT的原始的交叉编译工具链中的编译器(gcc/g++)改名为编译器gcc-real和编译器g++-real进行备份,以用于后续对汇编代码进行保护后再调用目标编译器进行编译。在本实施例中,以所述目标编译器为编译器gcc-real和编译器g++-real进行描述。然后将预先准备好的安全编译器桩代码(Stub)程序复制到编译器目录,分别替换原始的编译器gcc和编译器g++。
本实施例中步骤S101由所述安全编译器执行。
在一种实施方式中,在步骤S101之前先通过目标编译器将源代码编译成汇编代码。
在一种实施方式中,步骤S101中也可以是判断待保护命令行参数中是否包含有-c,其中,-c表示只执行到编译,输出编译文件。本实施方式中,所述只编译不链接参数为-c参数。
步骤S102,若存在所述只编译不链接参数为所述待保护命令行参数设置第一状态标签。
在一个实例中,若所述待保护命令行参数中是否包含有-c,则记录所述待保护命令行参数为COMPILE_SOURCE。下面以所述第一状态标签为“COMPILE_SOURCE”进行描述。
步骤S103,若带有所述第一状态标签的所述待保护命令行参数的参数中存在源文件路径,则将所述带有所述第一状态标签的所述待保护命令行参数中的待保护的源代码文件的全路径存储至指定存储空间中。
在一种实施方式中,如果待保护命令行参数的状态是COMPILE_SOURCE,且剩余参数中包含.c/.cpp/.cxx等有效的C/C++源代码文件路径,如果存在则将所述待保护命令行参数中的待保护的源代码文件的全路径到SRC_FILE中。本实施例中,所述剩余参数是所述待保护命令行参数除了步骤S101中的-c参数以外的参数。本实施例中,所述指定存储空间可以是所述SRC_FILE。
在步骤S104之前,如果待保护命令行参数的状态是COMPILE_SOURCE,且剩余参数中包含“S”参数,则设置状态标签为第二状态标签,在一个实例中,所述第二状态标签可以是COMPILE_ASM,当然本领域的技术人员可以按照需求将所述第二状态标签设置成其他字符串。设置所述第一状态标签的目的是用于指示后续执行流程将c/c++源代码文件编译为.s汇编文件,而不是原始的从c/c++源代码文件编译成.o文件。
步骤S104,使用安全编译器对所述指定存储空间中的全路径中的待保护的源代码文件进行编辑以生成保护文件。
在一种实施方式中,如果待保护命令行参数的状态是COMPILE_SOURCE,且剩余参数中包含“-o”参数,则设置状态为标签为第三状态标签,在一个实例中,所述第三状态标签可以是FIND_O_ARG,当然本领域的技术人员可以按照需求将所述第三状态标签设置成其他字符串。进一步地,如果状态是FIND_O_ARG,且剩余参数中包含.o等有效的OBJECT文件路径,则将OBJECT文件路径保存在OBJ_FILE中。其中,-c参数表示编译后生成的文件名为source_file.o的文件。
解析完参数后,判断状态是否为COMPILE_ASM,如果为COMPILE_ASM,则将所述待保护命令行参数传递给目标编译器gcc-real或编译器g++-real。
在执行步骤S104之前还可以包括:判断SRC_FILE是否为空,如果不为空则将得到的原始命令行参数加上“-S”参数。然后执调用目标编译器gcc-real或者g++-real,调用成功后,会生成对应的汇编文件.s文件。其中,-S参数表示表示编译后生成的文件名为source_file.s的汇编代码。
本实施例中,步骤S104中的所述指定存储空间中的全路径中的待保护的源代码文件为经过所述编译器编译的汇编文件。
本实施例中,通过调用安全编译器dx-iot-compiler部件进行编辑以得到保护文件,也就是调用成功后会生成被安全保护过的.dx.s文件。
步骤S105,使用目标编译器对所述保护文件进行编译以得到目标文件。
本实施例中,所述步骤S105包括:调用目标编译器对保护文件进行编译,并将路径参数置换为携带有所述保护文件全路径的参数。
本实施例中,如果成功得到所述保护文件.dx.s,则调用目标编译器对所述保护文件进行编译以得到目标文件。在一实施方式中,所述目标编译器可以是目标编译器gcc-real或者目标编译器g++-real,将参数置换为“-c$filterfile-o$objfile”,其中filterfile为之前生成的.dx.s文件全路径,objfile为输出的二进制格式的文件,此时编译出的所述目标文件中的代码已经是被保护过的文件。
本发明实施例提供的固件保护方法,通过将符合条件的待保护命令行参数贴上第一状态标签,以有效地进行后续的保护操作;将带有所述第一状态标签的所述待保护命令行参数的待保护源代码文件使用安全编译器进行编辑保护,然后再进一步地使用目标编译器编译得到目标文件,以实现代码的保护。
本实施例中,如图3所示,所述步骤S104包括:步骤S1041至步骤S1044。
步骤S1041,根据所述待保护的源代码文件编译后的汇编语言文件的内容中的指令集和指示符判断所述汇编语言文件对应的关键信息。本实施例中,所述安全编译器首先判断传入的源文件是否是合法的汇编语言源代码文件,如果不是合法的源代码文件最终会输出与输入相同内容的文件,所述安全编译器不做任何处理。
如果是合法的汇编语言源代码格式,则根据其内部的指令集和指示符判断其硬件目标架构,汇编语言格式等关键信息。
本实施例中,所述关键信息包括执行设备的硬件目标架构、汇编语言格式。
步骤S1042,对所述待保护命令行参数中的汇编语言文件进行解析,解析出每个函数中的基本元素,并将所述基本元素存放在函数信息块中,以得到每个函数对应的函数信息块。
本实施例中,对汇编语言文件按函数为基本单元进行解析,解析出每个函数中的标识符、每条指令、总指令条数等基本元素,并将这些基本元素存放在一个函数信息块中,循环的解析每个函数得到每个函数的函数信息块。
步骤S1043,将每个函数的函数信息块按照预设范围的块尺寸切分成多个随机大小的基本信息块。
本实施例中,将其中的指令序列按照先前指定的块大小,随机的将原始指令切分成若干个基本信息块。进一步地,将每个基本信息块保存到一个全局位置表中。进一步地,还将每个基本信息块应执行的下一个代码基本信息块的位置到该基本信息块后的数据区。
步骤S1044,根据多个所述基本信息块随机生成所述保护文件。
在一种实施方式中,如图4所示,所述步骤S1044包括:步骤S10441至步骤S10443。
步骤S10441,将多个基本信息块错乱顺序进行存放。
步骤S10442,在所述汇编语言文件的函数入口处插入花指令。
花指令是由设计者特别构思,希望使反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容,迷失方向。在一种实施方式中,目标位置是另一条指令的中间,这样在反汇编的时候便会出现混乱。花指令有可以利用各种指令:jmp,call,ret的一些堆栈技巧,位置运算等。
本实施例中,通过在函数入口处插入花指令隐藏真实的入口代码。提高固件的安全性。
步骤S10443,在所述花指令后插入初始化调度代码,并将所述多个基本信息块中的原始第一个基本信息块的索引传入调度器中,由调度器执行所述第一个基本信息块,从所述多个基本信息块中的任一基本信息块末尾得到下一个要执行的所述多个基本信息块中的基本信息块的索引,并将该索引传入调度器中,调度器由此执行所述多个基本信息块中的下一个基本信息块,多次使用调度器执行所述多个基本信息块中的基本信息块以使所述调度器执行完错乱顺序的所述多个基本信息块。
进一步地,代码基本块乱序完成后,需要针对某些与特定地址相关的指令做修复工作。
本实施例中的保护方法相较于本方案是通过针对高级语言编译后的汇编语言进行混淆,而传统的代码混淆技术是通过对高级语言源代码或者中间层IR实现混淆。因此本申请中的代码保护方式具有更广的适用性,能够实现对固件的保护。
本实施例中,如图5所示,在步骤S105之后,所述方法还包括:
步骤S106,调用链接器将所述目标文件链接成二进制格式的可执行文件,形成目标固件。
请参阅图6,是本发明实施例提供的图1所示的固件保护装置110的功能模块示意图。本实施例中的固件保护装置110中的各个模块及单元用于执行上述方法实施例中的各个步骤。所述固件保护装置110包括:识别模块1101、设置模块1102、存储模块1103、第一编译模块1104及第二编译模块1105。
所述识别模块1101,用于识别读取到的待保护命令行参数是否有只编译不链接参数。
所述设置模块1102,用于若存在所述只编译不链接参数为所述待保护命令行参数设置第一状态标签。
所述存储模块1103,用于若带有所述第一状态标签的所述待保护命令行参数的参数中存在源文件路径,则将所述带有所述第一状态标签的所述待保护命令行参数中的待保护的源代码文件的全路径存储至指定存储空间中。
所述第一编译模块1104,用于使用安全编译器对所述指定存储空间中的全路径中的待保护的源代码文件进行编辑以生成保护文件。
所述第二编译模块1105,用于使用目标编译器对所述保护文件进行编译以得到目标文件。
本实施例中,所述第二编译模块1105还用于调用目标编译器对保护文件进行编译,并将路径参数置换为携带有所述保护文件全路径的参数。
本实施例中,所述第一编译模块1104包括:判断单元、解析单元、切分单元及生成单元。
所述判断单元,用于根据所述待保护的源代码文件编译后的汇编语言文件的内容中的指令集和指示符判断所述汇编语言文件对应的关键信息,所述关键信息包括执行设备的硬件目标架构、汇编语言格式。
所述解析单元,用于对所述待保护命令行参数中的汇编语言文件进行解析,解析出每个函数中的基本元素,并将所述基本元素存放在函数信息块中,以得到每个函数对应的函数信息块。
所述切分单元,用于将每个函数的函数信息块按照预设范围的块尺寸切分成多个随机大小的基本信息块。
所述生成单元,用于根据多个所述基本信息块随机生成所述保护文件。
本实施例中,所述生成单元包括:存放子单元、插入子单元及执行子单元。
所述存放子单元,用于将所述多个基本信息块错乱顺序进行存放。
所述插入子单元,用于在所述汇编语言文件的函数入口处插入花指令。
所述执行子单元,用于在所述花指令后插入初始化调度代码,并将所述多个基本信息块中的原始第一个基本信息块的索引传入调度器中,由调度器执行所述第一个基本信息块,从所述多个基本信息块中的任一基本信息块末尾得到下一个要执行的所述多个基本信息块中的基本信息块的索引,并将该索引传入调度器中,调度器由此执行所述多个基本信息块中的下一个基本信息块,多次使用调度器执行所述多个基本信息块中的基本信息块以使所述调度器执行完错乱顺序的所述多个基本信息块。
本实施例中,请再次参阅图6,所述固件保护装置110还包括:链接模块1106,用于调用链接器将所述目标文件链接成二进制格式的可执行文件,形成目标固件。
关于本实施例的其它细节可以进一步地参考上述方法实施例中的描述,在此不再赘述。
本发明实施例提供的固件保护装置,通过将符合条件的待保护命令行参数贴上第一状态标签,以有效地进行后续的保护操作;将带有所述第一状态标签的所述待保护命令行参数的待保护源代码文件使用安全编译器进行编辑保护,然后再进一步地使用目标编译器编译得到目标文件,以实现代码的保护。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种固件保护方法,其特征在于,所述固件保护方法包括:
识别读取到的待保护命令行参数是否有只编译不链接参数;
若存在所述只编译不链接参数为所述待保护命令行参数设置第一状态标签;
若带有所述第一状态标签的所述待保护命令行参数的参数中存在源文件路径,则将所述带有所述第一状态标签的所述待保护命令行参数中的待保护的源代码文件的全路径存储至指定存储空间中;
使用安全编译器对所述指定存储空间中的全路径中的待保护的源代码文件进行编辑以生成保护文件;
使用目标编译器对所述保护文件进行编译以得到目标文件。
2.如权利要求1所述的固件保护方法,其特征在于,所述使用安全编译器对所述指定存储空间中的全路径中的待保护的源代码文件进行编辑以生成保护文件的步骤包括:
根据所述待保护的源代码文件编译后的汇编语言文件的内容中的指令集和指示符判断所述汇编语言文件对应的关键信息,所述关键信息包括执行设备的硬件目标架构、汇编语言格式;
对所述待保护命令行参数中的汇编语言文件进行解析,解析出每个函数中的基本元素,并将所述基本元素存放在函数信息块中,以得到每个函数对应的函数信息块;
将每个函数的函数信息块按照预设范围的块尺寸切分成多个随机大小的基本信息块;
根据多个所述基本信息块随机生成所述保护文件。
3.如权利要求2所述的固件保护方法,其特征在于,所述根据多个所述基本信息块随机生成所述保护文件的步骤包括:
将多个所述基本信息块错乱顺序进行存放;
在所述汇编语言文件的函数入口处插入花指令;
在所述花指令后插入初始化调度代码,并将多个所述基本信息块中的原始第一个基本信息块的索引传入调度器中,由调度器执行所述第一个基本信息块,从多个所述基本信息块中的任一基本信息块末尾得到下一个要执行的多个所述基本信息块中的基本信息块的索引,并将该索引传入调度器中,调度器由此执行多个所述基本信息块中的下一个基本信息块,多次使用调度器执行多个所述基本信息块中的基本信息块以使所述调度器执行完错乱顺序的多个所述基本信息块。
4.如权利要求1所述的固件保护方法,其特征在于,所述使用目标编译器对所述保护文件进行编译以得到目标文件的步骤包括:
调用目标编译器对保护文件进行编译,并将路径参数置换为携带有所述保护文件全路径的参数。
5.如权利要求1所述的固件保护方法,其特征在于,所述使用目标编译器对所述保护文件进行编译以得到目标文件的步骤之后,所述方法还包括:
调用链接器将所述目标文件链接成二进制格式的可执行文件,形成目标固件。
6.一种固件保护装置,其特征在于,所述固件保护装置包括:
识别模块,用于识别读取到的待保护命令行参数是否有只编译不链接参数;
设置模块,用于若存在所述只编译不链接参数为所述待保护命令行参数设置第一状态标签;
存储模块,用于若带有所述第一状态标签的所述待保护命令行参数的参数中存在源文件路径,则将所述带有所述第一状态标签的所述待保护命令行参数中的待保护的源代码文件的全路径存储至指定存储空间中;
第一编译模块,用于使用安全编译器对所述指定存储空间中的全路径中的待保护的源代码文件进行编辑以生成保护文件;
第二编译模块,用于使用目标编译器对所述保护文件进行编译以得到目标文件。
7.如权利要求6所述的固件保护装置,其特征在于,所述第一编译模块包括:
判断单元,用于根据所述待保护的源代码文件编译后的汇编语言文件的内容中的指令集和指示符判断所述汇编语言文件对应的关键信息,所述关键信息包括执行设备的硬件目标架构、汇编语言格式;
解析单元,用于对所述待保护命令行参数中的汇编语言文件进行解析,解析出每个函数中的基本元素,并将所述基本元素存放在函数信息块中,以得到每个函数对应的函数信息块;
切分单元,用于将每个函数的函数信息块按照预设范围的块尺寸切分成多个随机大小的基本信息块;
生成单元,用于根据多个所述基本信息块随机生成所述保护文件。
8.如权利要求7所述的固件保护装置,其特征在于,所述生成单元包括:
存放子单元,用于将多个所述基本信息块错乱顺序进行存放;
插入子单元,用于在所述汇编语言文件的函数入口处插入花指令;
执行子单元,用于在所述花指令后插入初始化调度代码,并将多个所述基本信息块中的原始第一个基本信息块的索引传入调度器中,由调度器执行所述第一个基本信息块,从多个所述基本信息块中的任一基本信息块末尾得到下一个要执行的多个所述基本信息块中的基本信息块的索引,并将该索引传入调度器中,调度器由此执行多个所述基本信息块中的下一个基本信息块,多次使用调度器执行多个所述基本信息块中的基本信息块以使所述调度器执行完错乱顺序的多个所述基本信息块。
9.如权利要求6所述的固件保护装置,其特征在于,所述第二编译模块还用于调用目标编译器对保护文件进行编译,并将路径参数置换为携带有所述保护文件全路径的参数。
10.如权利要求6所述的固件保护装置,其特征在于,所述装置还包括:
链接模块,用于调用链接器将所述目标文件链接成二进制格式的可执行文件,形成目标固件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810205361.8A CN108460254B (zh) | 2018-03-13 | 2018-03-13 | 固件保护方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810205361.8A CN108460254B (zh) | 2018-03-13 | 2018-03-13 | 固件保护方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108460254A CN108460254A (zh) | 2018-08-28 |
CN108460254B true CN108460254B (zh) | 2020-05-22 |
Family
ID=63217308
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810205361.8A Active CN108460254B (zh) | 2018-03-13 | 2018-03-13 | 固件保护方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108460254B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110471662B (zh) * | 2019-08-21 | 2023-04-25 | 北京百度网讯科技有限公司 | 程序转换方法、装置及设备 |
CN111552524B (zh) * | 2020-05-06 | 2023-10-13 | Oppo(重庆)智能科技有限公司 | 一种插件加载方法、装置及计算机可读存储介质 |
CN111752570B (zh) * | 2020-06-29 | 2024-06-14 | 重庆小雨点小额贷款有限公司 | 一种编译方法、装置、终端及计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104091100A (zh) * | 2014-07-15 | 2014-10-08 | 电子科技大学 | 一种基于编译中间结果的软件保护方法 |
FR2942559B1 (fr) * | 2009-02-24 | 2016-05-20 | European Aeronautic Defence And Space Company - Eads France | Procede de protection du code source d'un programme d'ordinateur. |
CN107391099A (zh) * | 2017-03-30 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 一种资源预处理方法及装置 |
-
2018
- 2018-03-13 CN CN201810205361.8A patent/CN108460254B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2942559B1 (fr) * | 2009-02-24 | 2016-05-20 | European Aeronautic Defence And Space Company - Eads France | Procede de protection du code source d'un programme d'ordinateur. |
CN104091100A (zh) * | 2014-07-15 | 2014-10-08 | 电子科技大学 | 一种基于编译中间结果的软件保护方法 |
CN107391099A (zh) * | 2017-03-30 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 一种资源预处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108460254A (zh) | 2018-08-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102521081B (zh) | 修复遭破坏的软件 | |
US11403094B2 (en) | Software pipeline configuration | |
CN108460254B (zh) | 固件保护方法及装置 | |
EP1967981A1 (en) | Program execution control method, device, and execution control program | |
CN105068932A (zh) | 一种Android应用程序加壳的检测方法 | |
CN106605212A (zh) | 在动态链接的运行时环境中的模块化共同版本管理 | |
US7873960B2 (en) | Generic packaging tool for packaging application and component therefor to be installed on computing device | |
CN100492387C (zh) | 基于Keil C51的软件保护开发的方法和系统 | |
WO2022078366A1 (zh) | 应用保护方法、装置、设备及介质 | |
US10241759B2 (en) | Detecting open source components built into mobile applications | |
CN105701368A (zh) | 通过根据校验和计算目标地址的代码完整性保护 | |
CN112379940A (zh) | 一种可执行文件处理方法、装置、电子设备及存储介质 | |
US10685298B2 (en) | Mobile application compatibility testing | |
US11868465B2 (en) | Binary image stack cookie protection | |
US11269988B2 (en) | Automated software application verification system | |
KR20100028026A (ko) | 디지털 컨텐츠를 변경 및 리컴파일해야 함이 없이 디지털 컨텐츠의 기능들을 위한 활성화 키들을 변경 및 추가하기 위한 방법 및 장치 | |
CN107209815B (zh) | 用于使用返回导向编程的代码混淆的方法 | |
US9075679B1 (en) | Creating a prerequisite checklist corresponding to a software application | |
US9417871B2 (en) | Automatic generation of certificate of origin (COO) for software systems | |
KR101436741B1 (ko) | 프로그램 보안 솔루션 적용 방법 및 시스템 | |
CN104680043A (zh) | 一种可执行文件的保护方法及装置 | |
JP7222428B2 (ja) | 検証情報作成システム、検証情報作成方法、および、検証情報作成プログラム | |
CN113220314A (zh) | App资源加载及apk生成方法、装置、设备及介质 | |
JP2018005915A (ja) | アプリケーションパッケージを提供する方法およびシステム、アプリケーションを実行する方法およびシステム | |
WO2016000557A1 (zh) | 利用数字水印识别应用程序是否是正版的方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |