一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种代码混淆方法及装置与流程

2022-02-19 12:37:58 来源:中国专利 TAG:


1.本技术涉及数据处理技术领域,具体涉及一种代码混淆方法及装置。


背景技术:

2.随着物联网的普及,各种物联网嵌入式设备开发如火如荼,其中软件层大部分由代码语言开发。但大部分对代码编译后的程序缺乏安全保护意识,依靠ida等逆向分析工具,可以对编译后对程序反汇编,再从汇编逆向生成代码,基本可以看到函数名称和实现过程,可以分析寻找漏洞。因此需要有工具可以混淆代码,加深逆向分析的难度。
3.传统的混淆方案类似ollvm,与编译器llvm深度耦合,对llvm的ir中间层进行混淆,直接生成编译后的程序。但是,该技术手段具有一定的局限性,仅能够应用在llvm编译器上,但大部分嵌入式设备都是采用各类gcc或者armcc编译器,而这两类编译器目前没有合适的混淆工具。
4.因此,基于目前技术手段的局限性,提供一种新的代码混淆技术,用以满足当前使用需求。


技术实现要素:

5.本技术提供一种代码混淆方法及装置,对目标代码进行拆分,基于拆分获得的代码信息的类型,按照对应的预设的混淆规则进行混淆处理,从而实现代码混淆工作,具有一定的便利性和通用性,满足代码混淆的使用需求。
6.第一方面,本技术提供了一种代码混淆方法,所述方法包括以下步骤:
7.获取目标代码,提取所述目标代码的函数名、结构体名、枚举类型、全局常量名称、常量字符串以及控制流信息;
8.对所述函数名、所述结构体名、所述枚举类型以及全局常量名称进行混淆处理,生成各自对应的第一混淆信息,并生成对应的混淆名称映射表;
9.对所述常量字符串进行混淆处理,获得对应的第二混淆信息;
10.拆分所述控制流信息,并将所述控制流信息中的基本块以及原始流程关系存入对应的第三混淆信息内;
11.基于所述第一混淆信息、所述第二混淆信息以及所述第三混淆信息,生成与所述目标代码对应的代码混淆文件;其中,
12.所述基本块中配置有对应的数据处理算法。
13.进一步的,所述代码混淆方法还包括以下步骤:
14.基于预设的混淆白名单,将所述目标代码中与所述混淆白名单匹配的代码信息在不做混淆处理的前提下存储对应的所述代码混淆文件。
15.进一步的,所述代码混淆方法还包括以下步骤:
16.基于预设的文件混淆规则,对所述目标代码的当前文件名进行混淆处理,获得对应的混淆文件名并存入对应的所述代码混淆文件。
17.进一步的,对所述常量字符串进行混淆处理,获得对应的第二混淆信息之后,所述代码混淆方法还包括以下步骤:
18.将所述目标代码中的所述常量字符串对应的所述第二混淆信息存入预设的第一混淆数组;其中,
19.所述第一混淆数组被配置在所述代码混淆文件内。
20.具体的,所述第一混淆数组为ascii码数组。
21.具体的,所述拆分所述控制流信息,并将所述控制流信息中的基本块以及原始流程关系存入对应的第三混淆信息内,包括以下步骤:
22.拆分所述控制流信息,获得对应的所述基本块;
23.将所述基本块之间的流程关系配置成死循环;
24.将流程关系配置完成后的所述基本块以及所述原始流程关系存入对应的第三混淆信息内。
25.第二方面,本技术提供了一种代码混淆装置,所述装置包括:
26.代码拆解模块,其用于获取目标代码,提取所述目标代码的函数名、结构体名、枚举类型、全局常量名称、常量字符串以及控制流信息;
27.代码混淆模块,其用于对所述函数名、所述结构体名、所述枚举类型以及全局常量名称进行混淆处理,生成各自对应的第一混淆信息,并生成对应的混淆名称映射表;
28.所述代码混淆模块还用于对所述常量字符串进行混淆处理,获得对应的第二混淆信息;
29.所述代码混淆模块还用于拆分所述控制流信息,并将所述控制流信息中的基本块以及原始流程关系存入对应的第三混淆信息内;
30.混淆输出模块,其用于基于所述第一混淆信息、所述第二混淆信息以及所述第三混淆信息,生成与所述目标代码对应的代码混淆文件;其中,
31.所述基本块中配置有对应的数据处理算法。
32.进一步的,所述代码混淆模块还用于基于预设的混淆白名单,将所述目标代码中与所述混淆白名单匹配的代码信息在不做混淆处理的前提下存储对应的所述代码混淆文件。
33.进一步的,所述代码混淆模块还用于基于预设的文件混淆规则,对所述目标代码的当前文件名进行混淆处理,获得对应的混淆文件名并存入对应的所述代码混淆文件。
34.进一步的,所述代码混淆模块还用于将所述目标代码中的所述常量字符串对应的所述第二混淆信息存入预设的第一混淆数组;其中,
35.所述第一混淆数组被配置在所述代码混淆文件内。
36.本技术提供的技术方案带来的有益效果包括:
37.本技术对目标代码进行拆分,基于拆分获得的代码信息的类型,按照对应的预设的混淆规则进行混淆处理,从而实现代码混淆工作,具有一定的便利性和通用性,满足代码混淆的使用需求。
附图说明
38.术语解释:
39.ida:interactive disassembler,交互式反汇编器;
40.ollvm:obfuscator

llvm,底层虚拟机混淆器;
41.llvm:low level virtual machine,底层虚拟机;
42.ir:intermediate representation,中间表示;
43.gcc:gnu compiler collection,gnu编译器套件;
44.armcc:arm compiler collection,arm的c编译器;
45.arm:advanced risc machines,arm处理器;
46.ascii:american standard code for information interchange,美国信息互换标准代码。
47.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
48.图1为本技术实施例中提供的代码混淆方法的步骤流程图;
49.图2为本技术实施例中提供的代码混淆方法中的目标代码的控制流的示意图;
50.图3为本技术实施例中提供的代码混淆方法中的目标代码混淆处理后的控制流的示意图;
51.图4为本技术实施例中提供的代码混淆装置的结构框图。
具体实施方式
52.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术的一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
53.以下结合附图对本技术的实施例作进一步详细说明。
54.本技术实施例提供一种代码混淆方法及装置,对目标代码进行拆分,基于拆分获得的代码信息的类型,按照对应的预设的混淆规则进行混淆处理,从而实现代码混淆工作,具有一定的便利性和通用性,满足代码混淆的使用需求。
55.为达到上述技术效果,本技术的总体思路如下:
56.一种代码混淆方法,该方法包括以下步骤:
57.s1、获取目标代码,提取目标代码的函数名、结构体名、枚举类型、全局常量名称、常量字符串以及控制流信息;
58.s2、对函数名、结构体名、枚举类型以及全局常量名称进行混淆处理,生成各自对应的第一混淆信息,并生成对应的混淆名称映射表;
59.s3、对常量字符串进行混淆处理,获得对应的第二混淆信息;
60.s4、拆分控制流信息,并将控制流信息中的基本块以及原始流程关系存入对应的第三混淆信息内;
61.s5、基于第一混淆信息、第二混淆信息以及第二混淆信息,生成与目标代码对应的代码混淆文件;其中,
62.基本块中配置有对应的数据处理算法。
63.以下结合附图对本技术的实施例作进一步详细说明。
64.第一方面,参见图1~3所示,本技术实施例提供一种代码混淆方法,该方法包括以下步骤:
65.s1、获取目标代码,提取目标代码的函数名、结构体名、枚举类型、全局常量名称、常量字符串以及控制流信息;
66.s2、对函数名、结构体名、枚举类型以及全局常量名称进行混淆处理,生成各自对应的第一混淆信息,并生成对应的混淆名称映射表;
67.s3、对常量字符串进行混淆处理,获得对应的第二混淆信息;
68.s4、拆分控制流信息,并将控制流信息中的基本块以及原始流程关系存入对应的第三混淆信息内;
69.s5、基于第一混淆信息、第二混淆信息以及第二混淆信息,生成与目标代码对应的代码混淆文件;其中,
70.基本块中配置有对应的数据处理算法。
71.需要说明的是,目标代码可以是c语言代码。
72.其中,混淆名称映射表内记录有不同的函数名、结构体名、枚举类型以及全局常量名称,还存储有函数名、结构体名、枚举类型、全局常量名称各自对应的混淆名称。
73.本技术实施例中,对目标代码进行拆分,基于拆分获得的代码信息的类型,按照对应的预设的混淆规则进行混淆处理,从而实现代码混淆工作,具有一定的便利性和通用性,满足代码混淆的使用需求。
74.进一步的,该代码混淆方法还包括以下步骤:
75.基于预设的混淆白名单,将所述目标代码中与所述混淆白名单匹配的代码信息在不做混淆处理的前提下存储对应的所述代码混淆文件。
76.进一步的,该代码混淆方法还包括以下步骤:
77.基于预设的文件混淆规则,对所述目标代码的当前文件名进行混淆处理,获得对应的混淆文件名并存入对应的所述代码混淆文件。
78.进一步的,对所述常量字符串进行混淆处理,获得对应的第二混淆信息之后,所述方法还包括以下步骤:
79.将所述目标代码中的所述常量字符串对应的所述第二混淆信息存入预设的第一混淆数组;其中,
80.所述第一混淆数组被配置在所述代码混淆文件内。
81.优选的,所述第一混淆数组为ascii码数组。
82.具体的,该代码混淆方法中,所述拆分所述控制流信息,并将所述控制流信息中的基本块以及原始流程关系存入对应的第三混淆信息内,包括以下步骤:
83.拆分所述控制流信息,获得对应的所述基本块;
84.将所述基本块之间的流程关系配置成死循环;
85.将流程关系配置完成后的所述基本块以及所述原始流程关系存入对应的第三混淆信息内。
86.结合上述技术方案,在实际实施时,可以基于上述技术方案的实质内容编写执行
程序,接收两个输入参数,一个是目标代码的存储路径,一个是混淆配置文件的存储路径,混淆配置文件内至少包括混淆名称映射表、混淆对应关系、混淆白名单以及文件混淆规则;
87.先读取混淆配置文件文件流,解析数据格式,获取混淆白名单;
88.然后读取目标代码的存储路径,依次读取所有目标代码,进行词法分析,生成词法树;
89.针对目标代码对应的词法树中的函数名称、结构体名、枚举类型以及全局变量名称(混淆白名单中的名称除外),生成对应混淆名称映射表并对名称进行替换,再对函数体实现对部分增加混淆控制流。
90.需要说明的是,基于本技术实施例的技术方案,通过对目标代码进行混淆,支持多级目录多个文件的混淆工作,生成对应的混淆后的代码文件,具体的混淆工作包括:函数名替换、全局变量名称替换、字符串常量混淆、结构体名称替换、枚举名和结构体属性名替换、以及函数控制流混淆;
91.由于本技术实施例的技术方案是对原始代码文件做混淆,不受编译器限制,混淆后的代码文件可以在任意编译器上编译;
92.另外,该技术方案还支持白名单功能,对于部分不需要混淆的函数名、结构体名、枚举类型以及全局变量,可以增加到混淆白名单,当判断属于混淆白名单内的名称时,则不进行混淆。
93.基于本技术实施例的技术方案,在具体实施时,包括以下流程:
94.第一步、读取混淆处理的相关配置,主要包括有混淆关键名称前缀配置、混淆文件名称前缀配置、关键字白名单以及文件白名单;
95.第二步、读取目标代码,提取获得函数名,结构体名,枚举类型,全局常量名称名,并使用第一步的混淆处理的相关配置进行混淆处理;同时,文件白名单提取的相关名称会添加到混淆白名单中,不做混淆处理。
96.第三步,假如目标代码的当前文件名需要混淆,读取源码的同时,会用第一步中的混淆处理的相关配置进行混淆处理,生成新的混淆名称并保存,仅混淆文件名称。
97.需要说明的是,主要实现混淆和保存功能的操作具体如下:
98.第一、对函数名、结构体名、枚举类型以及全局常量名称进行混淆,并生成对应的混淆名称映射表。
99.第二、对代码中常量字符串进行混淆,混淆后为ascii码数组。
100.第三、混淆前,在目标代码的文件中的.rodata段可以看到常量字符串,混淆后,不存在.rodata段中,而是跟随代码段.text一起且无法辨别。
101.另外,代码混淆处理中,针对目标代码,会压扁控制流,具体包括以下操作
102.q1、拆分目标代码的控制流,获得对应的基本块;
103.q2、把控制流图中各个基本块全部放到switch语句中;
104.q3、将swich语句封装到死循环中;
105.q4、将混淆后的混淆文件名称保存到输出目录中。
106.第二方面,参见图4所示,本技术实施例提供一种代码混淆装置,其基于第一方面提及的代码混淆方法,该装置包括:
107.代码拆解模块,其用于获取目标代码,提取所述目标代码的函数名、结构体名、枚
举类型、全局常量名称、常量字符串以及控制流信息;
108.代码混淆模块,其用于对所述函数名、所述结构体名、所述枚举类型以及全局常量名称进行混淆处理,生成各自对应的第一混淆信息,并生成对应的混淆名称映射表;
109.所述代码混淆模块还用于对所述常量字符串进行混淆处理,获得对应的第二混淆信息;
110.所述代码混淆模块还用于拆分所述控制流信息,并将所述控制流信息中的基本块以及原始流程关系存入对应的第三混淆信息内;
111.混淆输出模块,其用于基于所述第一混淆信息、所述第二混淆信息以及所述第三混淆信息,生成与所述目标代码对应的代码混淆文件;其中,
112.所述基本块中配置有对应的数据处理算法。
113.需要说明的是,目标代码可以是c语言代码。
114.本技术实施例中,对目标代码进行拆分,基于拆分获得的代码信息的类型,按照对应的预设的混淆规则进行混淆处理,从而实现代码混淆工作,具有一定的便利性和通用性,满足代码混淆的使用需求。
115.进一步的,所述代码混淆模块还用于基于预设的混淆白名单,将所述目标代码中与所述混淆白名单匹配的代码信息在不做混淆处理的前提下存储对应的所述代码混淆文件。
116.进一步的,所述代码混淆模块还用于基于预设的文件混淆规则,对所述目标代码的当前文件名进行混淆处理,获得对应的混淆文件名并存入对应的所述代码混淆文件。
117.进一步的,所述代码混淆模块还用于将所述目标代码中的所述常量字符串对应的所述第二混淆信息存入预设的第一混淆数组;其中,
118.所述第一混淆数组被配置在所述代码混淆文件内。
119.具体的,所述第一混淆数组为ascii码数组。
120.结合上述技术方案,在实际实施时,可以基于上述技术方案的实质内容编写执行程序,接收两个输入参数,一个是目标代码的存储路径,一个是混淆配置文件的存储路径,混淆配置文件内至少包括混淆名称映射表、混淆对应关系、混淆白名单以及文件混淆规则;
121.先读取混淆配置文件文件流,解析数据格式,获取混淆白名单;
122.然后读取目标代码的存储路径,依次读取所有目标代码,进行词法分析,生成词法树;
123.针对目标代码对应的词法树中的函数名称、结构体名、枚举类型以及全局变量名称(混淆白名单中的名称除外),生成对应混淆名称映射表并对名称进行替换,再对函数体实现对部分增加混淆控制流。
124.需要说明的是,基于本技术实施例的技术方案,通过对目标代码进行混淆,支持多级目录多个文件的混淆工作,生成对应的混淆后的代码文件,具体的混淆工作包括:函数名替换、全局变量名称替换、字符串常量混淆、结构体名称替换、枚举名和结构体属性名替换、以及函数控制流混淆;
125.由于本技术实施例的技术方案是对原始代码文件做混淆,不受编译器限制,混淆后的代码文件可以在任意编译器上编译;
126.另外,该技术方案还支持白名单功能,对于部分不需要混淆的函数名、结构体名、
枚举类型以及全局变量,可以增加到混淆白名单,当判断属于混淆白名单内的名称时,则不进行混淆。
127.需要说明的是,在本技术中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
128.以上仅是本技术的具体实施方式,使本领域技术人员能够理解或实现本技术。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本技术的精神或范围的情况下,在其它实施例中实现。因此,本技术将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献