代码自修改方法、装置及电子设备
技术领域
本发明涉及计算机技术领域,具体涉及一种代码自修改方法、装置及电子设备。
背景技术
目前,移动应用的种类和功能越来越繁多,随着科技的发展,编写的代码、数据以及应用等越来越容易被黑客恶意攻破,因此,保证用户所使用的应用的安全成为使用应用时面临的最大问题,其中,一种能够保证应用的安全的方式是保证应用的源码文件的安全。现有技术中,往往采用加固的方式来保护应用文件中的源码信息,例如采用加固保护的方式来保护ELF文件中的C源码,在一定程度上防止编写的代码被反编译分析,从而保障源码的安全。
但是,现有技术存在如下不足:现有技术往往不能保证ELF文件中待保护源码进行反编译时不可见,即对ELF文件中的C源码进行反编译时往往可以得到解密后的反编译文件,进而能够读取到该ELF文件中的数据信息,导致源码信息泄露。因此,如何建立有效的源码保护机制是一个亟待解决的问题。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的代码自修改方法、装置及电子设备。
根据本发明的一个方面,提供了一种代码自修改方法,方法包括:
按照预设的程序执行顺序在待保护源码的相应位置处插入预设自修改处理的调用代码,得到第一源码;
对第一源码进行编译,在编译得到的文件中将与待保护源码相对应的二进制文件提取出来,并将编译得到的文件被提取出二进制文件之后所得到的文件确认为应用编译文件;
在运行应用编译文件的过程中,当运行到预设自修改处理的调用代码时,根据预设自修改处理的处理代码以及二进制文件完成代码自修改处理。
可选地,方法进一步包括:
预先构建指定格式的文件,将预设自修改处理的处理代码存储在指定格式的文件中;
则当运行到预设自修改处理的调用代码时,根据预设自修改处理的处理代码以及二进制文件完成代码自修改处理进一步包括:
当运行到预设自修改处理的调用代码时,跳转至指定格式的文件以完成预设自修改处理。
可选地,预设自修改处理包括:还原处理、擦除处理;
预先按照预设的程序执行顺序在待保护源码的相应位置处插入预设自修改处理的调用代码,得到第一源码的步骤进一步包括:
在待保护源码之前插入还原处理的调用代码,以及在待保护源码之后插入擦除处理的调用代码,得到第一源码。
可选地,当运行到预设自修改处理的调用代码时,跳转至指定格式的文件以完成预设自修改处理的步骤具体包括:
当运行到还原处理的调用代码时,跳转至指定格式的文件以执行还原处理;
或者,当运行到擦除处理的调用代码时,跳转至指定格式的文件以执行擦除处理。
可选地,当运行到还原处理的调用代码时,跳转至指定格式的文件以执行还原处理的步骤之前,方法进一步包括:
将二进制文件放置于还原处理的处理代码中,得到还原处理代码,将还原处理代码进行编译,并将编译得到的文件保存至指定格式的文件中。
可选地,跳转至指定格式的文件以执行还原处理进一步包括:
跳转至指定格式的文件以执行将二进制文件恢复至内存区域中相应的位置的步骤。
可选地,跳转至指定格式的文件执行还原处理的步骤之前,方法进一步包括:
调用系统函数修改内存区域中的内存数据的操作权限。
可选地,跳转至指定格式的文件以执行擦除处理进一步包括:
跳转至指定格式的文件以执行将内存区域中的还原处理所恢复的二进制文件设置为预设数值的步骤。
可选地,在完成擦除处理之后,方法进一步包括:
当调用还原处理代码时,执行利用系统函数获取第一源码中调用还原处理代码的返回地址,根据返回地址将还原处理代码中的二进制文件对所对应的预设数值进行替换的步骤。
可选地,其特征在于,指定格式的文件包括:ELF文件。
根据本发明的另一方面,提供了一种代码自修改装置,装置包括:
调用代码插入模块,适于按照预设的程序执行顺序在待保护源码的相应位置处插入预设自修改处理的调用代码,得到第一源码;
文件提取模块,适于对第一源码进行编译,在编译得到的文件中将与待保护源码相对应的二进制文件提取出来,并将编译得到的文件被提取出二进制文件之后所得到的文件确认为应用编译文件;
自修改处理模块,适于在运行应用编译文件的过程中,当运行到预设自修改处理的调用代码时,根据预设自修改处理的处理代码以及二进制文件完成代码自修改处理。
可选地,自修改处理模块进一步适于:
预先构建指定格式的文件,将预设自修改处理的处理代码存储在指定格式的文件中;当运行到预设自修改处理的调用代码时,跳转至指定格式的文件以完成预设自修改处理。
可选地,预设自修改处理包括:还原处理、擦除处理;则调用代码插入模块进一步适于:
在待保护源码之前插入还原处理的调用代码,以及在待保护源码之后插入擦除处理的调用代码,得到第一源码。
可选地,自修改处理模块进一步适于:
当运行到还原处理的调用代码时,跳转至指定格式的文件以执行还原处理;
或者,当运行到擦除处理的调用代码时,跳转至指定格式的文件以执行擦除处理。
可选地,自修改处理模块进一步适于:
在跳转至指定格式的文件以执行还原处理的步骤之前,将二进制文件放置于还原处理的处理代码中,得到还原处理代码,将还原处理代码进行编译,并将编译得到的文件保存至指定格式的文件中。
可选地,自修改处理模块进一步适于:
跳转至指定格式的文件以执行将二进制文件恢复至内存区域中相应的位置的步骤。
可选地,装置进一步包括:
权限修改模块,适于调用系统函数修改内存区域中的内存数据的操作权限。
可选地,自修改处理模块进一步适于:
跳转至指定格式的文件以执行将内存区域中的还原处理所恢复的与待保护源码相对应的二进制文件设置为预设数值的步骤。
可选地,自修改处理模块进一步适于:
当调用还原处理代码时,执行利用系统函数获取第一源码中调用还原处理代码的返回地址,根据返回地址将还原处理代码中的二进制文件对所对应的预设数值进行替换的步骤。
可选地,指定格式的文件包括:ELF文件。
根据本发明的又一方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;
存储器用于存放至少一可执行指令,可执行指令使处理器执行上述代码自修改方法对应的操作。
根据本发明的再一方面,提供了一种计算机存储介质,存储介质中存储有至少一可执行指令,可执行指令使处理器执行如上述代码自修改方法对应的操作。
根据本发明所提供的代码自修改方法、装置及电子设备。首先,按照预设的程序执行顺序在待保护源码的相应位置处插入预设自修改处理的调用代码,得到第一源码;其次,对第一源码进行编译,在编译得到的文件中将与待保护源码相对应的二进制文件提取出来,并将编译得到的文件被提取出二进制文件之后所得到的文件确认为应用编译文件;然后,在运行应用编译文件的过程中,当运行到预设自修改处理的调用代码时,根据预设自修改处理的处理代码以及二进制文件完成代码自修改处理。该方式提供了一种基于与待保护源码相对应的二进制文件的代码自修改处理方法,使程序在运行时自我修改,防止程序被静态分析,进而保证源码的安全。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的代码自修改方法的流程示意图;
图2示出了根据本发明另一个实施例的代码自修改方法的流程示意图;
图3示出了根据本发明另一个实施例的代码自修改装置的功能模块图;
图4示出了根据本发明实施例的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的代码自修改方法的流程示意图,如图1所示,该方法包括:
步骤S101,按照预设的程序执行顺序在待保护源码的相应位置处插入预设自修改处理的调用代码,得到第一源码。
其中,预设的程序执行顺序指的是程序运行时进行预设自修改处理所包含的各种处理的顺序,调用代码用于在程序执行的过程中调用能实现预设自修改处理的功能的代码。在待保护源码的相应位置处插入预设自修改处理的调用代码,当运行到调用代码时,调用预设自修改处理的处理代码以完成代码自修改。
步骤S102,对第一源码进行编译,在编译得到的文件中将与待保护源码相对应的二进制文件提取出来,并将编译得到的文件被提取出二进制文件之后所得到的文件确认为应用编译文件。
对第一源码进行编译,在编译得到的文件中将与待保护源码相对应的二进制文件提取出来,可以将提取出来的二进制文件分开进行存储,后续过程中根据与待保护源码相对应的二进制文件进行代码自修改处理,同时,将编译得到的文件中与待保护源码相对应的二进制文件被提取出去之后所剩下的文件确认为应用编译文件。该步骤相当于对待保护源码进行了擦除处理。
步骤S103,在运行应用编译文件的过程中,当运行到预设自修改处理的调用代码时,根据预设自修改处理的处理代码以及二进制文件完成代码自修改处理。
在运行应用编译文件的过程中,当运行到预设自修改处理的调用代码,调用对应的能够实现预设自修改处理的功能的处理代码,执行该处理代码完成代码自修改处理。举例来说,上述步骤S102相当于实现了擦除待保护源码,则预设自修改处理可以包括:还原处理(解密处理),还原处理具体指的是加载待保护源码运行时的内存数据,在此情况下,预设自修改处理所要实现的功能是将提取出的与待保护源码相对应的二进制文件替换到内存区域中相应的位置处,由此可以保障后续过程中程序的正常运行。当然,本发明的方案并不以此为限。
根据本实施例所提供的代码自修改方法,首先按照预设的程序执行顺序在待保护源码的相应位置处插入预设自修改处理的调用代码,得到第一源码;其次,对第一源码进行编译,在编译得到的文件中将与待保护源码相对应的二进制文件提取出来,并将编译得到的文件被提取出二进制文件之后所得到的文件确认为应用编译文件;然后,在运行应用编译文件的过程中,当运行到预设自修改处理的调用代码时,根据预设自修改处理的处理代码以及二进制文件完成代码自修改处理。考虑到对应用文件进行反编译能够获取到对应的源码的问题,该方式提供了一种基于与待保护源码相对应的二进制文件的代码自修改处理方法,使程序在运行时自我修改,防止程序被静态分析,进而保证源码的安全。
图2示出了根据本发明另一个实施例的代码自修改方法的流程示意图,如图2所示,该方法包括:
步骤S201,预先构建指定格式的文件,将还原处理的处理代码以及擦除处理的处理代码存储在指定格式的文件中。
本实施例中,预先构建指定格式的文件,将预设自修改处理的处理代码存储在该指定格式的文件中。则在后续过程中,当运行到预设自修改处理的调用代码时,跳转至该指定格式的文件以完成自修改处理。
预设自修改处理包括:还原处理以及擦除处理。其中,还原处理又可以理解为解密处理,泛指加载待保护源码运行时的内存数据,恢复被擦除的源码内存数据;擦除处理又可以理解为加密处理,泛指擦除待保护源码运行时的内存数据。
其中,在Linux系统中,该预先构建的指定格式的文件可以是ELF文件。预先构建一个ELF文件存储还原处理的处理代码以及擦除处理的处理代码,也可以构建两个ELF文件分别存储还原处理的处理代码以及擦除处理的处理代码,本发明对此不做限定。当运行到还原处理的调用代码或者擦除处理的调用代码时,跳转至ELF文件中执行相应的处理。其中,ELF文件是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件,也是Linux的主要可执行文件格式。
需要说明的是,本发明对步骤S201在本发明方法中的执行时机并不作限定。
步骤S202,在待保护源码之前插入还原处理的调用代码,以及在待保护源码之后插入擦除处理的调用代码,得到第一源码。
其中,当预设的程序执行顺序为还原(解密)-运行待保护源码-擦除(加密)时,则在待保护源码之前插入还原处理的调用代码,以及在待保护源码之后插入擦除处理的调用代码,得到第一源码。由此可知,本实施例方法的执行过程为:在运行经过擦除处理的待保护源码之前,先进行还原处理,从而恢复内存区域中被擦除的内存数据;在运行完待保护源码之后,再对运行得到的内存数据进行擦除。
骤S203,对第一源码进行编译,在编译得到的文件中将与待保护源码相对应的二进制文件提取出来,并将编译得到的文件被提取出二进制文件之后所得到的文件确认为应用编译文件。
对第一源码进行编译,在编译得到的文件中将与待保护源码相对应的二进制文件提取出来,可以将提取出来的二进制文件分开进行存储,后续过程中根据与待保护源码相对应的二进制文件进行代码自修改处理,同时,将编译得到的文件中与待保护源码相对应的二进制文件提取出去之后所剩下的文件确认为应用编译文件。该步骤相当于对待保护源码进行了擦除处理。
步骤S204,在运行应用编译文件的过程中,当运行到还原处理的调用代码时,跳转至指定格式的文件以执行还原处理。
在运行应用编译文件的过程中,当运行到还原处理的调用代码时,跳转至保存有还原处理的处理代码的指定格式的文件以执行还原处理。
进一步地,在执行本步骤之前,预先将二进制文件放置于还原处理的处理代码中,得到还原处理代码,将还原处理代码进行编译,并将编译得到的文件保存至指定格式的文件中。本实施例中,预先构建ELF文件,ELF文件分为数据区和代码区,数据区中保存字符串等常量,将上述与待保护源码所对应的二进制文件编译之后作为ELF文件进行保存时可以保存在ELF文件的数据区,在此情况下即使外人识别出该ELF文件,也无法区分出数据区内哪些是代码、哪些是数据,因此,无法仅通过ELF文件中数据区内的数据获取到待保护源码的任何信息,也即对该ELF文件进行反编译时无法得到真实的源码,由此可以保证待保护源码的安全。
当运行到还原处理的调用代码时,跳转至指定格式的文件以执行将二进制文件恢复至内存区域中相应的位置的步骤。步骤S203将与待保护源码的二进制文件提取出来,相当于将内存区域中待保护源码运行时的内存数据进行擦除,则根据上述内容,在运行经过擦除处理的待保护源码之前,先进行还原处理,步骤S204相当于恢复内存区域中之前被擦除的内存数据。则该步骤也即当运行到还原处理的调用代码时,跳转至上述ELF文件,执行将与待保护源码相对应的二进制文件替换至内存区域中相应的位置处的步骤。
可选地,在执行还原处理之前,还可以调用系统函数修改内存区域中的内存数据的操作权限。在对待保护源码进行还原处理之前,可以先通过调用系统函数来修改代码段的权限。例如,在Linux系统中,利用mprotect函数来指定任意一块内存区域中数据的读、写以及执行权限,在Linux系统中代码段默认权限为可读可执行但不可写,因而可以在代码段内写入mprotect函数,以便对待保护源码的内存数据进行写处理。相应地,Windows系统中也可以通过调用系统函数的方式来更改内存数据的写操作权限,在此不进行赘述。
步骤S205,当运行到擦除处理的调用代码时,跳转至指定格式的文件以执行擦除处理。
当运行到擦除处理的调用代码时,跳转至保存有擦除处理的处理代码的指定格式的文件以执行擦除处理。具体可以从文件的某个字节、某个位置以指定的字节大小进行擦除。
本实施例中,擦除处理可以指将内存区域中待保护源码运行时的内存数据设置为预设数值,具体地,跳转至指定格式的文件以执行将内存区域中的还原处理所恢复的与待保护源码相对应的二进制文件设置为预设数值的步骤。由于待保护源码均被擦除为预设数值,进行反编译所得到的结果为nop,因此无法得到待保护源码的真实信息。本实施例在运行完待保护源码之后,擦除内存区域中产生的与待保护源码相关的内存数据,保证该待保护源码静态不可见。
进一步地,在后续运行程序的过程中,当调用上述还原处理代码时,执行利用系统函数获取第一源码中调用还原处理代码的返回地址,根据返回地址将还原处理代码中的二进制文件对所对应的预设数值进行替换的步骤。在后续运行程序的过程中,由于待保护源码经过了还原以及擦除处理,内存中待保护源码被擦除为预设数值,因此当调用还原处理代码(保存了二进制文件的还原处理的处理代码)时,获取第一源码调用该还原处理代码的返回地址,并将还原处理代码中所保存的二进制文件替换至第一源码中被擦除为预设数值的位置处。其中,还原处理代码是将与待保护源码相对应的二进制文件保存至还原处理的处理代码所形成的,因此调用还原处理代码的返回地址也就是调用还原处理的处理代码的返回地址,通过这种方式能够保证程序可以正常运行。
在运行程序的过程中,程序必须加载进内存中进行运行,而在从外存至内存的运行过程中,系统每次的加载地址是变化的,该加载地址是由操作系统的加载机制动态决定的,因此,还原处理的处理代码在内存中的运行地址是变化的,因此在每次运行的过程中,可以采用系统函数来获取第一源码中调用该还原处理代码的返回地址,该系统函数具体可以为__builtin_return_address(0),其功能就是获取当前运行函数的返回地址。当进行还原处理时,还原函数需要知道带还原的具体位置,而待还原的位置就是还原函数的返回地址。
综上所述,根据本实施例所提供的代码自修改方法,在执行被擦除之后的待保护源码之前,先进行还原处理,从而恢复原文件中被擦除的代码,在运行完待保护源码之后,再对该待保护源码进行擦除处理,得到的待保护源码被设置为预设数值。因此,当对该擦除处理之后的文件进行反编译时无法获取到真实的源码,同时,由于放置于ELF文件中的待保护源码为二进制文件进行编译后所得到的文件,该文件放置于ELF文件中的数据区上,对数据文件进行反编译时无法得到真实的源码,通过上述两个方面的操作,达到保护待保护源码安全的目的,处理后的待保护源码静态不可见,动态难调试。
图3示出了根据本发明另一个实施例的代码自修改装置的功能模块图,如图3所示,该装置包括:调用代码插入模块31、文件提取模块32、自修改处理模块33,在一种可选的方式中,该装置进一步包括:权限修改模块34。
其中,调用代码插入模块31,适于按照预设的程序执行顺序在待保护源码的相应位置处插入预设自修改处理的调用代码,得到第一源码;
文件提取模块32,适于对第一源码进行编译,在编译得到的文件中将与待保护源码相对应的二进制文件提取出来,并将编译得到的文件被提取出二进制文件之后所得到的文件确认为应用编译文件;
自修改处理模块33,适于在运行应用编译文件的过程中,当运行到预设自修改处理的调用代码时,根据预设自修改处理的处理代码以及二进制文件完成代码自修改处理。
可选地,自修改处理模块33进一步适于:
预先构建指定格式的文件,将预设自修改处理的处理代码存储在指定格式的文件中;当运行到预设自修改处理的调用代码时,跳转至指定格式的文件以完成预设自修改处理。
可选地,预设自修改处理包括:还原处理、擦除处理;则调用代码插入模块31进一步适于:
在待保护源码之前插入还原处理的调用代码,以及在待保护源码之后插入擦除处理的调用代码,得到第一源码。
可选地,自修改处理模块33进一步适于:
当运行到还原处理的调用代码时,跳转至指定格式的文件以执行还原处理;
或者,当运行到擦除处理的调用代码时,跳转至指定格式的文件以执行擦除处理。
可选地,自修改处理模块33进一步适于:
在跳转至指定格式的文件以执行还原处理的步骤之前,将二进制文件放置于还原处理的处理代码中,得到还原处理代码,将还原处理代码进行编译,并将编译得到的文件保存至指定格式的文件中。
可选地,自修改处理模块33进一步适于:
跳转至指定格式的文件以执行将二进制文件恢复至内存区域中相应的位置的步骤。
可选地,权限修改模块34,适于调用系统函数修改内存区域中的内存数据的操作权限。
可选地,自修改处理模块33进一步适于:
跳转至指定格式的文件以执行将内存区域中的还原处理所恢复的与待保护源码相对应的二进制文件设置为预设数值的步骤。
可选地,自修改处理模块33进一步适于:
当调用还原处理代码时,执行利用系统函数获取第一源码中调用还原处理代码的返回地址,根据返回地址将还原处理代码中的二进制文件对所对应的预设数值进行替换的步骤。
可选地,指定格式的文件包括:ELF文件。
图4示出了根据本发明实施例的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图4所示,该电子设备可以包括:处理器(processor)402、通信接口(Communications Interface)404、存储器(memory)406、以及通信总线408。
其中:
处理器402、通信接口404、以及存储器406通过通信总线408完成相互间的通信。
通信接口404,用于与其它设备比如客户端或其它服务器等的网元通信。
处理器402,用于执行程序410,具体可以执行上述代码自修改方法实施例中的相关步骤。
具体地,程序410可以包括程序代码,该程序代码包括计算机操作指令。
处理器402可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器406,用于存放程序410。存储器406可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序410具体可以用于使得处理器402执行上述任意方法实施例中的代码自修改方法。程序410中各步骤的具体实现可以参见上述代码自修改方法实施例中的相应步骤和单元中对应的描述,在此不赘述。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应该被理解和认定为覆盖了所有这些其他变型或修改。
本领域技术人员应当理解,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。此外,本发明也不针对任何特定编程语言,应当明白,可以利用各种编程语言实现本发明描述的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
需要注意的是,尽管在上面的说明中详细描述了代码自修改装置的若干模块,但是这种划分仅仅是示例性的,并非是强制性的。本领域的技术人员可以理解,实际上,可以对实施例中的模块进行自适应性地改变,将实施例中的多个模块组合成一个模块,也可将一个模块划分成多个模块。
此外,尽管在附图中以特定顺序描述了本发明实施操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。可以省略某些步骤,将多个步骤合并为一个步骤执行,或者将一个步骤分成多个步骤执行。
以上对本发明的方法和具体实施方法进行了详细的介绍,并给出了相应的实施例。当然,除上述实施例外,本发明还可以有其它实施方式,凡采用等同替换或等效变换形成的技术方案,均落在本发明所要保护的范围之内。
本发明公开了:A1.一种代码自修改方法,其特征在于,包括:
按照预设的程序执行顺序在待保护源码的相应位置处插入预设自修改处理的调用代码,得到第一源码;
对所述第一源码进行编译,在编译得到的文件中将与所述待保护源码相对应的二进制文件提取出来,并将所述编译得到的文件被提取出所述二进制文件之后所得到的文件确认为应用编译文件;
在运行所述应用编译文件的过程中,当运行到所述预设自修改处理的调用代码时,根据所述预设自修改处理的处理代码以及所述二进制文件完成代码自修改处理。
A2.根据A1所述的方法,其特征在于,所述方法进一步包括:
预先构建指定格式的文件,将所述预设自修改处理的处理代码存储在所述指定格式的文件中;
则当运行到所述预设自修改处理的调用代码时,根据所述预设自修改处理的处理代码以及所述二进制文件完成代码自修改处理进一步包括:
当运行到所述预设自修改处理的调用代码时,跳转至所述指定格式的文件以完成预设自修改处理。
A3.根据A1所述的方法,其特征在于,所述预设自修改处理包括:还原处理、擦除处理;
所述预先按照预设的程序执行顺序在待保护源码的相应位置处插入预设自修改处理的调用代码,得到第一源码的步骤进一步包括:
在所述待保护源码之前插入所述还原处理的调用代码,以及在所述待保护源码之后插入所述擦除处理的调用代码,得到第一源码。
A4.根据A2或A3所述的方法,其特征在于,所述当运行到所述预设自修改处理的调用代码时,跳转至所述指定格式的文件以完成预设自修改处理的步骤具体包括:
当运行到所述还原处理的调用代码时,跳转至所述指定格式的文件以执行还原处理;
或者,当运行到所述擦除处理的调用代码时,跳转至所述指定格式的文件以执行擦除处理。
A5.根据A4所述的方法,其特征在于,所述当运行到所述还原处理的调用代码时,跳转至所述指定格式的文件以执行还原处理的步骤之前,所述方法进一步包括:
将所述二进制文件放置于所述还原处理的处理代码中,得到还原处理代码,将所述还原处理代码进行编译,并将编译得到的文件保存至所述指定格式的文件中。
A6.根据A5所述的方法,其特征在于,所述跳转至所述指定格式的文件以执行还原处理进一步包括:
跳转至所述指定格式的文件以执行将所述二进制文件恢复至内存区域中相应的位置的步骤。
A7.根据A4-A6中任一项所述的方法,其特征在于,所述跳转至所述指定格式的文件执行还原处理的步骤之前,所述方法进一步包括:
调用系统函数修改内存区域中的内存数据的操作权限。
A8.根据A4所述的方法,其特征在于,所述跳转至所述指定格式的文件以执行擦除处理进一步包括:
跳转至所述指定格式的文件以执行将内存区域中的还原处理所恢复的所述二进制文件设置为预设数值的步骤。
A9.根据A5所述的方法,其特征在于,在完成所述擦除处理之后,所述方法进一步包括:
当调用所述还原处理代码时,执行利用系统函数获取所述第一源码中调用所述还原处理代码的返回地址,根据所述返回地址将所述还原处理代码中的二进制文件对所对应的预设数值进行替换的步骤。
A10.根据A1-A9中任一项所述的方法,其特征在于,所述指定格式的文件包括:ELF文件。
B11.一种代码自修改装置,其特征在于,包括:
调用代码插入模块,适于按照预设的程序执行顺序在待保护源码的相应位置处插入预设自修改处理的调用代码,得到第一源码;
文件提取模块,适于对所述第一源码进行编译,在编译得到的文件中将与所述待保护源码相对应的二进制文件提取出来,并将所述编译得到的文件被提取出所述二进制文件之后所得到的文件确认为应用编译文件;
自修改处理模块,适于在运行所述应用编译文件的过程中,当运行到所述预设自修改处理的调用代码时,根据所述预设自修改处理的处理代码以及所述二进制文件完成代码自修改处理。
B12.根据B11所述的装置,其特征在于,所述自修改处理模块进一步适于:
预先构建指定格式的文件,将所述预设自修改处理的处理代码存储在所述指定格式的文件中;当运行到所述预设自修改处理的调用代码时,跳转至所述指定格式的文件以完成预设自修改处理。
B13.根据B11所述的装置,其特征在于,所述预设自修改处理包括:还原处理、擦除处理;则所述调用代码插入模块进一步适于:
在所述待保护源码之前插入所述还原处理的调用代码,以及在所述待保护源码之后插入所述擦除处理的调用代码,得到第一源码。
B14.根据B12或B13所述的装置,其特征在于,所述自修改处理模块进一步适于:
当运行到所述还原处理的调用代码时,跳转至所述指定格式的文件以执行还原处理;
或者,当运行到所述擦除处理的调用代码时,跳转至所述指定格式的文件以执行擦除处理。
B15.根据B14所述的装置,其特征在于,所述自修改处理模块进一步适于:
在跳转至所述指定格式的文件以执行还原处理的步骤之前,将所述二进制文件放置于所述还原处理的处理代码中,得到还原处理代码,将所述还原处理代码进行编译,并将编译得到的文件保存至所述指定格式的文件中。
B16.根据B15所述的装置,其特征在于,所述自修改处理模块进一步适于:
跳转至所述指定格式的文件以执行将所述二进制文件恢复至内存区域中相应的位置的步骤。
B17.根据B14-B16中任一项所述的装置,其特征在于,所述装置进一步包括:
权限修改模块,适于调用系统函数修改内存区域中的内存数据的操作权限。
B18.根据B14所述的装置,其特征在于,所述自修改处理模块进一步适于:
跳转至所述指定格式的文件以执行将内存区域中的还原处理所恢复的与待保护源码相对应的二进制文件设置为预设数值的步骤。
B19.根据B15所述的装置,其特征在于,所述自修改处理模块进一步适于:
当调用所述还原处理代码时,执行利用系统函数获取所述第一源码中调用所述还原处理代码的返回地址,根据所述返回地址将所述还原处理代码中的二进制文件对所对应的预设数值进行替换的步骤。
B20根据B11-B19中任一项所述的装置,其特征在于,所述指定格式的文件包括:ELF文件。
C21.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如A1-A10中任一项所述的代码自修改方法对应的操作。
D22.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使所述处理器执行如A1-A10中任一项所述的代码自修改方法对应的操作。