一种反逆向代码混淆方法、装置、设备及可读存储介质与流程

文档序号:33507180发布日期:2023-03-18 03:11阅读:76来源:国知局
一种反逆向代码混淆方法、装置、设备及可读存储介质与流程

1.本技术涉及信息安全技术领域,尤其涉及一种反逆向代码混淆方法、装置、设备及可读存储介质。


背景技术:

2.随着科学技术的飞速发展,智能终端的功能越来越多样化,可以通过在各种类型的智能终端上安装各种应用程序来实现各种各样的功能,但很多应用程序可以通过逆向工具来获取和修改应用程序的代码,容易造成应用程序被破坏,泄露用户数据等安全问题,因此,应用程序的开发者通常会对应用程序的代码进行混淆,使其变成无意义的词组或语句,从而提高应用程序的安全性。
3.现有的代码混淆手段,通常是使用脚本语言编写自动化工具,使用特定的替换规则对应用程序中的代码文件进行批量文本混淆替换。但现有的代码混淆手段一般只能对应用程序中对应编程语言编写的内容进行混淆,如果应用程序中存在多种不同编程语言编写的代码,通常需要采取不同的代码混淆手段来处理不同种编程语言编写的应用程序代码,存在代码混淆手段兼容性不高的问题。


技术实现要素:

4.本技术旨在至少能解决上述的技术缺陷之一,有鉴于此,本技术提供了一种反逆向代码混淆方法、装置、设备及可读存储介质,用于解决现有技术中代码混淆手段兼容性不高,无法高效对同一个应用程序中利用不同的编程语言编写的代码进行混淆的技术缺陷。
5.为了实现上述目的,现提出的方案如下:
6.一种反逆向代码混淆方法,包括:
7.获取待处理文件;
8.将所述待处理文件中的待处理代码转换为与所述待处理代码对应的抽象语法树;
9.解析与所述待处理代码对应的抽象语法树,确定与所述待处理代码对应的代码信息;
10.依据预设的代码兼容处理规则,对所述待处理代码对应的代码信息进行兼容性处理,得到与所述待处理代码对应的兼容代码信息;
11.依据与所述待处理代码对应的兼容代码信息,按照预设的代码混淆规则对所述待处理代码进行代码混淆处理,得到与所述待处理代码对应的混淆结果。
12.优选地,所述获取待处理文件,包括:
13.依据预置的路径文件,获取所述待处理文件的文件路径;
14.依据所述待处理文件的文件路径,获取所述待处理文件。
15.优选地,所述将所述待处理文件中的待处理代码转换为与所述待处理代码对应的抽象语法树,包括:
16.确定所述待处理文件中的所述待处理代码;
17.转换所述待处理代码,得到与所述待处理代码对应抽象语法树。
18.优选地,所述转换所述待处理代码,得到与所述待处理代码对应抽象语法树,包括:
19.对所述待处理代码进行分词操作,得到分词集合;
20.依据所述分词集合,对所述待处理代码进行词法分析和语法分析,生成与所述待处理代码对应的各个节点;
21.按照所述待处理代码对应的代码层级关系组合各个所述节点,得到与所述待处理代码对应的抽象语法树。
22.优选地,所述依据预设的代码兼容处理规则,对所述待处理代码对应的代码信息进行兼容性处理,得到与所述待处理代码对应的兼容代码信息,包括:
23.确定所述待处理代码使用的编程语言;
24.依据所述待处理代码使用的编程语言,选择与所述待处理代码对应的代码兼容规则来处理所述待处理代码对应的代码信息,得到与所述待处理代码对应的兼容代码信息。
25.优选地,在所述将所述待处理文件中的待处理代码转换为与所述待处理代码对应的抽象语法树之后,在所述解析与所述待处理代码对应的抽象语法树,确定与所述待处理代码对应的代码信息之前,还包括:
26.确定与所述待处理代码对应的抽象语法树;
27.将与所述待处理代码对应的所述抽象语法树缓存到本地文件中。
28.优选地,所述依据与所述待处理代码对应的兼容代码信息,按照预设的代码混淆规则对所述待处理代码进行代码混淆处理,得到与所述待处理代码对应的混淆结果,包括:
29.从所述预设的代码混淆规则中,确定目标代码混淆规则;
30.依据与所述待处理代码对应的兼容代码信息,使用所述目标代码混淆规则对所述待处理代码进行代码混淆处理,得到与所述待处理代码对应的混淆结果。
31.一种反逆向代码混淆装置,包括:
32.文件获取模块,用于获取待处理文件;
33.代码转换模块,用于将所述待处理文件中的待处理代码转换为与所述待处理代码对应的抽象语法树;
34.代码信息提取模块,用于解析与所述待处理代码对应的抽象语法树,确定与所述待处理代码对应的代码信息;
35.兼容处理模块,用于依据预设的代码兼容处理规则,对所述待处理代码对应的代码信息进行兼容性处理,得到与所述待处理代码对应的兼容代码信息;
36.代码混淆模块,用于依据与所述待处理代码对应的兼容代码信息,按照预设的代码混淆规则对所述待处理代码进行代码混淆处理,得到与所述待处理代码对应的混淆结果。
37.一种反逆向代码混淆设备,包括:一个或多个处理器,以及存储器;
38.所述存储器中存储有计算机可读指令,所述计算机可读指令被所述一个或多个处理器执行时,实现如上述介绍的任一项所述反逆向代码混淆方法的步骤。
39.一种可读存储介质,所述可读存储介质中存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器实现如上述介绍的任一项所述
反逆向代码混淆方法的步骤。
40.从以上技术方案可以看出,本技术实施例提供的方法可以通过获取待处理文件,有助于进一步从所述待处理文件中获取待处理代码。在获取到所述待处理文件中的所述待处理代码之后,可以进一步将所述待处理代码转换为抽象语法树,有助于通过解析所述抽象语法树来提取所述待处理代码对应的代码信息。在得到所述待处理代码对应的代码信息之后,可以依据预设的代码兼容规则,对所述待处理代码对应的代码信息进行兼容性处理,与所述待处理代码对应的兼容代码信息,有助于根据与所述待处理代码对应的兼容代码信息和预设的代码混淆规则对所述待处理代码进行混淆,从而得到与所述待处理代码对应的混淆结果。本技术实施例提供的方法可以在进行代码混淆时,对不同编程语言编写的代码对应的代码信息先进行兼容性处理再进行代码混淆,从而解决了只能对同一编程语言编写的代码进行混淆,代码混淆手段兼容性不高的问题。
附图说明
41.为了更清楚地说明本技术实施例提供的方法或现有技术中的技术方案,下面将对实施例或现有技术描述中所可以使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
42.图1为本技术实施例提供的一种实现反逆向代码混淆方法的流程图;
43.图2为本技术实施例提供的一种编译器设计架构示意图;
44.图3为本技术实施例示例的一种反逆向代码混淆装置结构示意图;
45.图4为本技术实施例公开的一种反逆向代码混淆设备的硬件结构框图。
具体实施方式
46.下面将结合本技术实施例中的附图,对本技术实施例提供的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
47.鉴于目前大部分的代码混淆方案难以同时对不同编程语言编写的代码进行混淆,为此,本技术提供了一种反逆向代码混淆方案,该反逆向代码混淆方法能够在对代码进行混淆之前,先对不同编程语言编写的代码进行兼容性处理,从而实现一种混淆方案可以对多种不同编程语言编写的代码进行代码混淆的功能。
48.本技术实施例提供的方法可以用于众多通用或专用的计算装置环境或配置中。例如:个人手机终端、平板型设备、多处理器装置、包括以上任何装置或设备的计算环境等等。
49.本技术实施例提供一种反逆向代码混淆方法,该方法可以应用于各种计算机终端或是智能终端中,其执行主体可以为计算机终端或是智能终端的处理器或服务器。
50.下面结合图1,介绍本技术实施例给出的反逆向代码混淆方法的流程,图1为本技术实施例提供的一种反逆向代码混淆方法的流程图,如图1所示,该流程可以包括以下几个步骤:
51.步骤s100、获取待处理文件。
52.具体地,在实际应用过程中,应用程序可以包括各种不同类型文件,应用程序的核心逻辑功能可以通过编程语言编写的代码来实现,应用程序的不同类型文件可以利用不同的编程语言来编写。
53.目前存在逆向技术,可以通过逆向技术来破解应用程序,由此可以获得应用程序的代码,通过逆向技术来破解应用程序有可能造成应用程序被破坏,导致用户数据泄露。
54.为了保证应用程序的安全稳定,现有的应用程序开发者通常会通过各种反逆向技术来提高应用程序的安全性。
55.其中,
56.最常见的反逆向技术一般使用代码混淆的方法。
57.通过对应用程序中的代码进行代码混淆,即使通过逆向技术获取到应用程序中的代码,所获取到的也是混淆过后无意义的内容,难以从中提取到用户信息或应用程序执行逻辑等内容,对应用程序中的代码进行代码混淆可以保证数据的安全性和应用程序的稳定性。
58.要实现对应用程序中的代码进行混淆的功能,可以先获取包含代码的待处理文件。
59.获取待处理文件,有助于根据待处理文件,从中提取出应用程序的代码,并通过对代码进行一系列的处理,从而实现混淆应用程序的代码,可以提高应用程序的安全性和稳定性。
60.步骤s110、将待处理文件中的待处理代码转换为与待处理代码对应的抽象语法树。
61.具体地,由上述介绍可知,经过步骤s100可以获取到包含应用程序代码的待处理文件。
62.由于此时应用程序的代码是存在于待处理代码中的,可以先从待处理文件中提取待处理代码。
63.在得到待处理文件中的待处理代码之后,为了更好地分析待处理代码,可以进一步将待处理代码转换为与待处理代码对应的抽象语法树,将待处理代码转换为与待处理代码对应的抽象语法树,可以有助于确定待处理代码的代码信息,以便后续可以进行代码混淆。
64.步骤s120、解析与待处理代码对应的抽象语法树,确定与待处理代码对应的代码信息。
65.具体地,在实际应用过程中,抽象语法树是代码语法结构的一种抽象表示,抽象语法树可以以树状形式表现代码的语法结构,抽象语法树可以包括代码的路径、位置、类型、名称、关联情况等代码信息,通过分析待处理代码对应的抽象语法树可以获取待处理代码对应的代码信息。
66.由于待处理代码对应的抽象语法树可以以树状形式来表现代码的语法结构的,要获取待处理代码对应的代码信息,可以先对待处理代码对应的抽象语法树进行解析,从而可以在待处理代码对应的抽象语法树中得到待处理代码对应的代码信息。
67.因此,在确定与待处理代码的抽象语法树之后,可以解析与待处理代码对应的抽象语法树,以便可以确定与待处理代码对应的代码信息。
68.确定与待处理代码对应的代码信息可以有助于后续对待处理代码对应的代码信息进行兼容性处理。
69.步骤s130、依据预设的代码兼容处理规则,对待处理代码对应的代码信息进行兼容性处理,得到与待处理代码对应的兼容代码信息。
70.具体地,由上述介绍可知,通过步骤s120可以通过解析待处理代码对应的抽象语法树得到待处理代码对应的代码信息。
71.进一步,由于每一种编程语言有其对应的特点,一个应用程序可能存在使用多种不同编程语言编写不同业务需求的代码,而不同编程语言中对实现相同功能的代码可能使用不同的名称。
72.比如同样实现在控制台输出信息,以objective-c语言,c语言,python语言为例,具体如下:
73.objective-c语言:nslog();
74.c语言:printf();
75.python:print()。
76.从上述分析可以看到,不同编程语言无论是语言特性,语言结构,甚至是用词都存在很大的出入.
77.因此,当需要对不同编程语言编写的代码进行混淆时,可以先针对待处理代码对应的代码信息进行兼容性处理,得到与待处理代码对应的兼容代码信息,以保证不同编程语言编写的代码可以兼容运行,且保持格式统一。
78.步骤s140、依据与待处理代码对应的兼容代码信息,按照预设的代码混淆规则对待处理代码进行代码混淆处理,得到与待处理代码对应的混淆结果。
79.具体地,由上述介绍可知,在经过对待处理代码中不同编程语言编写的代码对应的代码信息进行兼容性处理之后,可以得到与待处理代码对应的兼容代码信息。
80.其中,代码信息可以包括代码的路径、位置、类型、名称、关联情况、单词。
81.进一步,可以直接对待处理代码对应的目标代码进行代码混淆处理来得到与目标代码对应的混淆结果。
82.在进行代码混淆前,可以先制定对应的代码混淆规则,按照预设的代码混淆规则对待处理代码进行代码混淆处理,防止混淆后应用程序无法复原被混淆的代码。
83.为了可以根据实际需要来不断修改代码混淆规则以适应代码混淆需求,可以将不同的代码混淆规则存放在一个代码混淆规则文件中。
84.如若要修改代码混淆规则,也可以通过直接修改代码混淆规则文件中的代码混淆规则并保存即可,以便在具有不同的代码混淆需求时,可以及时依据选取不同的代码混淆规则来进行代码混淆处理。
85.从上述介绍的技术方案可以看出,当需要对待处理的代码文件进行混淆处理时,本技术实施例提供的方法可以在进行代码混淆之前,对不同编程语言编写的待处理代码对应的代码信息先进行兼容性处理,得到兼容代码信息,并依据兼容代码信息对待处理代码进行代码混淆处理,从而实现对不同编程语言编写的代码进行代码混淆,解决了现有代码混淆技术中兼容性不高的问题。
86.在本技术的另一个实施例中,对上述步骤s100,获取待处理文件的过程进行介绍,
该过程可以包括如下几个步骤:
87.步骤s101、依据预置的路径文件,获取待处理文件的文件路径。
88.具体地,在应用程序中,可以存在一个预置的路径文件,通过路径文件,可以获取到应用程序中各个文件对应的文件路径,文件路径指的是每个文件对应的保存位置.
89.例如,某一个文件对应的文件路径如下:
90.c:\users\desktop
91.上述文件路径可以表示该文件保存在c盘users目录下的desktop子目录中。
92.依据包含待处理文件的文件路径的路径文件,可以直接准确获取各个待处理文件,而无需通过遍历应用程序中每一个文件的每一级目录来找到各个待处理文件,可以有效节省获取待处理文件的处理时间。
93.本技术实施例提供的方法中以读取ios应用程序为例,介绍本技术实施例提供的读取待处理文件的过程,该过程具体如下:
94.在ios应用程序中,开发工具xcode通过编译,可以得到一个名为“manifest.scbuild”的路径文件,名为“manifest.scbuild”的路径文件包含所有工程文件的路径、编译参数等信息,通过获取名为“manifest.scbuild”的路径文件可以直接查找待处理文件的路径信息,从而直接获取待处理文件的路径信息。
95.步骤s102、依据待处理文件的文件路径,获取待处理文件。
96.具体地,由上述介绍可知,可以通过获取包含待处理文件的文件路径的路径文件来获取待处理文件对应的文件路径。进一步,要获取到待处理文件,可以通过步骤s101获取到的待处理文件对应的文件路径来获取待处理文件。
97.例如,
98.当确定待处理文件对应的文件路径之后,可以通过直接打开获取到的待处理文件对应的文件路径,从待处理文件对应的文件路径中,直接获取待处理文件。
99.从上述介绍的技术方案可以看出,本技术实施例提供的方法可以依据预置的路径文件,从路径文件中获取到待处理文件的文件路径,有助于根据待处理文件的文件路径,进一步获取待处理文件,有助于根据待处理文件提取待处理的代码。本技术实施例提供的方法可以通过获取文件路径来获取待处理文件,有助于根据待处理文件,进一步获取待处理文件中的待处理代码。
100.在本技术的另一个实施例中,对上述步骤s100,将待处理文件中的待处理代码转换为与待处理代码对应的抽象语法树的过程进行介绍,该过程可以包括如下几个步骤:
101.步骤s201、确定待处理文件中的待处理代码。
102.具体地,在经过步骤s100之后,可以得到待处理文件,要对待处理文件中的待处理代码进行混淆,首先第一步可以先从待处理文件中提取出待处理代码。
103.可以通过打开待处理文件,并从待处理文件中直接获取并确定待处理代码,确定待处理代码,有助于根据待处理代码,通过转化待处理代码得到与待处理代码对应的抽象语法树。
104.步骤s202、转换待处理代码,得到与待处理代码对应抽象语法树。
105.具体地,由上述介绍可知,可以通过待处理代码转换得到待处理代码对应的抽象语法树,由于本技术意在解决存在不同编程语言编写的代码如何进行代码混淆,本实施例
以ios系统所经常使用的objective-c和swift语言为例,介绍转换待处理代码得到待处理代码对应的抽象语法树的过程,该过程可以如下:
106.在介绍抽象语法树之前,首先介绍获取抽象语法树过程中使用到的编译器。在计算机领域,编译器指将“一种语言”翻译为“另一种语言”的程序,传统的编译器设计架构如图2所示。
107.传统的编译器一般由三部分构成:
108.(1)frontend编译器前端,包含词法分析,语法分析,语义分析功能,通过将源代码转换为抽象语法树(abstract syntax tree,ast),继而生成中间代码。
109.(2)optimizer优化器,主要实现对得到的中间代码进行优化处理,得到优化后的代码的功能。
110.(3)backend编译器后端,实现将上述优化后的代码转化为各平台的机器码的功能,机器猫包括但不限于x86、arm平台的机器码。
111.以ios系统为例,ios系统是使用llvm框架系统来进行编译的,llvm框架系统是以c++语言编写而成,主要用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time)的框架系统。
112.llvm框架系统有一个突出的特点是可以使用通用的代码来表示中间代码,在支持一种新的语言时,只再编写一个可以产生中间代码的独立前端即可;在支持一种新的硬件架构时,只再编写一个可以接收中间代码的独立后端即可。
113.本技术实施例是基于抽象语法树来实现代码的混淆的,以ios系统为例,可以分别获取使用objective-c语言编写的代码对应的抽象语法树和使用swift语言编写的代码对应的抽象语法树。
114.而在llvm框架系统中,可以使用clang编译器和sourcekit工具集分别获取使用objective-c语言编写的代码对应的抽象语法树和使用swift语言编写的代码对应的抽象语法树。
115.下面对clang编译器和sourcekit工具集进行介绍。
116.在ios系统中存在xcode开发工具,xcode开发工具中存在2个编译链工具,分别为:clang编译器和sourcekit工具集。
117.clang编译器是一个基于llvm的c/c++/objective-c的编译器,clang编译器可以支持c语言、c++语言、objective-c语言。
118.可以使用clang编译器对使用objective-c语言编写的业务代码进行转换,从而得到使用objective-c语言编写的代码对应的抽象语法树。
119.sourcekit是一个一套工具集,可以使得大多数swift源代码层面的操作特性得以支持。例如,源代码解析、语法高亮、排版、自动补全、跨语言头文件生成等。可以使用sourcekit工具集获取使用swift语言编写的代码对应的抽象语法树。
120.从上述介绍的技术方案可以看出,本技术实施例提供的方法通过确定待处理文件中的待处理代码,并根据待处理代码得到其对应的抽象语法树。由此可见,本技术实施例能够针对不同的编码语言获取不同编码语言对应的抽象语法树,兼容性更强。
121.在本技术的另一个实施例中,在上述步骤s110,将待处理文件中的待处理代码转换为与待处理代码对应的抽象语法树之后,还可以包括如下几个步骤:
122.步骤s301、确定与待处理代码对应的抽象语法树。
123.步骤s302、将获取到的抽象语法树缓存到本地文件中。
124.具体地,由上述介绍可知,在确定到待处理代码对应的抽象语法树之后,为了可以对待处理代码进行快速处理、提高代码的复用率,可以进一步将待处理代码对应的抽象语法树进行缓存,保存到本地文件中,有助于下一次进行代码混淆时,可以直接获取缓存的待处理代码对应的抽象语法树进行使用,而不再需要经过上述的步骤s100和步骤s110,更加快捷和省时。
125.从上述介绍的技术方案可以看出,本技术实施例提供的方法可以通过获取待处理代码对应的抽象语法树,并进一步将待处理代码对应的抽象语法树保存到本地文件中,有助于下一次进行代码混淆时,可以直接使用待处理代码对应的抽象语法树,而无需再将待处理代码进行抽象语法树的缓存,提高了代码处理的效率。
126.在本技术的另一个实施例中,对上述步骤s202,转换待处理代码,得到与待处理代码对应抽象语法树的过程进行介绍,该过程可以包括如下几个步骤:
127.步骤s401、对待处理代码进行分词操作,得到分词集合。
128.具体地,由于代码主要是由各种字符和各种单词来组成的,在代码中,每种单词有其对应的分类。
129.例如,
130.某些特定单词属于对应编程语言中的关键字,关键字指的是一门编程语言中规定好的,具有某些特殊功能的单词;
131.单词“if”在很多语言中都表示执行判断条件,是规定好的有特定功能的词语。
132.除此之外代码中还有标识符,字面量,特殊符号等不同词性的词语分类。
133.因此,在对待处理代码转换为待处理代码对应抽象语法树的过程中,可以先对待处理代码进行分词操作,按照代码中不同单词的特性对待处理的代码进行分类,得到分词集合。
134.步骤s402、依据分词集合,对待处理代码进行词法分析和语法分析,生成与待处理代码对应的各个节点。
135.具体地,由上述介绍可知,在步骤s401中可以得到待处理代码的分词集合。
136.进一步,还可以对待处理代码进行词法分析和语法分析,以便可以准确获取待处理代码的逻辑结构。
137.可以将分词集合中的每个单词进行词法分析,得到分词集合中的每个单词的类型、位置。
138.进一步以单词流的形式将分词集合中的每个单词进行语法分析,并结合分词集合得到各个与待处理代码对应的节点,每个节点分别对应待处理代码中的一种结构。
139.步骤s403、按照待处理代码对应的代码层级关系组合各个节点,得到与待处理代码对应的抽象语法树。
140.具体地,由上述介绍可知,在经过步骤s402之后,可以得到待处理代码对应的节点。
141.由于待处理代码对应的节点反映的是待处理代码中的各种结构,但待处理代码是存在一定的代码层级关系的,可以进一步按照待处理代码对应的代码层级关系,重新组合
各个节点,从而得到与待处理代码对应的抽象语法树,以便可以根据抽象语法树获取待处理代码的代码信息。
142.下述将通过例子来介绍使用clang编译器解析使用objective-c语言编写的代码,从而得到抽象语法树的过程。
143.例如,
144.某一段使用objective-c语言编写的代码1,如下:
[0145][0146]
可以通过使用clang编译器解析上述利用objective-c语言编写的代码,经过分词处理,可以得到分词集合token,分词集合token可以包括以下几类:
[0147]
关键字:语法中的关键字,if、else、while、for等;
[0148]
标识符:变量名;
[0149]
字面量:值,数字,字符串;
[0150]
特殊符号:加减乘除等符号。
[0151]
进一步,将分词集合token中得到的各类型单词,以单词流的形式进行解析处理,可以得到处理后生成的代码2为:
[0152][0153]
进一步,将分词集合token中的每个单词以单词流的形式传入语法分析模块进行语法分析,经过语法分析后可以得到如下代码3:
[0154]
[0155][0156]
其中,translationunitdecl是根节点,可以表示一个源文件,可以根据上述代码3构建代码1对应的抽象语法树。
[0157]
从上述介绍的技术方案可以看出,本技术实施例提供的方法可以对待处理代码进行分词操作,得到分词集合,有助于根据分词集合对待处理代码进行词法分析和语法分析,得到各个与待处理代码对应的节点,在得到各个节点之后,可以按照待处理代码对应的代码层级关系组合各个节点,得到与待处理代码对应的抽象语法树,有助于根据语法树获取待处理代码对应的代码信息。
[0158]
在本技术的另一个实施例中,对上述步骤s130,依据预设的代码兼容处理规则,对待处理代码对应的代码信息进行兼容性处理,得到与待处理代码对应的兼容代码信息的过程进行介绍,该过程可以包括如下几个步骤:
[0159]
步骤s501、确定待处理代码使用的编程语言。
[0160]
具体地,由于待处理代码可能存在多种不同编程语言编写的程序,每种编程语言有其对应的特性,可以获取待处理代码中存在那些编程语言,进一步,可以根据对应的编程语言选择对应的兼容手段进行代码兼容处理。
[0161]
因此,在通过解析待处理代码对应的抽象语法树,得到与待处理代码对应的代码
信息之后,进一步,可以对待处理代码进行兼容性处理,可以先确定待处理代码所使用的编程语言,以便可以依据待处理代码使用的编程语言,选择与待处理代码对应的代码兼容规则来处理待处理代码对应的代码信息。
[0162]
步骤s502、依据待处理代码使用的编程语言,选择与待处理代码对应的代码兼容规则来处理待处理代码对应的代码信息,得到与待处理代码对应的兼容代码信息。
[0163]
具体地,由上述介绍可知,经过步骤s501可以获取到待处理代码所使用的编程语言。
[0164]
进一步,可以根据每一种编程语言的特性,选择对应的处理待处理代码对应的代码信息的方式对待处理代码对应的代码信息进行兼容性处理,从而得到满足兼容性要求的与待处理代码对应的兼容代码信息。
[0165]
下面以处理ios系统中的objective-c语言和swift语言为例,介绍兼容性处理过程,具体的转换规则如下:
[0166]
(1)名称中的动词和介词统一不替换,防止替换后导致转换整体结构的改变
[0167]
(2)如果名称中存在介词,同时介词后面单词会折叠,只替换介词之前的单词。
[0168]
例如,
[0169]
setimagewithurl:(string*)url,
[0170]
只替换setimage部分。
[0171]
(3)如果尾部的单词和第一参数名称重合,那么就把这个单词加入白名单,不进行替换,防止破坏原有结构。
[0172]
从上述介绍的技术方案可以看出,本技术实施例提供的方法可以通过先确定待处理代码使用的编程语言,有助于根据待处理代码使用的编程语言,选择处理待处理代码对应的代码信息的方式对待处理代码对应的代码信息进行兼容性处理,得到满足兼容性要求的与待处理代码对应的兼容代码信息,有助于根据兼容代码信息进行代码混淆处理。
[0173]
在本技术的另一个实施例中,对上述步骤s140,依据与待处理代码对应的兼容代码信息,按照预设的代码混淆规则对待处理代码进行代码混淆处理,得到与待处理代码对应的混淆结果的过程进行介绍,该过程可以包括如下几个步骤:
[0174]
步骤s601、从预设的代码混淆规则中,确定目标代码混淆规则。
[0175]
具体地,由上述介绍可知,可以通过对待处理代码进行兼容性处理,从而得到与待处理代码对应的目标代码。
[0176]
在实际应用过程中,每个应用程序可以有一个代码混淆规则文件,在应用程序对应的代码混淆规则文件中包括至少一种代码混淆规则。
[0177]
随着应用程序的更新,应用程序对应的代码混淆规则文件可能会不断更新代码混淆规则,可以通过查阅对应的代码混淆规则文件,查找代码混淆规则文件中最新的代码混淆规则作为目标代码混淆规则。
[0178]
以ios系统为例,可以将代码混淆规则以xml格式保存到plist文件中,在进行代码混淆时,通过读取plist文件中最新的代码混淆规则并将其确定为目标代码混淆规则,并按照目标代码混淆规则进行代码混淆。
[0179]
步骤s602、依据与待处理代码对应的兼容代码信息,使用目标代码混淆规则对待处理代码进行代码混淆处理,得到与待处理代码对应的混淆结果。
[0180]
具体地,由上述介绍可知,在选择目标代码混淆规则之后,可以依据目标代码混淆规则,结合上述介绍的与待处理代码对应的兼容代码信息,对目标代码进行混淆处理,从而得到目标代码对应的混淆结果。
[0181]
目标代码混淆规则可以包括以下代码混淆规则:
[0182]
下面以处理ios系统中的objective-c语言和swift语言为例,介绍objective-c语言和swift语言对应的代码混淆规则。
[0183]
基于objective-c语言和swift语言的特点,在进行转换时,通常会根据动词和介词进行判断,常见的动词有send、get、set、load等,常见的介词有with、of、by、for等,具体的转换规则如下:
[0184]
(1)如果动词位于头部,并且尾部的单词和第一参数名称重合,将尾部单词删除。
[0185]
例如,
[0186]
objective-c的方法处理可以如下:
[0187]
sendmessage:(message*)msg,
[0188]
在swift里使用的名称会变为send(msg)。
[0189]
(2)如果名称中存在介词,把介词以及介词后的单词转换为参数名称。
[0190]
例如,
[0191]
objective-c的方法处理可以如下:
[0192]
setimagewithurl:(string*)url,
[0193]
在swift里使用的名称会变为setimage(withurl:url)。
[0194]
(3)如果方法/函数的名称等于动词加类名后缀单词,可以不用处理。
[0195]
从上述介绍的技术方案可以看出,本技术实施例提供的方法可以依据代码混淆规则文件,选择当前时刻代码混淆规则文件中最新的代码混淆规则作为目标代码混淆规则,并根据与待处理代码对应的兼容代码信息与目标代码混淆规则对目标代码进行代码混淆处理,从而得到目标代码对应的混淆结果。本技术实施例提供的方法可以根据目标代码混淆规则对兼容性处理后的目标代码进行混淆处理,从而实现对不同编程语言编写的代码进行代码混淆操作的功能。
[0196]
下面对本技术实施例提供的反逆向代码混淆装置进行描述,下文描述的反逆向代码混淆装置与上文描述的反逆向代码混淆方法可相互对应参照。
[0197]
参见图3,图3为本技术实施例公开的一种反逆向代码混淆装置结构示意图。
[0198]
如图3所示,该反逆向代码混淆装置可以包括:
[0199]
文件获取模块11,用于获取待处理文件;
[0200]
代码转换模块12,用于将待处理文件中的待处理代码转换为与待处理代码对应的抽象语法树;
[0201]
代码信息提取模块13,用于解析与待处理代码对应的抽象语法树,确定与待处理代码对应的代码信息;
[0202]
兼容处理模块14,用于依据预设的代码兼容处理规则,对待处理代码对应的代码信息进行兼容性处理,得到与待处理代码对应的兼容代码信息;
[0203]
代码混淆模块15,用于依据与待处理代码对应的兼容代码信息,按照预设的代码混淆规则对待处理代码进行代码混淆处理,得到与待处理代码对应的混淆结果。
[0204]
从上述介绍的反逆向代码混淆装置可以看出,本技术实施例提供的装置提供的文件获取模块11,可以获取待处理文件,有助于代码转换模块12从待处理文件中获取待处理代码并转换为与待处理代码对应的抽象语法树。在得到与待处理代码对应的抽象语法树之后,可以进一步通过代码信息提取模块13解析待处理代码对应的抽象语法树,从而确定与待处理代码对应的代码信息,有助于兼容处理模块14依据预设的代码兼容处理规则,对与待处理代码对应的代码信息进行兼容性处理,从而得到与待处理代码对应的兼容代码信息。在得到与待处理代码对应的兼容代码信息之后,可以进一步使用代码混淆模块15,按照预设的代码混淆规则,对待处理代码进行代码混淆处理,从而得到与待处理代码对应的混淆结果。本技术实施例提供的装置可以在对应用程序的代码进行代码混淆时,对不同编程语言编写的代码对应的代码信息先进行兼容性处理,得到兼容代码信息,再根据兼容代码信息将待处理代码进行混淆,从而解决了现有代码混淆技术只能对一种编程语言编写的代码进行代码混淆,代码混淆手段兼容性不高的问题。
[0205]
其中,上述反逆向代码混淆装置所包含的各个单元的具体处理流程,可以参照前文反逆向代码混淆方法部分相关介绍,此处不再赘述。
[0206]
本技术实施例提供的反逆向代码混淆装置可应用于反逆向代码混淆设备,如终端:手机、电脑等。可选的,图4示出了反逆向代码混淆设备的硬件结构框图,参照图4,反逆向代码混淆设备的硬件结构可以包括:至少一个处理器1,至少一个通信接口2,至少一个存储器3和至少一个通信总线4。
[0207]
在本技术实施例提供的方法中,处理器1、通信接口2、存储器3、通信总线4的数量为至少一个,且处理器1、通信接口2、存储器3通过通信总线4完成相互间的通信。
[0208]
处理器1可能是一个中央处理器cpu,或者是特定集成电路asic(application specific integrated circuit),或者是被配置成实施本技术实施例提供的方法的一个或多个集成电路等;
[0209]
存储器3可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatile memory)等,例如至少一个磁盘存储器;
[0210]
其中,存储器存储有程序,处理器可调用存储器存储的程序,所述程序用于:实现前述终端反逆向代码混淆方案中的各个处理流程。
[0211]
本技术实施例还提供一种可读存储介质,该存储介质可存储有适于处理器执行的程序,所述程序用于:实现前述终端在反逆向代码混淆方案中的各个处理流程。
[0212]
最后,还可以说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0213]
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
[0214]
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本技术。
对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本技术的精神或范围的情况下,在其它实施例中实现。各个实施例之间可以相互组合。因此,本技术将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1