首页 / 专利库 / 企业组织 / 流程图 / 混淆代码的优化方法及装置、计算设备、存储介质

混淆代码的优化方法及装置、计算设备、存储介质

阅读:482发布:2020-05-12

专利汇可以提供混淆代码的优化方法及装置、计算设备、存储介质专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种混淆代码的优化方法及装置、计算设备、存储介质,方法包括:根据混淆后的代码生成对应的代码模 块 流程图 ;根据代码模块流程图进行优化处理,以去除其中包含的混淆代码;优化处理包括合并代码模块、删除冗余流程对应的代码模块、和/或去除混淆代码;根据优化后的代码模块流程图进行代码重组,得到优化后的代码。将由于混淆代码被打乱的代码流程还原为混淆前的形式,方便对代码进行逆向分析,提高逆向分析的工作效率。进一步,通过将代码转化为代码模块流程图的方式,使得本发明具有良好的拓展性,使其不局限于具体的代码或具体的平台等,具有良好的跨平台性,适用于不同平台的混淆代码的优化。,下面是混淆代码的优化方法及装置、计算设备、存储介质专利的具体信息内容。

1.一种混淆代码的优化方法,其包括:
根据混淆后的代码生成对应的代码模流程图;其中,所述代码模块流程图中记录各个代码模块间的调用关系;
根据所述代码模块流程图进行优化处理,以去除其中包含的混淆代码;所述优化处理包括合并代码模块、删除冗余流程对应的代码模块、和/或去除混淆代码;
根据优化后的代码模块流程图进行代码重组,得到优化后的代码。
2.根据权利要求1所述的方法,其中,所述根据混淆后的代码生成对应的代码模块流程图具体为:根据混淆后的代码,利用IDA平台生成对应的代码模块流程图。
3.根据权利要求1所述的方法,其中,所述根据所述代码模块流程图进行优化处理,以去除其中包含的混淆代码进一步包括:
遍历所述代码模块流程图,查找其中调用关系为单线调用且代码模块为非结尾代码模块的多个代码模块;
根据调用关系将所述多个代码模块进行合并,得到合并后的代码模块。
4.根据权利要求1所述的方法,其中,所述根据所述代码模块流程图进行优化处理,以去除其中包含的混淆代码进一步包括:
模拟执行所述混淆后的代码,得到模拟执行被调用的代码模块列表;
去除被调用的代码模块列表外的代码模块。
5.根据权利要求3所述的方法,其中,所述根据调用关系将所述多个代码模块进行合并,得到合并后的代码模块进一步包括:
将所述多个代码模块按照调用关系的前后顺序合并为一个代码模块,并修改合并后的代码模块的调用关系;其中,所述合并后的代码模块的调用关系的后调用代码模块修改为所述多个代码模块中调用顺序最后的一个代码模块的后调用代码模块,所述合并后的代码模块的调用关系的前调用代码模块修改为所述多个代码模块中调用顺序最前的一个代码模块的前调用代码模块。
6.根据权利要求4所述的方法,其中,所述根据所述代码模块流程图进行优化处理,以去除其中包含的混淆代码进一步包括:
获取所述混淆后的代码所使用的混淆寄存器;
去除与所述混淆寄存器相关的混淆代码。
7.根据权利要求4所述的方法,其中,所述模拟执行所述混淆后的代码,得到模拟执行被调用的代码模块列表进一步包括:
若所述混淆后的代码中条件分支包含外部参数和/或全局变量时,将所述条件分支对应的代码模块列入模拟执行被调用的代码模块列表。
8.一种混淆代码的优化装置,其包括:
生成模块,适于根据混淆后的代码生成对应的代码模块流程图;其中,所述代码模块流程图中记录各个代码模块间的调用关系;
优化模块,适于根据所述代码模块流程图进行优化处理,以去除其中包含的混淆代码;
所述优化处理包括合并代码模块、删除冗余流程对应的代码模块、和/或去除混淆代码;
重组模块,适于根据优化后的代码模块流程图进行代码重组,得到优化后的代码。
9.一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-7中任一项所述的混淆代码的优化方法对应的操作。
10.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如权利要求1-7中任一项所述的混淆代码的优化方法对应的操作。

说明书全文

混淆代码的优化方法及装置、计算设备、存储介质

技术领域

[0001] 本发明涉及软件领域,具体涉及一种混淆代码的优化方法及装置、计算设备、存储介质。

背景技术

[0002] Obfuscator LLVM(以下简称OLLVM)是瑞士西北应用科技大学安全实验室于2010年6月份发起的项目,这个项目的目标是提供一个LLVM编译套件的开源分支,能够通过代码混淆和防篡改,增加对逆向工程的难度,提供更高的软件安全性。OLLVM的前端可以使用不同的编译工具对代码文件做词法分析以形成抽象语法树AST,中间表示IR层(intermediate representation)实现对代码的混淆操作,通过一系列的Pass对IR做优化,混淆IR;后端负责将优化好的IR解释成对应平台的机器码,实现后端依据IR生成的目标代码被混淆。得益于LLVM的设计,OLLVM适用LLVM支持的所有语言(C,C++,Objective-C,Ada和Fortran)和目标平台(x86,x86-64,PowerPC,PowerPC-64,ARM,Thumb,SPARC,Alpha,CellSPU,MIPS,MSP430,SystemZ和XCore)。
[0003] OLLVM在国内移动安全,尤其是安全加固上的使用越来越广泛,OLLVM的混淆和反混淆也被视为比较高等的知识之一,让很多人感到无从下手,望尘莫及。逆向人员在分析被混淆的代码的各个函数时,需要对寄存器和堆栈的当前数值进行大量的记录以确定当前的环境状态。由于函数环境复杂,导致分析效率低下,甚至无法展开分析工作。

发明内容

[0004] 鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的混淆代码的优化方法及装置、计算设备、存储介质。
[0005] 根据本发明的一个方面,提供了一种混淆代码的优化方法,其包括:
[0006] 根据混淆后的代码生成对应的代码模流程图;其中,代码模块流程图中记录各个代码模块间的调用关系;
[0007] 根据代码模块流程图进行优化处理,以去除其中包含的混淆代码;优化处理包括合并代码模块、删除冗余流程对应的代码模块、和/或去除混淆代码;
[0008] 根据优化后的代码模块流程图进行代码重组,得到优化后的代码。
[0009] 根据本发明的另一方面,提供了一种混淆代码的优化装置,其包括:
[0010] 生成模块,适于根据混淆后的代码生成对应的代码模块流程图;其中,代码模块流程图中记录各个代码模块间的调用关系;
[0011] 优化模块,适于根据代码模块流程图进行优化处理,以去除其中包含的混淆代码;优化处理包括合并代码模块、删除冗余流程对应的代码模块、和/或去除混淆代码;
[0012] 重组模块,适于根据优化后的代码模块流程图进行代码重组,得到优化后的代码。
[0013] 根据本发明的又一方面,提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;
[0014] 存储器用于存放至少一可执行指令,可执行指令使处理器执行上述混淆代码的优化方法对应的操作。
[0015] 根据本发明的再一方面,提供了一种计算机存储介质,存储介质中存储有至少一可执行指令,可执行指令使处理器执行如上述混淆代码的优化方法对应的操作。
[0016] 根据本发明提供的混淆代码的优化方法及装置、计算设备、存储介质,将混淆后的代码生成对应的代码模块流程图,根据代码模块流程图将各个代码模块进行优化,对代码进行重组等方式,实现对混淆代码的优化,将由于混淆代码被打乱的代码流程还原为混淆前的形式,方便对代码进行逆向分析,提高逆向分析的工作效率。进一步,通过将代码转化为代码模块流程图的方式,使得本发明具有良好的拓展性,使其不局限于具体的代码或具体的平台等,具有良好的跨平台性,适用于不同平台的混淆代码的优化。
[0017] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。附图说明
[0018] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0019] 图1示出了根据本发明一个实施例的混淆代码的优化方法的流程图;
[0020] 图2示出了根据混淆后的代码生成代码模块流程图的示意图;
[0021] 图3示出了根据本发明另一个实施例的混淆代码的优化方法的流程图;
[0022] 图4-图6示出了本发明对混淆代码进行优化处理的示意图;
[0023] 图7示出了根据本发明一个实施例的混淆代码的优化装置的功能框图
[0024] 图8示出了根据本发明一个实施例的一种计算设备的结构示意图。

具体实施方式

[0025] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0026] 图1示出了根据本发明一个实施例的混淆代码的优化方法的流程图。如图1所示,混淆代码的优化方法具体包括如下步骤:
[0027] 步骤S101,根据混淆后的代码生成对应的代码模块流程图。
[0028] 根据混淆后的代码,可以利用IDA平台生成对应的代码模块流程图。IDA平台(Interactive Disassembler,交互式反汇编器)是一个强大的跨平台逆向分析调试工具集,不受具体的代码语言或平台限制,可以支持多种不同的代码语言和目标平台。IDA平台可以利用如VCG图形库里面的WinGrah32工具来绘制代码模块流程图。其中,代码模块流程图中记录各个代码模块间的调用关系。如图2所示,左侧为混淆后的代码,右侧为该混淆后的代码对应的代码模块流程图。IDA平台可以直接根据混淆后的代码间执行逻辑的调用关系,生成包含各个代码模块间的调用关系的代码模块流程图。从图2所示的代码模块流程图中,可以清楚的看到各个代码模块前后的调用关系。IDA平台根据代码间的执行逻辑进行处理,而无需针对具体的代码。
[0029] 步骤S102,根据代码模块流程图进行优化处理,以去除其中包含的混淆代码。
[0030] 根据生成的代码模块流程图,对其中的代码模块进行优化处理。具体的,优化处理包括如合并其中的多个代码模块、删除冗余流程对应的代码模块、去除混淆代码等处理。合并其中的多个代码模块以便合并代码处理流程,方便后续对处理流程进行简化,以简化逆向分析工作量;删除冗余流程对应的代码模块可以根据代码执行逻辑获取到实际执行流程,从而删除不会被执行到的冗余流程对应的代码模块,这些代码模块一般是由于增加混淆代码所产生的分支。删除这些代码模块可以减少无用的分支,完成对代码的精简;去除混淆代码可以根据如OLLVM混淆原理查找到对应的混淆代码进行去除,也可以根据代码执行逻辑,将其中不影响代码正常执行但多余的对逆向分析易造成困扰的代码删除等。以上各优化处理可以根据实际情况执行,不限定具体执行顺序、次数,可以循环执行,直至无法再进行优化处理为止。
[0031] 步骤S103,根据优化后的代码模块流程图进行代码重组,得到优化后的代码。
[0032] 优化后的代码模块流程图所包含的各个代码模块顺序会发生改变,对应的,需要将各个代码模块对应的代码进行重组。按照各个代码模块的调用顺序重新调整/修改对应的代码,以保障代码的正常执行。在对代码进行重组时,根据代码执行逻辑,相应的调整代码模块对应的代码在整个代码中的位置,将代码移动至合适的位置处;或者,还需要根据代码执行逻辑,如if else分支执行逻辑,在对应的else分支代码模块前增加else代码语句,将else分支代码模块包含在else代码语句所在的执行逻辑下,以便正常执行等。代码重组包括对代码进行的顺序调整、代码语句的删除、修改、添加等操作,具体需要根据实现代码执行逻辑、分支处理等情况进行重组,此处不作限定。
[0033] 对代码进行重组后,可以得到优化后的代码,还原混淆代码所打乱的代码处理流程,方便对代码进行逆向分析等处理,减少逆向分析的工作量。
[0034] 根据本发明提供的混淆代码的优化方法,将混淆后的代码生成对应的代码模块流程图,根据代码模块流程图将各个代码模块进行优化,对代码进行重组等方式,实现对混淆代码的优化,将由于混淆代码被打乱的代码流程还原为混淆前的形式,方便对代码进行逆向分析,提高逆向分析的工作效率。进一步,通过将代码转化为代码模块流程图的方式,使得本发明具有良好的拓展性,使其不局限于具体的代码或具体的平台等,具有良好的跨平台性,适用于不同平台的混淆代码的优化。
[0035] 图3示出了根据本发明另一个实施例的混淆代码的优化方法的流程图。如图3所示,混淆代码的优化方法具体包括如下步骤:
[0036] 步骤S301,根据混淆后的代码,利用IDA平台生成对应的代码模块流程图。
[0037] 该步骤参照图1实施例中的步骤S101的描述,在此不再赘述。
[0038] 步骤S302,遍历代码模块流程图,查找其中调用关系为单线调用且代码模块为非结尾代码模块的多个代码模块。
[0039] 如图4左侧所示的代码模块15与代码模块16的调用关系为一对一的单线调用,即在执行代码模块15后直接执行代码模块16。代码模块24为结尾代码模块,即执行代码模块24后整个流程执行完毕。以图4左侧所示的代码模块流程图为例,对代码模块流程图所包含的各个代码模块均进行遍历,从中查找到调用关系为单线调用且代码模块为非结尾代码模块的多个代码模块,查找到代码模块15和代码模块16。
[0040] 当代码模块流程图中存在多个分支的代码模块时,需要对每个分支的代码模块均进行遍历,从中查找到调用关系为单线调用且代码模块为非结尾代码模块的多个代码模块。对查找到的多个代码模块根据其相互的调用关系分别记录,方便后续根据调用关系对多个代码模块分别进行合并。
[0041] 步骤S303,根据调用关系将多个代码模块进行合并,得到合并后的代码模块。
[0042] 如图4右侧所示,将找到的代码模块15和代码模块16按照两者的调用关系前后顺序进行合并,得到合并的代码模块。同时,还需要将代码模块15对应的代码和代码模块16对应的代码也进行合并,将代码模块16对应的代码按照调用关系前后顺序移动至代码模块15对应的代码后面。
[0043] 除图4右侧所示的内容外,在将多个代码模块按照调用关系的前后顺序合并为一个代码模块后,还需要修改合并后的代码模块的调用关系。将合并后的代码模块的调用关系的后调用代码模块修改为多个代码模块中调用顺序最后的一个代码模块的后调用代码模块,将合并后的代码模块的调用关系的前调用代码模块修改为多个代码模块中调用顺序最前的一个代码模块的前调用代码模块。以图4右侧所示的代码模块15和代码模块16为例,在将代码模块15和代码模块16按照两者的调用关系前后顺序进行合并后,将合并得到的代码模块的调用关系的后调用代码模块修改为代码模块24,即代码模块16的后调用代码模块,将合并得到的代码模块的调用关系的前调用代码模块修改为代码模块15的前调用代码模块(图中未示出)。
[0044] 步骤S304,模拟执行混淆后的代码,得到模拟执行被调用的代码模块列表。
[0045] 混淆后的代码中包括了实际执行的流程,也包括了用于混淆而不真正执行的流程。若仅根据代码来判断哪些是实际执行的流程,哪些是用于混淆而不被真正执行的流程需要花费大量的时间和精,且不能通用于所有混淆后的代码。因此,本实施例基于代码模块流程图中的各个代码模块,通过模拟执行的方式,将混淆后的代码模拟执行,可以得到模拟执行被调用到的所有代码模块列表。代码模块列表中记录了模拟执行时,会被调用到的各个代码模块,以及代码模块间的调用关系。
[0046] 进一步,若混淆后的代码中存在条件分支时,根据条件分支确定模拟执行调用到的代码模块。若混淆后的代码中条件分支包含外部参数、全局变量时,考虑到外部参数或全局变量会有不同的赋值情况,条件分支会根据外部参数或全局变量的不同赋值执行不同的条件分支,因此,需要将条件分支对应的代码模块均列入模拟执行被调用的代码模块列表。如图5左侧所示,当代码模块0的条件分支包含外部参数或全局变量时,根据外部参数或全局变量的不同赋值分别执行对应的代码模块1和代码模块2时,得到模拟执行被调用到的代码模块列表包括如图5右侧所示的代码模块0调用代码模块1和代码模块0调用代码模块2。
[0047] 进一步,在模拟执行混淆后的代码之前,还可以根据混淆代码所使用的如OLLVM混淆原理特征,获取混淆后的代码所使用的混淆寄存器。根据混淆寄存器直接从混淆后的代码中去除与混淆寄存器相关的混淆代码,提高对混淆代码的处理效率。
[0048] 步骤S305,去除被调用的代码模块列表外的代码模块。
[0049] 根据得到的模拟执行被调用的代码模块列表,将被调用的代码模块列表外的其他代码模块从代码模块流程图中去除。如图6所示,得到的模拟执行被调用的代码模块列表包括了代码模块3和代码模块5,将代码模块6从代码模块流程图中去除,得到如图6中间所示的代码模块3调用代码模块5。
[0050] 以上步骤S302-S305可以循环执行,如在执行步骤S305去除被调用的代码模块列表外的代码模块后,执行步骤S302和S303,重新遍历代码模块流程图,查找其中调用关系为单线调用且代码模块为非结尾代码模块的多个代码模块,根据调用关系将多个代码模块进行合并,得到合并后的代码模块。如图6所示,在去除代码模块6之后,由于代码模块3和代码模块5的调用关系为单线调用且两代码模块为非结尾代码模块,将代码模块3和代码模块5进行合并,得到如图6右侧所示的合并后的代码模块。以上为举例说明,具体执行根据实施情况进行设置,此处不做限定。
[0051] 步骤S306,对合并后的代码模块对应的代码进行识别,按照预设去除规则去除其中的混淆代码。
[0052] 对于合并后的代码模块,由于多个代码模块对应的代码也进行了合并,合并的代码中会存在多条重复的代码,影响逆向分析。需要对合并后的代码模块对应的代码进行识别,按照预设去除规则去除其中重复的造成混淆的混淆代码。其中,预设去除规则包括:去除对同一变量进行重复赋值的代码、去除利用寄存器进行重复赋值的代码等。如在一个合并后的代码模块中,存在多条赋值代码a=3,但变量a在赋值后没有进行其他处理,可以仅保留一条代码,去除其他重复赋值的代码;或者,利用寄存器为同一变量进行重复赋值的代码,可以仅保留一条代码,去除其他重复赋值的代码。以上为举例说明,在去除时,需要去除其中不影响正常执行但对代码造成混淆的混淆代码,减少逆向分析的工作量。
[0053] 步骤S307,根据优化后的代码模块流程图进行代码重组,得到优化后的代码。
[0054] 该步骤参照图1实施例步骤S103的描述,在此不再赘述。
[0055] 根据本发明提供的混淆代码的优化方法,基于代码的执行逻辑,对代码模块流程图中的代码模块进行合并、删除等优化处理,去除其中混淆代码。一方面本发明不局限于具体的代码,具有良好的拓展性;另一方面,本发明利用IDA平台,做到跨平台的混淆代码优化。基于本发明可以大大减少逆向分析的工作量,提供逆向分析的分析效率。
[0056] 图7示出了根据本发明一个实施例的混淆代码的优化装置的功能框图。如图7所示,混淆代码的优化装置包括如下模块:
[0057] 生成模块710,适于根据混淆后的代码生成对应的代码模块流程图;其中,代码模块流程图中记录各个代码模块间的调用关系。
[0058] 优化模块720,适于根据代码模块流程图进行优化处理,以去除其中包含的混淆代码;优化处理包括合并代码模块、删除冗余流程对应的代码模块、和/或去除混淆代码。
[0059] 重组模块730,适于根据优化后的代码模块流程图进行代码重组,得到优化后的代码。
[0060] 可选地,生成模块710进一步适于:根据混淆后的代码,利用IDA平台生成对应的代码模块流程图。
[0061] 可选地,优化模块720进一步适于:遍历代码模块流程图,查找其中调用关系为单线调用且代码模块为非结尾代码模块的多个代码模块;根据调用关系将多个代码模块进行合并,得到合并后的代码模块。
[0062] 可选地,优化模块720进一步适于:模拟执行混淆后的代码,得到模拟执行被调用的代码模块列表;去除被调用的代码模块列表外的代码模块。
[0063] 可选地,优化模块720进一步适于:将多个代码模块按照调用关系的前后顺序合并为一个代码模块,并修改合并后的代码模块的调用关系;其中,合并后的代码模块的调用关系的后调用代码模块修改为多个代码模块中调用顺序最后的一个代码模块的后调用代码模块,合并后的代码模块的调用关系的前调用代码模块修改为多个代码模块中调用顺序最前的一个代码模块的前调用代码模块。
[0064] 可选地,优化模块720进一步适于:获取混淆后的代码所使用的混淆寄存器;去除与混淆寄存器相关的混淆代码。
[0065] 可选地,优化模块720进一步适于:若混淆后的代码中条件分支包含外部参数和/或全局变量时,将条件分支对应的代码模块列入模拟执行被调用的代码模块列表。
[0066] 可选地,优化模块720进一步适于:对合并后的代码模块对应的代码进行识别,按照预设去除规则去除其中的混淆代码;其中,预设去除规则包括:去除对同一变量进行重复赋值的代码和/或去除利用寄存器进行重复赋值的代码。
[0067] 可选地,重组模块730进一步适于:根据优化后的代码模块流程图,按照各个代码模块的调用顺序重新调整/修改对应的代码,以保障代码的正常执行。
[0068] 以上各模块的描述参照方法实施例中对应的描述,在此不再赘述。
[0069] 本申请还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的混淆代码的优化方法。
[0070] 图8示出了根据本发明一个实施例的一种计算设备的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。
[0071] 如图8所示,该计算设备可以包括:处理器(processor)802、通信接口(Communications Interface)804、存储器(memory)806、以及通信总线808。
[0072] 其中:
[0073] 处理器802、通信接口804、以及存储器806通过通信总线808完成相互间的通信。
[0074] 通信接口804,用于与其它设备比如客户端或其它服务器等的网元通信。
[0075] 处理器802,用于执行程序810,具体可以执行上述混淆代码的优化方法实施例中的相关步骤。
[0076] 具体地,程序810可以包括程序代码,该程序代码包括计算机操作指令。
[0077] 处理器802可能是中央处理器CPU,或者是特定集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
[0078] 存储器806,用于存放程序810。存储器806可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
[0079] 程序810具体可以用于使得处理器802执行上述任意方法实施例中的混淆代码的优化方法。程序810中各步骤的具体实现可以参见上述混淆代码的优化实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。
[0080] 在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
[0081] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0082] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
[0083] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0084] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0085] 本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的混淆代码的优化装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0086] 应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
[0087] 本发明公开了:A1.一种混淆代码的优化方法,其包括:
[0088] 根据混淆后的代码生成对应的代码模块流程图;其中,所述代码模块流程图中记录各个代码模块间的调用关系;
[0089] 根据所述代码模块流程图进行优化处理,以去除其中包含的混淆代码;所述优化处理包括合并代码模块、删除冗余流程对应的代码模块、和/或去除混淆代码;
[0090] 根据优化后的代码模块流程图进行代码重组,得到优化后的代码。
[0091] A2.根据A1所述的方法,其中,所述根据混淆后的代码生成对应的代码模块流程图具体为:根据混淆后的代码,利用IDA平台生成对应的代码模块流程图。
[0092] A3.根据A1所述的方法,其中,所述根据所述代码模块流程图进行优化处理,以去除其中包含的混淆代码进一步包括:
[0093] 遍历所述代码模块流程图,查找其中调用关系为单线调用且代码模块为非结尾代码模块的多个代码模块;
[0094] 根据调用关系将所述多个代码模块进行合并,得到合并后的代码模块。
[0095] A4.根据A1所述的方法,其中,所述根据所述代码模块流程图进行优化处理,以去除其中包含的混淆代码进一步包括:
[0096] 模拟执行所述混淆后的代码,得到模拟执行被调用的代码模块列表;
[0097] 去除被调用的代码模块列表外的代码模块。
[0098] A5.根据A3所述的方法,其中,所述根据调用关系将所述多个代码模块进行合并,得到合并后的代码模块进一步包括:
[0099] 将所述多个代码模块按照调用关系的前后顺序合并为一个代码模块,并修改合并后的代码模块的调用关系;其中,所述合并后的代码模块的调用关系的后调用代码模块修改为所述多个代码模块中调用顺序最后的一个代码模块的后调用代码模块,所述合并后的代码模块的调用关系的前调用代码模块修改为所述多个代码模块中调用顺序最前的一个代码模块的前调用代码模块。
[0100] A6.根据A4所述的方法,其中,所述根据所述代码模块流程图进行优化处理,以去除其中包含的混淆代码进一步包括:
[0101] 获取所述混淆后的代码所使用的混淆寄存器;
[0102] 去除与所述混淆寄存器相关的混淆代码。
[0103] A7.根据A4所述的方法,其中,所述模拟执行所述混淆后的代码,得到模拟执行被调用的代码模块列表进一步包括:
[0104] 若所述混淆后的代码中条件分支包含外部参数和/或全局变量时,将所述条件分支对应的代码模块列入模拟执行被调用的代码模块列表。
[0105] A8.根据A3所述的方法,其中,所述根据所述代码模块流程图进行优化处理,以去除其中包含的混淆代码进一步包括:
[0106] 对所述合并后的代码模块对应的代码进行识别,按照预设去除规则去除其中的混淆代码;其中,所述预设去除规则包括:去除对同一变量进行重复赋值的代码和/或去除利用寄存器进行重复赋值的代码。
[0107] A9.根据A1所述的方法,其中,所述根据优化后的代码模块流程图进行代码重组,得到优化后的代码进一步包括:
[0108] 根据优化后的代码模块流程图,按照各个代码模块的调用顺序重新调整/修改对应的代码,以保障代码的正常执行。
[0109] 本发明还公开了:B10.一种混淆代码的优化装置,其包括:
[0110] 生成模块,适于根据混淆后的代码生成对应的代码模块流程图;其中,所述代码模块流程图中记录各个代码模块间的调用关系;
[0111] 优化模块,适于根据所述代码模块流程图进行优化处理,以去除其中包含的混淆代码;所述优化处理包括合并代码模块、删除冗余流程对应的代码模块、和/或去除混淆代码;
[0112] 重组模块,适于根据优化后的代码模块流程图进行代码重组,得到优化后的代码。
[0113] B11.根据B10所述的装置,其中,所述生成模块进一步适于:
[0114] 根据混淆后的代码,利用IDA平台生成对应的代码模块流程图。
[0115] B12.根据B10所述的装置,其中,所述优化模块进一步适于:
[0116] 遍历所述代码模块流程图,查找其中调用关系为单线调用且代码模块为非结尾代码模块的多个代码模块;根据调用关系将所述多个代码模块进行合并,得到合并后的代码模块。
[0117] B13.根据B10所述的装置,其中,所述优化模块进一步适于:
[0118] 模拟执行所述混淆后的代码,得到模拟执行被调用的代码模块列表;去除被调用的代码模块列表外的代码模块。
[0119] B14.根据B12所述的装置,其中,所述优化模块进一步适于:
[0120] 将所述多个代码模块按照调用关系的前后顺序合并为一个代码模块,并修改合并后的代码模块的调用关系;其中,所述合并后的代码模块的调用关系的后调用代码模块修改为所述多个代码模块中调用顺序最后的一个代码模块的后调用代码模块,所述合并后的代码模块的调用关系的前调用代码模块修改为所述多个代码模块中调用顺序最前的一个代码模块的前调用代码模块。
[0121] B15.根据B13所述的装置,其中,所述优化模块进一步适于:
[0122] 获取所述混淆后的代码所使用的混淆寄存器;去除与所述混淆寄存器相关的混淆代码。
[0123] B16.根据B13所述的装置,其中,所述优化模块进一步适于:
[0124] 若所述混淆后的代码中条件分支包含外部参数和/或全局变量时,将所述条件分支对应的代码模块列入模拟执行被调用的代码模块列表。
[0125] B17.根据B12所述的装置,其中,所述优化模块进一步适于:
[0126] 对所述合并后的代码模块对应的代码进行识别,按照预设去除规则去除其中的混淆代码;其中,所述预设去除规则包括:去除对同一变量进行重复赋值的代码和/或去除利用寄存器进行重复赋值的代码。
[0127] B18.根据B10所述的装置,其中,所述重组模块进一步适于:
[0128] 根据优化后的代码模块流程图,按照各个代码模块的调用顺序重新调整/修改对应的代码,以保障代码的正常执行。
[0129] 本发明还公开了:C19.一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
[0130] 所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如A1-A9中任一项所述的混淆代码的优化方法对应的操作。
[0131] 本发明还公开了:D20.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如D1-D9中任一项所述的混淆代码的优化方法对应的操作。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈