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

一种基于中间语言的代码保护方法与流程

2021-11-09 20:25:00 来源:中国专利 TAG:


1.本发明涉及一种软件安全保护领域,特别是涉及一种代码虚拟化保护方法。


背景技术:

2.商业软件经常由于加密算法逻辑被攻击者通过逆向工程破解,使得不法分子从中受益,导致开发者的软件知识产权受到侵犯。开发者可以通过软件保护技术加大攻击者的逆向难度,增加攻击者的逆向成本,以保护开发者权益。
3.目前常见的同类方案有软件加壳、花指令、控制流平坦化、代码虚拟化等软件保护技术。
4.软件加壳分为压缩壳和加密壳,由于软件运行时壳会解压、解密程序的代码及数据,攻击者可以很轻易的将运行时的进程转储,从而得到程序的二进制代码。
5.动态解密技术会在运行时动态地解密代码及数据,虽然不会一次性解密全部代码,但攻击者只要分析出解密函数,使用钩子等技术便可破解从而针对软件的二进制代码进行逆向工程。
6.花指令技术是在原始的软件代码中插入大量无关的操作,增加攻击者逆向分析的工作量,但攻击者可以通过发现花指令的规律或者是通过污点分析等方式排除无关操作等方式,同样能够较轻易的过滤掉花指令,找到关键的加密算法逻辑。
7.控制流平坦化是将程序基本块拆分成诸多小块,通过生成大量的分支,将程序原始的控制流拆散,增加控制流的复杂度,从而隐藏程序真正的处理逻辑。但目前攻击者已经可以通过符号执行等技术,缓解平坦化控制流,还原程序接近原始的控制流。
8.代码虚拟化技术则是通过将程序原始的一条或多条指令翻译为一种新的自定义指令和操作,生成相应的虚拟化代码,并在原来代码中嵌入能够执行虚拟化代码的解释器。目前的代码虚拟化技术大多是针对于机器码的虚拟化,例如vmprotect等,直接针对生成的可执行程序进行虚拟化代码保护,允许使用代码虚拟化技术保护的指令集较为单一,主要是针对于x86指令集的代码虚拟化,此外还可能存在兼容性和稳定性的问题。
9.因此,现有技术中的软件保护技术均存在采用单一软件保护技术,造成保护力度较低、仅支持少数指令集的问题。


技术实现要素:

10.鉴于以上所述现有技术的缺点,本发明的目的在于提供一种基于中间语言的代码保护方法,用于解决现有技术中采用单一软件保护技术,存在保护力度较低、仅支持少数指令集的问题。
11.本发明提供一种基于中间语言的代码保护方法,所述方法包括以下步骤:
12.将待保护函数的源代码编译成第一中间语言;将所述第一中间语言翻译成虚拟化指令代码;
13.将所述待保护函数的调用方式修改为采用解释器来执行所述虚拟化指令代码;
14.编写所述解释器的解释器函数,将所述解释器函数编译成第二中间语言;合并所述虚拟化指令代码和所述第二中间语言,得到第三中间语言;
15.混淆所述第三中间语言。
16.于本发明的一实施例中,所述将待保护函数的源代码编译成第一中间语言之前的步骤还包括:对待保护的函数进行标记。
17.于本发明的一实施例中,所述标记的方式包括使用特殊化函数名、设置函数属性、预处理指令的一种或多种组合。
18.于本发明的一实施例中,所述修改所述函数的调用方式包括:删除所述待保护函数。
19.于本发明的一实施例中,删除所述待保护函数后,所述修改所述函数的调用方式还包括:将所述解释器的全局变量进行初始化。
20.于本发明的一实施例中,将所述解释器的全局变量进行初始化后,所述修改所述函数的调用方式还包括:将所述待保护函数的传入参数存入虚拟化内存中。
21.于本发明的一实施例中,所述混淆所述第三中间语言,包括:将所述第三中间语言中的虚拟化指令代码随机化。
22.于本发明的一实施例中,所述混淆所述第三中间语言,还包括:修改所述第三中间语言中的虚拟化指令代码的类型。
23.于本发明的一实施例中,所述混淆所述第三中间语言,还包括:使用定义内联函数的方式消除所述第三中间语言中的第二中间语言的代码结构。
24.本发明还提供一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明的一种基于中间语言的代码保护方法中任意一项所述的方法步骤。
25.如上所述,本发明的一种基于中间语言的代码保护方法,提供一种基于中间语言的代码虚拟化方案,以代码虚拟化的强大力度保护软件代码,大幅度增加攻击者的逆向工程工作量;相比于现有的代码虚拟化是直接应用于可执行程序上,本发明的方案是基于源代码层面,在编译的过程中实施代码虚拟化保护,能够提供更好的程序稳定性和兼容性。
附图说明
26.图1显示为本发明第一实施方式中的整体工作流程图。
27.图2显示为本发明第一实施方式中的修改调用待保护函数的方式的工作流程图。
具体实施方式
28.以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
29.需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也
可能更为复杂。
30.请参阅图1,本发明的第一实施方式涉及一种基于中间语言的代码保护方法,具体如下以下步骤:
31.步骤101,将待保护函数的源代码编译成第一中间语言;将第一中间语言翻译成虚拟化指令代码;
32.具体的说,将待保护函数的源代码编译成第一中间语言之前,先对待保护的函数进行标记;其中,标记方式包括使用特殊化函数名、设置函数属性(attribute)、预处理指令(#pragma)的一种或多种组合。
33.使用clang编译器对标记后的待保护函数的源代码进行编译,生成基于llvm的中间语言,记为第一中间语言。
34.进一步说明,根据标记定位到待保护的函数,使用llvm中间语言处理框架加载生成的第一中间语言文件,并使用虚拟化保护的翻译器根据每一条中间语言指令生成对应的虚拟化指令代码。
35.步骤102,将待保护函数的调用方式修改为采用解释器来执行虚拟化指令代码;
36.请参阅图2,具体的说,修改调用待保护函数的方式包括:
37.步骤1021,删除待保护函数的代码实现部分;采用这种方案,在待保护函数被转换为对应的虚拟化指令代码后,删除待保护函数的源代码,可保证最终生成的二进制文件中没有该函数原始的汇编代码,从而避免攻击者用常规的方法反汇编或反编译该待保护函数。
38.步骤1022,对解释器相关的全局变量进行初始化;即将部分指针指向相关的全局变量,同时将部分全局变量初始化为0。
39.步骤1023,将待保护函数的传入参数存入虚拟化内存当中;需要说明的是,待保护函数的传入参数是在调用受保护函数的那个函数中实例化的参数,也就是调用者中的变量,不会随着待保护函数的删除而删除。此外,待保护函数由第一中间语言转换为虚拟化指令代码后,若原待保护函数中需要对传入参数进行处理,则在虚拟化指令代码解释执行时也需要对传入参数进行处理,因此保存传入参数的目的是为了解释执行虚拟化指令代码时能够更方便的对这些参数进行处理。
40.修改完成后调用解释器。
41.步骤103,编写解释器的解释器函数,将解释器函数编译成第二中间语言;合并虚拟化指令代码和第二中间语言,得到第三中间语言;
42.具体的说,使用高级语言(c/c )编写该解释器函数,使得该解释器能够执行虚拟化指令代码,并能够保持第一中间语言的语义不变;
43.使用clang编译器对解释器函数进行编译,生成解释器函数的中间语言,记为第二中间语言;将前序步骤生成的虚拟化指令代码与第二中间语言合并,得到完整的虚拟化后的中间语言表示,记为第三中间语言。
44.将预先准备好的中间语言形式的解释器导入到此模块中,并将全局变量、函数等与解释器关联。
45.步骤104,混淆第三中间语言。
46.具体的说,混淆生成的第三中间语言,对解释器函数及虚拟化代码进行保护,具体
包括:
47.使用定义内联函数的方式消除第三中间语言中的第二中间语言的代码结构,使解释器的控制流图更为复杂
48.使用随机数发生器方式将虚拟化指令代码的操作码随机化,使虚拟化指令代码的值分布更为随机,并对应修改解释器部分;
49.改变各种虚拟化指令代码的类型,使虚拟化指令代码的多样性得到充分的提升。
50.本发明的第一实施方式涉及一种基于中间语言的代码保护方法,还包括以下步骤:
51.将经过虚拟化保护的第三中间语言文件,使用llvm编译器后端进行由中间语言到二进制代码的代码生成,可以得到支持多种架构的二进制可执行文件。
52.需要说明的是,不同架构下的第一中间语言存在部分差异,因此生成第三中间语言也存在差异;无论目标是何种架构,源代码中间语言形式都是类似的,通过设置编译参数,clang编译器后端能够将中间语言转换成不同架构下的机器语言。
53.本发明的第二实施方式涉及一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一实施方式中任一所述方法的步骤。
54.综上所述,本发明的一种基于中间语言的代码保护方法,提供一种基于中间语言的代码虚拟化方案,以代码虚拟化的强大力度保护软件代码,大幅度增加攻击者的逆向工程工作量;相比于现有的代码虚拟化是直接应用于可执行程序上,本发明的方案是基于源代码层面,在编译的过程中实施代码虚拟化保护,能够提供更好的程序稳定性和兼容性。此外,本发明基于中间语言的特性,借助于编译器后端能够支持多种架构指令集,方便用户使用。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
55.上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
再多了解一些

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

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

相关文献