System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及软件安全,特别是涉及一种对抗式程序混淆方法、系统、设备及介质。
技术介绍
1、软件混淆是一种通过对二进制代码进行变换和重构来隐藏软件的真实意图和实现细节的技术。这种技术在软件安全领域得到了广泛的应用,可以用来防止逆向工程、反编译和代码分析等攻击。
2、程序控制流混淆是软件混淆中一种常见的混淆技术,它可以将程序的控制流程进行随机化,从而增加程序的安全性,使得攻击者难以理解程序的执行流程。程序控制流混淆的实现方式通常是在程序的基本块之间插入随机化的跳转语句,从而改变程序的执行顺序。基本块是一段不包含分支语句的连续指令序列,控制流从一个基本块转移到另一个基本块。当前常用的程序控制流混淆技术包括将程序中的条件语句进行随机化,将程序中的跳转语句进行随机化,将程序中的控制流程进行平坦化,将程序中的逻辑表达式进行随机化使得攻击者难以理解程序的逻辑。在随机化过程中,一般会对原有程序的真实块进行克隆并随机替换其中的一些指令来生成永远不会被执行的分支块,这种方案会生成大量垃圾指令使攻击者难以逆向分析其程序逻辑。
3、字符串混淆通过对可读字符串的加密、拆分、嵌入和动态解密等技术手段,增加了逆向工程的难度,提高了软件的安全性。
4、但现有技术中由于控制流混淆的随机不可控性,致使一些特征的重复出现。而在字符串混淆过程中,将所有可读字符串混淆加密为密文,致使程序信息熵具有明显特征。所以当前混淆方案都会使程序在被人工逆向分析时很容易判断其混淆方式,并且无法有效对抗人工智能下的特征与相似性分析。
>技术实现思路
1、本专利技术的目的是提供一种对抗式程序混淆方法、系统、设备及介质,提高了代码混淆的有效性,从而提供了软件的安全性。
2、为实现上述目的,本专利技术提供了如下方案:
3、一种对抗式程序混淆方法,包括:
4、采用代码编译器将目标代码转化为目标代码中间语言;
5、随机从对抗代码集中选择对抗代码;所述对抗代码集为基于使用特征和代码特征筛选后的开源代码集合;
6、采用代码编译器将选择出的对抗代码转化为对抗代码中间语言;
7、对所述目标代码中间语言和所述对抗代码中间语言进行融合,得到融合后的中间语言;
8、采用所述代码编译器对所述融合后的中间语言进行编译,生成可执行文件。
9、可选地,所述对抗代码集的构建包括:
10、从互联网上下载开源代码仓库;
11、将下载的开源代码仓库中不属于目标代码语言或者与目标代码编译平台不同的开源代码仓库丢弃,得到第一代码集合;
12、根据使用特征计算所述第一代码集合中各开源代码仓库的第一特征;所述使用特征包括收藏人数、拷贝人数和代码更新次数;
13、根据各代码特征计算所述第一代码集合中各开源代码仓库的第二特征;
14、丢弃所述第一代码集合中所述第一特征低于第一设定值或者所述第二特征低于第二设定值的开源代码仓库,得到第二代码集合;
15、将所述第二代码集合加入对抗代码集。
16、可选地,所述代码特征包括可读字符串数量指数、数组变量数量指数、判断分支数量指数、函数调用复杂度指数和函数调用复杂度指数。
17、可选地,所述目标代码中间语言和所述对抗代码中间语言均为llvm ir。
18、可选地,对所述目标代码中间语言和所述对抗代码中间语言进行融合,得到融合后的中间语言,具体包括:
19、对于所述目标代码中间语言中每个字符串:随机从所述对抗代码中间语言中选择一个字符串作为密钥,采用预设加密算法对所述目标代码中间语言中字符串进行加密,将加密结果替换所述目标代码中间语言中字符串,得到第一融合结果;
20、对于所述第一融合结果中每个数组变量:随机从所述对抗代码中间语言中选择一个数组变量作为密钥,采用预设加密算法对所述第一融合结果中数组变量进行加密,采用加密结果替换所述第一融合结果中数组变量,得到第二融合结果;
21、在所述第二融合结果的随机位置插入与预设加密算法对应的解密函数;
22、通过遍历插入解密函数后的第二融合结果中每个指令,获得插入解密函数后的第二融合结果中每个变量的调用位置,并将各调用位置替换为所述解密函数,得到第三融合结果;
23、通过遍历器来遍历所述三融合结果中的指令,构建所述三融合结果的控制流图以及获取所述控制流图对应的基本块,将所述控制流图对应的基本块记为第一基本块;
24、随机选择多个所述第一基本块,并在选择的各所述第一基本块之间插入永远不可达的条件分支,并在永远不可达的条件分支之后插入第二基本块,所述第二基本块为对抗代码中间语言基本块;所述永远不可达的条件分支为永假或者永真的占位符,记为比较占位符;
25、通过多次随机生成常量、运算符、布尔运算以及比较符来生成1到5随机个数的混合比较算式;
26、将1到5随机个数的混合比较算式,用与逻辑或者或逻辑结合,生成与所述比较占位符对应的谓词;并用所述谓词替换所述比较占位符,得到融合后的中间语言。
27、可选地,所述预设加密算法为异或加密、移位加密和aes加密中的一种。
28、本专利技术还公开了一种对抗式程序混淆系统,包括:
29、目标代码转化模块,用于采用代码编译器将目标代码转化为目标代码中间语言;
30、对抗代码选择模块,用于随机从对抗代码集中选择对抗代码;
31、对抗代码转化模块,用于采用代码编译器将选择出的对抗代码转化为对抗代码中间语言;
32、代码融合器,用于对所述目标代码中间语言和所述对抗代码中间语言进行融合,得到融合后的中间语言;
33、可执行文件生成模块,用于采用所述代码编译器对所述融合后的中间语言进行编译,生成可执行文件。
34、本专利技术还公开了一种电子设备,其特征在于,包括存储器及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行根据所述的对抗式程序混淆方法。
35、本专利技术还公开了一种计算机可读存储介质,其特征在于,其存储有计算机程序,所述计算机程序被处理器执行时实现如所述的对抗式程序混淆方法。
36、根据本专利技术提供的具体实施例,本专利技术公开了以下技术效果:
37、本专利技术一种对抗式程序混淆方法,随机从对抗代码集中选择对抗代码;对抗代码集为基于使用特征和代码特征筛选后的开源代码集合;对目标代码中间语言和对抗代码中间语言进行融合,得到融合后的中间语言;采用代码编译器对融合后的中间语言进行编译,生成可执行文件,提高了对抗代码的随机性,提高了代码混淆的有效性,增加了逆向工程的难度,提高了软件的安全性。
本文档来自技高网...【技术保护点】
1.一种对抗式程序混淆方法,其特征在于,包括:
2.根据权利要求1所述的对抗式程序混淆方法,其特征在于,所述对抗代码集的构建包括:
3.根据权利要求2所述的对抗式程序混淆方法,其特征在于,所述代码特征包括可读字符串数量指数、数组变量数量指数、判断分支数量指数、函数调用复杂度指数和函数调用复杂度指数。
4.根据权利要求1所述的对抗式程序混淆方法,其特征在于,所述目标代码中间语言和所述对抗代码中间语言均为LLVM IR。
5.根据权利要求1所述的对抗式程序混淆方法,其特征在于,对所述目标代码中间语言和所述对抗代码中间语言进行融合,得到融合后的中间语言,具体包括:
6.根据权利要求5所述的对抗式程序混淆方法,其特征在于,所述预设加密算法为异或加密、移位加密和AES加密中的一种。
7.一种对抗式程序混淆系统,其特征在于,包括:
8.一种电子设备,其特征在于,包括存储器及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行根据权利要求1至6中任一项所述的对抗式程序混淆方法。
9.一种计算机可读存储介质,其特征在于,其存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6中任一项所述的对抗式程序混淆方法。
...【技术特征摘要】
1.一种对抗式程序混淆方法,其特征在于,包括:
2.根据权利要求1所述的对抗式程序混淆方法,其特征在于,所述对抗代码集的构建包括:
3.根据权利要求2所述的对抗式程序混淆方法,其特征在于,所述代码特征包括可读字符串数量指数、数组变量数量指数、判断分支数量指数、函数调用复杂度指数和函数调用复杂度指数。
4.根据权利要求1所述的对抗式程序混淆方法,其特征在于,所述目标代码中间语言和所述对抗代码中间语言均为llvm ir。
5.根据权利要求1所述的对抗式程序混淆方法,其特征在于,对所述目标代码中间语言和所述对抗代码中间语言进行融...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。