一种防止二进制文件被反编译的方法和装置制造方法

文档序号:6513569阅读:414来源:国知局
一种防止二进制文件被反编译的方法和装置制造方法【专利摘要】本发明公开了一种防止二进制文件被反编译的方法和装置,以较为简单的方式增强二进制程序的安全性。所述方法包括:查找二进制文件中待修改函数的执行入口;从所述待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令;更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数。由于二进制文件对应的指令的执行顺序被扰乱后,大大提高了对该二进制文件反编译的难度,因此,本发明实施例提供的方法能够采用比较简单的方式有效防止二进制文件被反编译,从而提高了软件产品的安全性。【专利说明】一种防止二进制文件被反编译的方法和装置【
技术领域
】[0001]本发明涉及计算机安全领域,具体涉及一种防止二进文件序被反编译的方法和装置。【
背景技术
】[0002]反编译属于计算机反向工程(ReverseEngineering)即计算机软件还原工程的范畴,是指通过对他人软件的目标程序(可执行文件)进行逆向分析、研究工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程和运行方法等设计要素,作为自己开发软件时的参考,或者直接用于自己的软件产品中。高级编程语言源程序经过编译变成可执行文件(executablefile)的过程就是编译的过程,反编译就是编译的逆过程,即由机器码(通常由汇编语言编写)一高级编程语言的过程。所谓机器码,是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合,它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器码具有灵活、直接执行和速度快等特点。一条指令就是机器码的一个语句,它是一组有意义的二进制代码,指令的基本格式为:操作码字段+地址码字段,其中,操作码指明了指令的操作性质及功能,地址码则给出了操作数或操作数的地址。[0003]通常情况下,反编译不是直接将可执行文件变成高级语言源代码,而是将其先转换成汇编程序。由于机器码是较为底层的计算机语言,通过修改机器码一般可以实现对可执行文件(executablefile),例如,.exe文件、.sys文件和.elf文件等的修改。因此,无论是从直接修改机器码的角度,还是从通过反编译可获得软件产品的设计要素这一角度,软件产品生产商希望其软件产品即所对应的机器码具有一定的保密性。只有机器码具有一定的保密性,才能增加修改机器码的难度,也可以增加反编译的难度。[0004]目前,在计算机安全领域,还没有出现一种简单易行且能够防止二进制程序被反编译的技术方案。【
发明内容】[0005]本发明实施例提供一种防止二进制文件被反编译的方法和装置,以较为简单的方式增强二进制程序的安全性。[0006]本发明实施例提供一种防止二进制文件被反编译的方法,所述包括:[0007]查找二进制文件中待修改函数的执行入口;[0008]从所述待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令;[0009]更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数。[0010]本发明另一实施例提供一种防止二进制文件被反编译的装置,所述装置包括:[0011]入口查找模块,用于查找二进制文件中待修改函数的执行入口;[0012]确定模块,用于从所述待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令;[0013]顺序变更模块,用于更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数。[0014]从上述本发明实施例可知,确定了在待修改函数中的执行顺序需要更改的若干指令后,将所述执行顺序需要更改的若干指令的执行顺序进行了更改,从而将所述待修改函数变成了指令的执行顺序打乱的函数,相当于通过生成新的机器码扰乱了二进制文件对应的二进制码。由于二进制文件对应的指令的执行顺序被扰乱后,大大提高了对该二进制文件反编译的难度,因此,本发明实施例提供的方法能够采用比较简单的方式有效防止二进制文件被反编译,从而提高了软件产品的安全性。【专利附图】【附图说明】[0015]图1是本发明实施例提供的防止二进制文件被反编译的方法的基本流程示意图;[0016]图2_a是本发明实施例提供的待修改函数包含的指令及其存放地址示意图;[0017]图2_b是本发明实施例提供的空白空间添加了待修改函数包含的指令和跳转指令的示意图;[0018]图2-c是本发明实施例提供的待修改函数中的指令的执行顺序改变后的示意图;[0019]图3是本发明实施例提供的防止二进制文件被反编译的装置逻辑结构示意图;[0020]图4是本发明另一实施例提供的防止二进制文件被反编译的装置逻辑结构示意图;[0021]图5是本发明另一实施例提供的防止二进制文件被反编译的装置逻辑结构示意图;[0022]图6是本发明另一实施例提供的防止二进制文件被反编译的装置逻辑结构示意图;[0023]图7是本发明另一实施例提供的防止二进制文件被反编译的装置逻辑结构示意图;[0024]图8_a是本发明另一实施例提供的防止二进制文件被反编译的装置逻辑结构示意图;[0025]图8_b是本发明另一实施例提供的防止二进制文件被反编译的装置逻辑结构示意图;[0026]图8-c是本发明另一实施例提供的防止二进制文件被反编译的装置逻辑结构示意图;[0027]图8-d是本发明另一实施例提供的防止二进制文件被反编译的装置逻辑结构示意图;[0028]图8_e是本发明另一实施例提供的防止二进制文件被反编译的装置逻辑结构示意图。【具体实施方式】[0029]本发明实施例提供一种防止二进制文件被反编译的方法,所述方法包括:查找二进制文件中待修改函数的执行入口;从所述待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令;更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数。本发明实施例还提供相应的一种防止二进制程序被反编译的装置。以下分别进行详细说明。[0030]本发明实施例的防止二进制文件被反编译的方法可应用于智能手机上的应用软件,例如Android智能手机上的应用软件,其基本流程可参考图1,主要包括步骤:[0031]SlOl,查找二进制文件中待修改函数的执行入口。[0032]对于现有的操作系统,应用程序或者可执行文件大部分是二进制文件,二进制文件由函数组成。一般而言,函数的执行入口是首条指令执行位置,因此,无论是对可执行文件进行修改还是反汇编,函数的执行入口都是一个重要的突破点。查找到函数的执行入口,意味着找到了该函数。在本发明实施例中,可以通过在待修改函数开始处插入指令内容为“movr2,r2;”的连续若干条(例如,连续4条)机器码,以查找到二进制文件中待修改函数的地址即执行入口。需要说明的是,在本发明实施例中,所谓待修改函数,是指其中的指令的执行顺序将要被修改的函数,并非指其执行逻辑或功能需要修改。[0033]S102,从待修改函数的执行入口开始,确定在待修改函数中的执行顺序需要更改的若干指令。[0034]对于机器码编写的程序,一旦其中的指令的执行顺序改变了,将大大增加计算机反向工程的实施难度,因此,通过更改指令的执行顺序,将能够提高软件产品的安全性能。[0035]作为本发明一个实施例,从待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令可以是:从所述待修改函数的执行入口开始,遍历所述待修改函数中的指令,若遍历的指令Cp存在于预设的指令表,则确定所述指令Cp为在所述待修改函数中的执行顺序需要更改的若干指令。也就是说,对于待保护的二进制文件,可以事先考察其函数中的指令,将其中需要在所述待修改函数中的执行顺序需要更改的若干指令预先存于一个指令表。在遍历待修改函数中的指令的过程中,不断将遍历得到的指令与指令表中预先存放的指令对比,若发现指令Cp存在于预设的指令表,则确定所述指令Cp为所述在所述待修改函数中的执行顺序需要更改的若干指令之一。[0036]在本发明另一实施例中,从待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令还可以是:从待修改函数的执行入口开始,遍历所述待修改函数中的指令,若遍历的指令Ck访问的数据为关键数据Dk,则确定所述指令Ck为在所述待修改函数中的执行顺序需要更改的若干指令。[0037]S103,更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数。[0038]当从待修改函数的执行入口开始,遍历所述待修改函数中的指令,若遍历的指令Cp存在于预设的指令表,则确定所述指令Cp为在所述待修改函数中的执行顺序需要更改的若干指令,作为从待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令的一个实施例时,相应地,作为本发明一个实施例,更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数可以包括如下S1031和S1032:[0039]S1031,指令Cp从地址Aepl处移离至地址Acp2处后,在所述地址Acpl处注入第一跳转指令,所述第一跳转指令执行后跳转至所述地址Ac52处执行所述指令Cp;[0040]S1032,在紧邻所述地址Act2处的下一地址Ac^3处注入第二跳转指令,所述第二跳转指令执行后跳转至所述地址Ac5l处的下一地址Ac54处执行所述地址Ac54处的指令。以下结合附图2-a至附图2-c,说明上述S1031和S1032的过程。[0041]如附图2-a所示,是待修改函数的函数主体,假设其包含的4条指令“ADDR4,R4,#1;”、“MOVR0,R5;”、“BLputs;”和“CMPR4,#0xlE;”是需要更改执行顺序的指令,该4条指令对应存放的地址分别是“000086CC”、“000086D0”、“000086D4”和“000086D8”,例如,“text:000086CCADDR4,R4,#1;”表示指令ADDR4,R4,#1存放在地址为000086CC的位置。以“ADDR4,R4,#1;”这条指令为例,假设在附图2-a所示的待修改函数的存储空间之外,还存在一定的空白空间,如附图2-b所示,空白空间的地址依次为“00008754”、“00008758”、“0000875C”和“00008760”。假设S1031提及的指令Cp具体是指令“ADDR4,R4,#1;”,S1031提及的地址Aepl具体是附图2-a示例的地址000086CC,S1031提及的地址Acp2具体是附图2-b示例的地址00008754,S1032提及的地址Aep3具体是附图2_b示例的地址00008758和/或地址0000875C,S1032提及的地址Acp4具体是附图2_a或附图2_c示例的地址000086D0,则指令“ADDR4,R4,#1;”从地址000086CC移离至地址00008754后,在地址000086CC处注入第一跳转指令即“Bloc_8754;”,如附图2_c所示。第一跳转指令“Bloc_8754;”是一个无条件跳转指令,其执行后跳转至地址00008754处执行指令“ADDR4,R4,#l;”。在紧邻附图2-b示例的地址00008754处的下一地址地址00008758和/或地址0000875C处注入第二跳转指令即“BEQloc_86D0;”和/或“BNEloc_86D0;”。由于“BEQloc_86D0;”表示“ADDR4,R4,#1;”执行后的结果为相等时跳转至地址000086D0处执行指令“MOVR0,R5;”,“BNEloc_86D0;”表示“ADDR4,R4,#1;”执行后的结果为不相等时跳转至地址000086D0处执行指令“MOVR0,R5;”,因此,第二跳转指令“BEQloc_86D0;”和/或“BNEloc_86D0;”执行后,其结果是均会跳转至地址000086CC处的下一地址000086D0处执行地址000086D0处的指令“MOVR0,R5;”。如若要更改指令“BLputs;”和“CMPR4,#0xlE;”的执行顺序,其方法类似。[0042]从上述说明可知,附图2-a示例的指令“ADDR4,R4,#1;”和“MOVR0,R5;”在待修改函数中的原执行顺序(即函数被修改前的执行顺序)是执行完“ADDR4,R4,#1;”后接着执行“MOVR0,R5;”,经过上述S1031和S1032的执行顺序的更改,变成了在修改后的函数中的执行顺序为依次执行指令“Bloc_8754;”、“ADDR4,R4,#1;”、“BEQloc_86D0;”(和/或“BNEloc_86D0;”)和“MOVR0,R5;”。[0043]当从待修改函数的执行入口开始,遍历所述待修改函数中的指令,若遍历的指令Ck访问的数据为关键数据Dk,则确定所述指令Ck为在所述待修改函数中的执行顺序需要更改的若干指令,作为从待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令的另一实施例时,相应地,作为本发明另一实施例,更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数可以包括如下S,1031和S,1032:[0044]S’1031,将关键数据Dk存入软件保护器并从所述待修改函数中清除所述关键数据Dk。[0045]S’1032,在存放所述指令Ck的地址Aekl处注入关键数据访问指令,所述关键数据访问指令执行后用于从所述软件保护器中读取所述关键数据Dk。[0046]指令执行时,其执行的对象可以是所访问的数据,因此,若将某个关键数据通过某种方式保护起来,再将该关键数据对应的指令转换为另一种类型的指令,通过该另一种类型的指令访问使用某种方式保护起来的关键数据,也能起到防止二进制文件被反编译的难度,从而提高软件产品的安全。例如,假设S’1031中的软件保护器是加密性能良好的硬件加密装置,在将关键数据Dk存入该软件保护器并从所述待修改函数中清除所述关键数据Dk后,若需要访问所述关键数据Dk,则必须使用在存放指令Ck的地址Add处注入的关键数据访问指令。由于使用该关键数据访问指令从所述软件保护器中读取所述关键数据Dk时可能需要一定的权限,因此,起到了防止二进制文件被反编译的难度,从而提高了软件产品的安全。[0047]上述实施例中,若在所述待修改函数中的执行顺序需要更改的若干指令之间预留地址空间较大,而函数自身包含的访问数据指令较少,则上述实施例提及的方法还包括:在所述预留地址空间填充垃圾指令,这些垃圾指令包括随机产生的语句和/或跳转随机位置的语句等,以此来增加待修改函数的复杂度,从而也能有效防止二进制文件被反编译。[0048]从上述本发明实施例提供的防止二进制文件被反编译的方法可知,确定了在待修改函数中的执行顺序需要更改的若干指令后,将所述执行顺序需要更改的若干指令的执行顺序进行了更改,从而将所述待修改函数变成了指令的执行顺序打乱的函数,相当于通过生成新的机器码扰乱了二进制文件对应的二进制码。由于二进制文件对应的指令的执行顺序被扰乱后,大大提高了对该二进制文件反编译的难度,因此,本发明实施例提供的方法能够采用比较简单的方式有效防止二进制文件被反编译,从而提高了软件产品的安全性。[0049]下面对用于执行上述防止二进制文件被反编译的方法的本发明实施例的防止二进制文件被反编译的装置进行说明,其基本逻辑结构参考图3。为了便于说明,仅仅示出了与本发明实施例相关的部分。附图3示例的防止二进制文件被反编译的装置主要包括入口查找模块301、确定模块302和顺序变更模块303,各模块详细说明如下:[0050]入口查找模块301,用于查找二进制文件中待修改函数的执行入口;[0051]确定模块302,用于从所述待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令;[0052]顺序变更模块303,用于更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数。[0053]需要说明的是,以上附图3示例的防止二进制文件被反编译的装置的实施方式中,各功能模块的划分仅是举例说明,实际应用中可以根据需要,例如相应硬件的配置要求或者软件的实现的便利考虑,而将上述功能分配由不同的功能模块完成,即将所述防止二进制文件被反编译的装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。而且,实际应用中,本实施例中的相应的功能模块可以是由相应的硬件实现,也可以由相应的硬件执行相应的软件完成,例如,前述的入口查找模块,可以是具有执行前述查找二进制文件中待修改函数的执行入口的硬件,例如入口查找器,也可以是能够执行相应计算机程序从而完成前述功能的一般处理器或者其他硬件设备;再如前述的顺序变更模块,可以是具有执行前述用于更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数功能的硬件,例如顺序变更器,也可以是能够执行相应计算机程序从而完成前述功能的一般处理器或者其他硬件设备(本说明书提供的各个实施例都可应用上述描述原则)。[0054]附图3示例的防止二进制文件被反编译的装置中,确定模块302可以包括第一遍历单元401,如附图4所示本发明另一实施例提供的防止二进制文件被反编译的装置。第一遍历单元401用于从所述待修改函数的执行入口开始,遍历所述待修改函数中的指令,若遍历的指令Cp存在于预设的指令表,则确定所述指令Cp为在所述待修改函数中的执行顺序需要更改的若干指令。[0055]附图4示例的防止二进制文件被反编译的装置中,顺序变更模块303可以包括第一指令注入单元501和第二指令注入单元502,如附图5所示本发明另一实施例提供的防止二进制文件被反编译的装置,其中:[0056]第一指令注入单元501,用于所述指令Cp从地址Aepl处移离至地址Aep2处后,在所述地址Act1处注入第一跳转指令,所述第一跳转指令执行后跳转至所述地址Act2处执行所述指令Cp;[0057]第二指令注入单元502,用于在紧邻所述地址Ac52处的下一地址Ac53处注入第二跳转指令,所述第二跳转指令执行后跳转至所述地址Act1处的下一地址Acp4处执行所述地址Αερ4处的指令。[0058]附图3示例的防止二进制文件被反编译的装置中,确定模块302可以包括第二遍历单元601,如附图6所示本发明另一实施例提供的防止二进制文件被反编译的装置。第二遍历单元601用于从所述待修改函数的执行入口开始,遍历所述待修改函数中的指令,若遍历的指令Ck访问的数据为关键数据Dk,则确定所述指令Ck为在所述待修改函数中的执行顺序需要更改的若干指令。[0059]附图6示例的防止二进制文件被反编译的装置中,顺序变更模块303可以包括数据处理单元701和第三指令注入单元702,如附图7所示本发明另一实施例提供的防止二进制文件被反编译的装置,其中:[0060]数据处理单元701,用于将所述关键数据Dk存入软件保护器并从所述待修改函数中清除所述关键数据Dk;[0061]第三指令注入单元702,用于在存放所述指令Ck的地址Add处注入关键数据访问指令,所述关键数据访问指令执行后用于从所述软件保护器中读取所述关键数据Dk。[0062]若上述实施例中,在所述待修改函数中的执行顺序需要更改的若干指令之间预留地址空间较大,附图3至附图7任一示例的防止二进制文件被反编译的装置还包括垃圾指令填充模块801,如附图8-a至附图8-e任一示例的防止二进制文件被反编译的装置。垃圾指令填充模块801用于在所述预留地址空间填充垃圾指令,所述垃圾指令包括随机产生的语句和/或跳转随机位置的语句。[0063]本发明实施例还给出一种终端,该终端可以用于实施上述实施例中提供的防止二进制文件被反编译的方法。具体来讲:终端可以包括有一个或一个以上计算机可读存储介质的存储器、一个或者一个以上处理核心的处理器等部件。本领域技术人员可以理解,上述终端结构并不构成对终端的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:[0064]存储器可用于存储软件程序以及模块,处理器通过运行存储在存储器的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器还可以包括存储器控制器,以提供处理器对存储器的访问。[0065]尽管未示出,终端还可以包括摄像头、蓝牙模块等,在此不再赘述。具体在本实施例中,终端的显示单元是触摸屏显示器,终端还包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行述一个或者一个以上程序包含用于进行以下操作的指令:[0066]查找二进制文件中待修改函数的执行入口;[0067]从所述待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令;[0068]更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数。[0069]假设上述为第一种可能的实施方式,则在第一种可能的实施方式作为基础而提供的第二种可能的实施方式中,所述终端的存储器中,还包含用于执行以下操作的指令:[0070]从所述待修改函数的执行入口开始,遍历所述待修改函数中的指令,若遍历的指令Cp存在于预设的指令表,则确定所述指令Cp为在所述待修改函数中的执行顺序需要更改的若干指令。[0071]假设上述为第二种可能的实施方式,则在第二种可能的实施方式作为基础而提供的第三种可能的实施方式中,所述终端的存储器中,还包含以下指令:[0072]所述指令Cp从地址Acpl处移离至地址Act2处后,在所述地址Acpl处注入第一跳转指令,所述第一跳转指令执行后跳转至所述地址Ac52处执行所述指令Cp;[0073]在紧邻所述地址Ac52处的下一地址Ac53处注入第二跳转指令,所述第二跳转指令执行后跳转至所述地址Act1处的下一地址Acp4处执行所述地址Acp4处的指令。[0074]假设上述为第二种可能的实施方式,则在第二种可能的实施方式作为基础而提供的第四种可能的实施方式中,所述终端的存储器中,还包含以下指令:[0075]从所述待修改函数的执行入口开始,遍历所述待修改函数中的指令,若遍历的指令Ck访问的数据为关键数据Dk,则确定所述指令Ck为在所述待修改函数中的执行顺序需要更改的若干指令。[0076]假设上述为第四种可能的实施方式,则在第四种可能的实施方式作为基础而提供的第五种可能的实施方式中,所述终端的存储器中,还包含以下指令:[0077]将所述关键数据Dk存入软件保护器并从所述待修改函数中清除所述关键数据Dk;[0078]在存放所述指令Ck的地址Add处注入关键数据访问指令,所述关键数据访问指令执行后用于从所述软件保护器中读取所述关键数据Dk。[0079]若所述在所述待修改函数中的执行顺序需要更改的若干指令之间预留地址空间较大,在第一、第二、第三、第四或者第五种可能的实施方式作为基础而提供的第六种可能的实施方式中,所述终端的存储器中,还包含以下指令:[0080]在所述预留地址空间填充垃圾指令,所述垃圾指令包括随机产生的语句和/或跳转随机位置的语句。[0081]作为另一方面,本发明再一实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中的存储器中所包含的计算机可读存储介质;也可以是单独存在,未装配入终端中的计算机可读存储介质。所述计算机可读存储介质存储有一个或者一个以上程序,所述一个或者一个以上程序被一个或者一个以上的处理器用来执行一个防止二进制文件被反编译的方法,所述方法包括:[0082]查找二进制文件中待修改函数的执行入口;[0083]从所述待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令;[0084]更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数。[0085]假设上述为第一种可能的实施方式,则在第一种可能的实施方式作为基础而提供的第二种可能的实施方式中,所述从所述待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令,包括:[0086]从所述待修改函数的执行入口开始,遍历所述待修改函数中的指令,若遍历的指令Cp存在于预设的指令表,则确定所述指令Cp为在所述待修改函数中的执行顺序需要更改的若干指令。[0087]假设上述为第二种可能的实施方式,则在第二种可能的实施方式作为基础而提供的第三种可能的实施方式中,所述更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数,包括:[0088]所述指令Cp从地址Acpl处移离至地址Act2处后,在所述地址Acpl处注入第一跳转指令,所述第一跳转指令执行后跳转至所述地址Ac52处执行所述指令Cp;[0089]在紧邻所述地址Acp2处的下一地址Acp3处注入第二跳转指令,所述第二跳转指令执行后跳转至所述地址Act1处的下一地址Acp4处执行所述地址Acp4处的指令。[0090]假设上述为第二种可能的实施方式,则在第二种可能的实施方式作为基础而提供的第四种可能的实施方式中,所述从所述待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令,包括:[0091]从所述待修改函数的执行入口开始,遍历所述待修改函数中的指令,若遍历的指令Ck访问的数据为关键数据Dk,则确定所述指令Ck为在所述待修改函数中的执行顺序需要更改的若干指令。[0092]假设上述为第四种可能的实施方式,则在第四种可能的实施方式作为基础而提供的第五种可能的实施方式中,所述更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数,包括:[0093]将所述关键数据Dk存入软件保护器并从所述待修改函数中清除所述关键数据Dk;[0094]在存放所述指令Ck的地址Add处注入关键数据访问指令,所述关键数据访问指令执行后用于从所述软件保护器中读取所述关键数据Dk。[0095]若所述在所述待修改函数中的执行顺序需要更改的若干指令之间预留地址空间较大,在第一、第二、第三、第四或者第五种可能的实施方式作为基础而提供的第六种可能的实施方式中,所述方法还包括:[0096]在所述预留地址空间填充垃圾指令,所述垃圾指令包括随机产生的语句和/或跳转随机位置的语句。[0097]需要说明的是,上述装置各模块/单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其带来的技术效果与本发明方法实施例相同,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。[0098]本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,ReadOnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁盘或光盘等。[0099]以上对本发明实施例所提供的一种防止二进制文件被反编译的方法和装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。【权利要求】1.一种防止二进制文件被反编译的方法,其特征在于,所述方法包括:查找二进制文件中待修改函数的执行入口;从所述待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令;更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数。2.根据权利要求1所述的方法,其特征在于,所述从所述待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令,包括:从所述待修改函数的执行入口开始,遍历所述待修改函数中的指令,若遍历的指令Cp存在于预设的指令表,则确定所述指令Cp为在所述待修改函数中的执行顺序需要更改的若干指令。3.根据权利要求2所述的方法,其特征在于,所述更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数,包括:所述指令Cp从地址Act1处移离至地址Act2处后,在所述地址Act1处注入第一跳转指令,所述第一跳转指令执行后跳转至所述地址Act2处执行所述指令Cp;在紧邻所述地址Ac52处的下一地址Act3处注入第二跳转指令,所述第二跳转指令执行后跳转至所述地址Act1处的下一地址Acp4处执行所述地址Acp4处的指令。4.根据权利要求1所述的方法,其特征在于,所述从所述待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令,包括:从所述待修改函数的执行入口开始,遍历所述待修改函数中的指令,若遍历的指令Ck访问的数据为关键数据Dk,则确定所述指令Ck为在所述待修改函数中的执行顺序需要更改的若干指令。5.根据权利要求4所述的方法,其特征在于,所述更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数,包括:将所述关键数据Dk存入软件保护器并从所述待修改函数中清除所述关键数据Dk;在存放所述指令Ck的地址Add处注入关键数据访问指令,所述关键数据访问指令执行后用于从所述软件保护器中读取所述关键数据Dk。6.根据权利要求1至5任意一项所述的方法,其特征在于,若所述在所述待修改函数中的执行顺序需要更改的若干指令之间预留地址空间较大,则所述方法还包括:在所述预留地址空间填充垃圾指令,所述垃圾指令包括随机产生的语句和/或跳转随机位置的语句。7.一种防止二进制文件被反编译的装置,其特征在于,所述装置包括:入口查找模块,用于查找二进制文件中待修改函数的执行入口;确定模块,用于从所述待修改函数的执行入口开始,确定在所述待修改函数中的执行顺序需要更改的若干指令;顺序变更模块,用于更改所述确定的若干指令在所述待修改函数中的执行顺序,将所述待修改函数变成指令的执行顺序打乱的函数。8.根据权利要求7所述的装置,其特征在于,所述确定模块包括:第一遍历单元,用于从所述待修改函数的执行入口开始,遍历所述待修改函数中的指令,若遍历的指令Cp存在于预设的指令表,则确定所述指令Cp为在所述待修改函数中的执行顺序需要更改的若干指令。9.根据权利要求8所述的装置,其特征在于,所述顺序变更模块包括:第一指令注入单元,用于所述指令Cp从地址Act1处移离至地址Act2处后,在所述地址Acpl处注入第一跳转指令,所述第一跳转指令执行后跳转至所述地址Ac52处执行所述指令Cp;第二指令注入单元,用于在紧邻所述地址Ac52处的下一地址Act3处注入第二跳转指令,所述第二跳转指令执行后跳转至所述地址Ac5l处的下一地址Acp4处执行所述地址Acp4处的指令。10.根据权利要求7所述的装置,其特征在于,所述确定模块包括:第二遍历单元,用于从所述待修改函数的执行入口开始,遍历所述待修改函数中的指令,若遍历的指令Ck访问的数据为关键数据Dk,则确定所述指令Ck为在所述待修改函数中的执行顺序需要更改的若干指令。11.根据权利要求10所述的装置,其特征在于,所述顺序变更模块包括:数据处理单元,用于将所述关键数据Dk存入软件保护器并从所述待修改函数中清除所述关键数据Dk;第三指令注入单元,用于在存放所述指令Ck的地址Add处注入关键数据访问指令,所述关键数据访问指令执行后用于从所述软件保护器中读取所述关键数据Dk。12.根据权利要求7至11任意一项所述的装置,其特征在于,若所述在所述待修改函数中的执行顺序需要更改的若干指令之间预留地址空间较大,则所述装置还包括:垃圾指令填充模块,用于在所述预留地址空间填充垃圾指令,所述垃圾指令包括随机产生的语句和/或跳转随机位置的语句。【文档编号】G06F21/14GK104517044SQ201310450080【公开日】2015年4月15日申请日期:2013年9月27日优先权日:2013年9月27日【发明者】韩景维申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1