CN107341373B - 一种可执行程序的保护方法及装置 - Google Patents
一种可执行程序的保护方法及装置 Download PDFInfo
- Publication number
- CN107341373B CN107341373B CN201710521603.XA CN201710521603A CN107341373B CN 107341373 B CN107341373 B CN 107341373B CN 201710521603 A CN201710521603 A CN 201710521603A CN 107341373 B CN107341373 B CN 107341373B
- Authority
- CN
- China
- Prior art keywords
- function
- protected
- executable program
- encrypted
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 340
- 239000012141 concentrate Substances 0.000 claims abstract description 10
- 230000001681 protective effect Effects 0.000 claims description 11
- 238000002347 injection Methods 0.000 claims description 9
- 239000007924 injection Substances 0.000 claims description 9
- 238000012544 monitoring process Methods 0.000 claims 2
- 230000006870 function Effects 0.000 description 165
- 238000010586 diagram Methods 0.000 description 10
- 238000004590 computer program Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000002513 implantation Methods 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002045 lasting effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种可执行程序的保护方法及装置,涉及计算机安全技术领域,主要目的是用以解决现有技术中程序集代码保护受限的问题,并对程序集中更多代码段进行保护。所述方法包括:从可执行程序集中确定待保护方法;解析所述待保护方法,得到所述待保护方法的IL指令,对所述待保护方法的IL指令进行加密;在全局构造函数中对第一函数进行挂钩,挂钩后的函数为第二函数,所述第二函数用于当待保护方法被调用时对所述待保护方法加密后的IL指令进行解密;将所述全局构造函数以及所述IL指令加密后的所述待保护方法注入至可执行程序集中。本发明主要用于对可执行程序进行保护。
Description
技术领域
本发明涉及计算机安全领域,尤其是一种可执行程序的保护方法及装置。
背景技术
在信息安全技术领域,软件作为一种宝贵财富,其安全性越来越受到关注。.NET作为微软新一代技术平台,可以使用C#或VB等各种程序语言进行编写,生成.NET微软中间语言(Microsoft Intermediate Language,MSIL),进而通过虚拟机执行引擎运行编译后的MSIL,将中间语言代码转换为机器代码。而在整个代码转换过程中通过.NET编译后的程序集很容易被反编译,甚至生成与.NET编译后的程序集几乎相同的源代码,导致程序集的安全性较差。
目前对于程序集的保护方法主要是基于硬件的程序保护,通常从程序集中提取出部分需要保护的代码到保护装置中,进而通过保护装置对程序集进行保护,这样一部分代码在计算机中执行,另一部分代码在保护装置中模拟执行。但是,基于硬件的程序保护的方式在进行代码提取过程中,如果需要保护的代码过多,可移植的代码指令到受保护装置的空间限制,无法对过多的代码进行保护,使得程序集中其他代码的安全性无法保证。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种可执行程序的保护方法及装置,用以解决现有技术中程序集代码保护受限的问题,并对程序集中更多代码段进行保护。
本发明实施例的一方面,本发明提供了一种可执行程序的保护方法,包括:
从可执行程序集中确定待保护方法;
解析所述待保护方法,得到所述待保护方法的IL指令,对所述待保护方法的IL指令进行加密;
在全局构造函数中对第一函数进行挂钩,挂钩后的函数为第二函数,所述第二函数用于当所述待保护方法被调用时对所述待保护方法加密后的IL指令进行解密;
将所述全局构造函数以及IL指令加密后的所述待保护方法注入至可执行程序集中。
进一步地,所述从可执行程序集中确定待保护方法包括:
通过解析所述可执行程序集,建立方法数据库,所述方法数据库中包括所述可执行程序集中的类以及类中的方法;
通过查找所述方法数据库,获取待保护方法;或
通过调用数据接口遍历所述可执行程序集中的类以及类中的方法,获取待保护方法。
进一步地,所述在全局构造函数中对第一函数进行挂钩包括:
从全局构造函数中获取所述第一函数的函数地址;
在所述函数地址对应的起始位置添加第二函数,所述第二函数中包括解密判定代码,所述解密判定代码用于当执行到所述待保护方法时,对所述待保护方法进行解密判定。
进一步地,所述从所述全局构造函数中获取所述第一函数的函数地址包括:
调用导出函数得到所述第一函数对应的函数指针;
根据所述函数指针从所述全局构造函数中读取所述第一函数的函数地址。
进一步地,所述方法还包括:
当接收到可执行程序集中预设方法的调用指令时,调用所述第二函数判断所述预设方法是否为加密后的方法;
如果是,则在调用所述预设方法之前对所述预设方法加密后的IL指令进行解密;
如果否,则直接调用所述预设方法。
依据本发明实施例的另一方面,本发明实施例提供了一种可执行程序的保护装置,包括:
确定单元,用于从可执行程序集中确定待保护方法;
加密单元,用于解析所述待保护方法,得到所述待保护方法的IL指令,对所述待保护方法的IL指令进行加密;
挂钩单元,用于在全局构造函数中对第一函数进行挂钩,挂钩后的函数为第二函数,所述第二函数用于当所述待保护方法被调用时对所述待保护方法加密后的IL指令进行解密;
注入单元,用于将所述全局构造函数以及IL指令加密后的所述待保护方法注入至可执行程序集中。
进一步地,所述确定单元包括:
解析模块,用于通过解析所述可执行程序集,建立方法数据库,所述方法数据库中包括所述可执行程序集中的类以及类中的方法;
查找模块,用于通过查找所述方法数据库,获取待保护方法;或
所述确定单元,具体用于通过调用数据接口遍历所述可执行程序集中的类以及类中的方法,获取待保护方法。
进一步地,所述挂钩单元包括:
获取模块,用于从全局构造函数中获取所述第一函数对应的函数地址;
添加模块,用于在所述函数地址对应的起始位置添加第二函数,所述第二函数中包括解密判定代码,所述解密判定代码用于当执行到所述待保护方法时,对所述待保护方法进行解密判定。
进一步地,所述获取模块,具体用于调用导出函数得到所述第一函数对应的函数指针;
所述获取模块,具体还用于根据所述函数指针从所述全局构造函数中读取所述第一函数对应的函数地址。
进一步地,所述装置还包括:
判断单元,用于当接收到可执行程序集中预设方法的调用指令时,调用所述第二函数判断所述预设方法是否为加密后的方法;
调用单元,用于在判定所述预设方法是加密后的方法时,在调用所述预设方法之前对所述预设方法加密后的IL指令进行解密;
所述调用单元,还用于在判定所述预设方法不是加密后的方法时,直接调用所述预设方法。
借由上述技术方案,本发明提供的一种可执行程序的保护方法及装置,通过解析方法中的IL指令,对IL指令进行加密的方式对可执行程序集中待保护方法进行保护,无需限制需要保护代码的数量,也无需移植需要保护的代码,从而提高可执行程序的安全性,通过在全局构造函数中对第一函数进行挂钩,挂钩后的函数为第二函数,这里的第二函数用于当待保护方法被调用时能够对待保护方法中加密后的IL指令进行解密,从而方便用户调用加密后的方法。与现有技术中采用代码移植的方式来对可执行程序保护的方法相比,本发明实施例无需移植需要保护的代码,并且能够对程序集中更多代码进行保护,提高了可执行程序的安全性,另外,通过在全局构造函数中对第一函数进行挂钩,当加密的方法被调用时,能够在调用加密的方法之前先执行第二函数,利用保护装置对方法中的IL指令解密后再执行该方法,从而提高可执行程序的安全性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明实施例提供的一种可执行程序的保护方法流程示意图;
图2示出了本发明实施例提供的另一种可执行程序的保护方法流程示意图;
图3示出了本发明实施例提供的一种可执行程序的保护装置结构示意图;
图4示出了本发明实施例提供的另一种可执行程序的保护装置结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本发明实施例提供了一种可执行程序的保护方法,如图1所示,该方法主要用于对可执行程序集中的方法进行保护,具体步骤包括:
101、从可执行程序集中确定待保护方法。
其中,可执行程序是指一种在可操作系统存储空间中浮动定位的可执行程序,用以完成各项计算机功能,如计算机中数据的处理、数据的交互等功能,具体可以通过.NET或者JAVA等技术平台将编辑完成的源代码生成可执行程序。
由于多数技术平台的目标是将多种语言编译为一种格式,不同编译器将C#或VB之类的符合CLS规范的语言源代码编译为统一格式,如.NET平台会将语言源代码编译为IL格式,在运行时IL格式的可执行程序时,由即时编译器转化为机器执行指令,而IL格式是开放的、自描述的,如果不对指令进行加密很容易的反编译成源代码,很容易泄露源代码,无法保证程序运行的安全性。
其中,可执行程序集为包括一个或多个可执行程序的集合,通常会包括一个或多个类型定义文件和资源文件的集合,这里的类型定义文件用于保存可执行程序集中的文件清单,资源文件用于保存多种形式的数据,如字符串、图像或持久的对象等,而每个可执行程序中又包括有多个类以及类中的方法,如何从可执行程序集中确定待保护方法,对于本发明实施例可以通过以下两种方式,一种可以预先创建方法数据库,这里的方法数据库中包括可执行程序集中的类及类中的方法,进而通过查找方法数据库的方式来选择需要保护方法的函数名称,另一种可以通过调用接口从可执行程序集中选择需要保护的方法,当然本发明实施例对此不进行限定。
102、解析所述待保护方法,得到所述待保护方法的IL指令,对所述待保护方法的IL指令进行加密。
其中,IL指令是.NET框架中中间语言(Intermediate Language)的缩写,使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出的程序代码并不是CPU构架能直接执行的机器代码,而是一种IL指令的代码,通过IL指令可以转化为不同CPU构架能直接执行的机器代码。
应理解的是,如果可执行程序集中方法对应的代码语言是IL指令代码,可以通过JIT Compiler即时编译器进行代码转化,JIT(Just In Time)是通过.net编译器生成的应用程序最终面向机器的编译器,当方法被执行时,JIT会将IL指令代码编译为机器代码。
对于本发明实施例,对待保护方法的IL指令进行加密的方法可以调用加密锁的保护函数进行加密,加密锁对应的加密算法可以使用对称算法或者非对称算法,加密秘钥由加密锁生成,这里对于不同安全等级待保护方法中的IL指令可以选择不同的加密锁,对于比较核心待保护方法中的IL指令可选择安全级高的加密锁,本发明实施例不进行限定。
103、在全局构造函数中对第一函数进行挂钩,挂钩后的函数为第二函数。
其中,第一函数是能够监控到可执行程序集中方法调用的函数,例如在.NET框架下,第一函数可以为compileMethod函数,compileMethod函数是JIT编译器引擎工作的关键函数,当执行compileMethod函数则说明启动JIT编译器,compileMethod函数用于将当前方法中的IL指令代码编译为机器代码。当然如果在其他框架下可以为其他函数,本发明实施例不进行限定。
在本发明实施例方案中,对第一函数进行了挂钩,挂钩后的函数为第二函数,第二函数用于当待保护方法被调用时对待保护方法加密后的IL指令进行解密。
例如,当第一函数为compileMethod时,第二函数可以为MycompileMethod或者newcompileMethod函数等,本发明实施例不进行限定。采用本发明实施例方案,在执行可执行程序集中的方法时,首先执行第二函数(MycompileMethod),之后执行第一函数(compileMethod)。
104、将所述全局构造函数以及IL指令加密后的所述待保护方法注入至可执行程序集中。
对于本发明实施例,注入的方式可以采用微软提供的元数据API来实现,如注入类采用DefineTypeDef函数,注入方法采用DefineMethod函数,本发明实施例对注入方式不进行限定。
结合上述的实现方式可以看出,本发明实施例提供的一种可执行程序的保护方法,通过解析方法中的IL指令,对IL指令进行加密的方式对可执行程序集中需要保护的方法进行保护,无需限制需要保护代码的数量,也无需移植需要保护的代码,从而提高可执行程序的安全性,通过在全局构造函数中对第一函数进行挂钩,挂钩后的函数为第二函数,这里的第二函数用于当待保护方法被调用时能够对待保护方法中加密后的IL指令进行解密,从而方便用户调用加密后的方法。与现有技术中采用代码移植的方式来对可执行程序保护的方法相比,本发明实施例无需移植需要保护的代码,并且能够对程序集中更多代码进行保护,提高了可执行程序的安全性,另外,通过在全局构造函数中对第一函数进行挂钩,当加密的方法被调用时,能够在调用加密的方法之前先执行第二函数,利用保护装置对方法中的IL指令解密后再执行该方法,从而提高可执行程序的安全性。
以下为了更加详细地说明本发明提出的一种可执行程序的保护方法,特别是在全局构造函数中对第一函数进行挂钩的步骤,本发明实施例还提供了另一种可执行程序的保护方法,如图2所示,该方法的具体步骤包括:
201、通过调用数据接口遍历所述可执行程序集中的类以及类中的方法,获取待保护方法。
其中,数据接口用来与可执行程序集中的类以及类中方法进行对接,以便于调用,不同的接口对应有不同的方法,通过调用数据接口可以查找可执行程序集中的类以及类中的方法,进而获取需要保护的方法。
通常可执行程序集中会包括一个或多个类型定义文件和资源文件的集合,在可执行程序集包含的所有文件中,有一个文件用于保存清单,具体用于描述程序集的版本、语言文化、发布者以及组成文件等信息,还有可执行的程序文件(.exe扩展名文件)以及其他可执行程序使用的库(.dll扩展名文件)等多个资源文件,这里的可执行的程序文件中可以包含多个类,每个类中可以包括多个方法,进一步根据用户需求从可执行程序集中确定需要保护的方法。
举例来说,本发明实施例给出.Net框架下可执行程序如下:
对于本例来说,可执行程序中包含Program类,Program中包含.ctor、Main方法,选择Main方法为需要保护的方法。
202、解析所述待保护方法,得到所述待保护方法的IL指令,对所述待保护方法的IL指令进行加密。
其中,IL指令是.NET框架中中间语言(Intermediate Language)的缩写,使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出的程序代码并不是CPU构架能直接执行的机器代码,而是一种IL指令的代码,通过IL指令可以转化为不同CPU构架能直接执行的机器代码。
基于步骤201提供的可执行程序,举例来说,可执行程序中包含Program类,Program类中包含.ctor、Main方法,Main方法中的IL指令可以如下表示:
{
IL_0000:nop
IL_0001:ldstr "hello,world"
IL_0006:call void[mscorlib]System.Console::WriteLine(string)
IL_000B:nop
IL_000C:ret
}
为了保护可执行程序的安全性,对需要保护的方法中的IL指令进行加密,对于本发明可以采用但不局限于采用加密锁方式进行加密,具体可以通过调用slm encrypt函数进行加密。
203、从全局构造函数中获取所述第一函数对应的函数地址。
其中,第一函数能够监控到可执行程序集中方法的调用,如果在.NET框架下,第一函数为compileMethod函数,该compileMethod函数是JIT编译器引擎工作的关键函数,当执行compileMethod函数则说明启动JIT编译器,进一步将方法中的IL指令代码编译为机器代码。当然如果在其他框架下可以为其他函数,本发明实施例不进行限定。
对于本发明实施例,具体可以通过调用导入函数得到第一函数对应的函数指针,进而根据函数指针从全局构造函数中读取第一函数的函数地址,例如get jit()为导入函数,该函数返回一个虚表指针,而该虚表的第一项就是compileMethod函数对应的函数指针,进而根据函数指针从全局构造函数中读取compileMethod函数对应的函数地址。
204、在所述函数地址对应的起始位置添加第二函数。
其中,第二函数中包括解密代码,解密判定代码用于当执行到待保护方法时,判定当前调用的待保护方法是否需要解密。具体的,可以通过从全局构造函数中获取第一函数对应的函数地址,并且在函数起始位置添加第二函数。当可执行程序集中的方法被调用时,首先执行第二函数,第二函数中的解密判定代码判断当前方法是否需要解密,如果需要解密则调用解密装置对当前方法中的IL指令进行解密,从而提高可执行程序的安全性。
205、将所述全局构造函数以及IL指令加密后的所述待保护方法注入至可执行程序集中。
对于本发明实施例,注入的方式可以采用微软提供的元数据API来实现,如注入类采用DefineTypeDef函数,注入方法采用DefineMethod函数,本发明实施例对注入方式不进行限定。
这里在注入后的.NET可执行程序集保留了保护前.NET可执行程序集的大部分信息,如引用程序集信息、程序集信息、类信息,而保护后的.NET可执行程序集修改了需要保护的方法,并加入增加了保护方法的解密的全局构造函数。
206、当接收到可执行程序集中预设方法的调用指令时,调用所述第二函数判断所述预设方法是否为加密后的方法。
其中,预设方法可以为可执行程序集中任一方法,即可能为加密过的方法,也可能为未加密过的方法,当接收到可执行程序集中预设方法的调用指令时,进一步跳转至第二函数,通过执行第二函数来判断预设方法是否为加密后的方法。
对于本发明实施例,加密过的方法与未加密过的方法在执行时用户的操作有所不同,对于加密后的方法通常无法执行,需要通过解密装置进行解密,而本发明实施例通过调用第二函数预先进行解密判断来方便可执行程序集中方法的调用。
207a、如果判断所述预设方法是加密后的方法,则对所述预设方法的IL指令进行解密。
需要说明的是,此处对预设方法的IL指令进行解密是在调用预设方法之前先采用第二函数对预设方法的IL指令进行解密,再采用第一函数将预设方法解密后的IL指令编译为机器代码。
相应地,与步骤207a对应的步骤207b、如果判断所述预设方法不是加密后的方法,则直接调用所述预设方法。
需要说明的是,此处直接调用预设方法是指直接采用第一函数将预设方法的IL指令编译为机器代码。
对于本发明实施例,具体应用场景可以包括但不限制于下述实现方式:在.NET框架下,首先通过调用数据接口分析可执行程序集中包含的类以及类中包含的方法,用户选择需要保护的方法为Program类中的Main方法,进一步分析需要保护的Main方法中的IL指令,并对调用深思精锐5加密锁对IL指令进行加密,同时在全局构造函数中对compileMethod函数进行挂钩,得到挂钩后的函数为HookHandler函数,HookHandler函数用于当加密后的方法被调用时对加密后方法中的IL指令进行解密,最后将全局构造函数以及加密后的方法注入可执行程序集中。
具体在执行方法调用过程中,当调用可执行程序集中的方法时,如果调用的方法为Main方法,通过调用HookHandler函数中的bencrtpt函数判定该方法是否为加密后的方法,此时bencrtpt==1,则判定Main方法是加密后的方法,进一步在调用Main方法之前通过解密装置对Main方法中的IL指令进行解密,调用解密后的Main方法,如果调用的方法为ctor方法,首先通过调用HookHandler函数中的bencrtpt函数判定该方法是否为加密后的方法,此时bencrtpt==0,则判定ctor方法不是加密后的方法,则直接调用ctor方法。
本发明实施例提供的另一种可执行程序的保护方法,通过解析方法中的IL指令,对IL指令进行加密的方式对可执行程序集中待保护方法进行保护,无需限制需要保护代码的数量,也无需移植需要保护的代码,从而提高可执行程序的安全性,通过在全局构造函数中对第一函数进行挂钩,挂钩后的函数为第二函数,这里的第二函数用于当待保护方法被调用时能够对待保护方法中加密后的IL指令进行解密,从而方便用户调用加密后的方法。与现有技术中采用代码移植的方式来对可执行程序保护的方法相比,本发明实施例无需移植需要保护的代码,并且能够对程序集中更多代码进行保护,提高了可执行程序的安全性,另外,通过在全局构造函数中对第一函数进行挂钩,当加密的方法被调用时,能够在调用加密的方法之前先执行第二函数先执行第二函数,利用解密装置对方法中的IL指令解密后再执行该方法,从而提高可执行程序的安全性。
另外,本发明实施例通过在第一函数对应的函数地址的起始位置添加第二函数,该第二函数中包括有解密判定代码,进而当可执行程序集中的方法被调用时跳转至第二函数对应的解密判定代码,预先执行解密代码来判断该方法是否需要解密,在判定更需要解密之后调用解密装置对方法进行解密,提高了程序运行过程中软件安全性。
进一步地,作为图1所示方法的具体实现,本发明实施例提供一种可执行程序的保护装置,该装置实施例与前述方法实施例对应,为便于阅读,本装置不在对前述方法实施例中的细节内容进行逐一赘述,但应当明确,本实施例中的装置能够对应实现前述方法实施例中的全部内容,如图3所示,所述装置包括:
确定单元31,可以用于从可执行程序集中确定待保护的方法;
加密单元32,可以用于解析所述确定待方法,得到所述待保护方法的IL指令,对所述待保护方法的IL指令进行加密;
挂钩单元33,可以用于在全局构造函数中对第一函数进行挂钩,挂钩后的函数为第二函数,所述第二函数用于当所述待保护方法被调用时对所述待保护方法加密后的IL指令进行解密;
注入单元34,可以用于将所述全局构造函数以及IL指令加密后的所述待保护方法注入至可执行程序集中。
本发明实施例提供的一种可执行程序的保护装置,通过解析方法中的IL指令,对IL指令进行加密的方式对可执行程序集中待保护方法进行保护,无需限制需要保护代码的数量,也无需移植需要保护的代码,从而提高可执行程序的安全性,通过在全局构造函数中对第一函数进行挂钩,挂钩后的函数为第二函数,这里的第二函数用于当待保护方法被调用时能够对待保护方法中加密后的IL指令进行解密,从而方便用户调用加密后的方法。与现有技术中采用代码移植的方式来对可执行程序保护的方法相比,本发明实施例无需移植需要保护的代码,并且能够对程序集中更多代码进行保护,提高了可执行程序的安全性,另外,通过在全局构造函数中对第一函数进行挂钩,当加密的方法被调用时,能够在调用加密的方法之前先执行第二函数,利用解密装置对方法中的IL指令解密后再执行该方法,从而提高可执行程序的安全性。
进一步地,如图4所示,所述装置还包括:
判断单元35,可以用于当接收到可执行程序集中预设方法的调用指令时,调用所述第二函数判断所述预设方法是否为加密后的方法;
调用单元36,可以用于在判定所述预设方法是加密后的方法时,在调用所述预设方法之前对所述预设方法加密后的IL指令进行解密;
所述调用单元36,还可以用于在判定所述预设方法不是加密后的方法时,直接调用所述预设方法。
进一步地,所述确定单元31包括:
解析模块311,可以用于通过解析所述可执行程序集,建立方法数据库,所述方法数据中包括所述可执行程序集中的类以及类中的方法
查找模块312,可以用于通过查找所述方法数据库,获取待保护方法;或
所述确定单元31,具体可以用于通过调用数据接口遍历所述可执行程序集中的类以及类中的方法,获取待保护方法。
进一步地,所述挂钩单元33包括:
获取模块331,可以用于从全局构造函数中获取所述第一函数对应的函数地址;
添加模块332,可以用于在所述函数地址对应的起始位置添加第二函数,所述第二函数中包括解密判定代码,所述解密判定代码用于当执行到所述待保护方法时,对所述待保护方法进行解密判定。
进一步地,所述获取模块331,具体可以用于调用导出函数得到所述第一函数对应的函数指针;
所述获取模块331,具体还可以用于根据所述函数指针从所述全局构造函数中读取所述第一函数对应的函数地址。
本发明实施例提供的另一种可执行程序的保护装置,通过在第一函数对应的函数地址的起始位置添加第二函数,该第二函数中包括有解密判定代码,进而当可执行程序集中的方法被调用时跳转至第二函数对应的解密判定代码,预先执行解密代码来判断该方法是否需要解密,在判定更需要解密之后调用解密装置对方法进行解密,提高了程序运行过程中软件安全性。
所述可执行程序的保护装置包括处理器和存储器,上述确定单元31、加密单元32、挂钩单元33和注入单元34等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来节省人力,能够解决现有技术中程序集代码保护受限的问题,并对程序集中更多代码段进行保护。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序代码:从可执行程序集中确定待保护方法;解析所述待保护方法,得到所述待保护方法的IL指令,对所述待保护方法的IL指令进行加密;在全局构造函数中对第一函数进行挂钩,挂钩后的函数为第二函数,所述第二函数用于当待保护方法被调用时对所述待保护方法加密后的IL指令进行解密;将所述全局构造函数以及所述IL指令加密后的所述待保护方法注入至可执行程序集中。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (8)
1.一种可执行程序的保护方法,其特征在于,包括:
从可执行程序集中确定待保护方法;
解析所述待保护方法,得到所述待保护方法的IL指令,对所述待保护方法的IL指令进行加密;
在全局构造函数中对第一函数进行挂钩,挂钩后的函数为第二函数,所述第一函数用于监测所述可执行程序集中的方法是否被调用,所述第二函数用于当所述待保护方法被调用时对所述待保护方法加密后的IL指令进行解密;
所述在全局构造函数中对第一函数进行挂钩包括:
从全局构造函数中获取所述第一函数的函数地址;
在所述函数地址对应的起始位置添加第二函数,所述第二函数中包括解密判定代码,所述解密判定代码用于当执行到所述待保护方法时,对所述待保护方法进行解密判定;
将所述全局构造函数以及IL指令加密后的所述待保护方法注入至可执行程序集中。
2.根据权利要求1所述的方法,其特征在于,所述从可执行程序集中确定待保护方法包括:
通过解析所述可执行程序集,建立方法数据库,所述方法数据库中包括所述可执行程序集中的类以及类中的方法;
通过查找所述方法数据库,获取待保护方法;或
通过调用数据接口遍历所述可执行程序集中的类以及类中的方法,获取待保护方法。
3.根据权利要求1所述的方法,其特征在于,所述从所述全局构造函数中获取所述第一函数的函数地址包括:
调用导出函数得到所述第一函数对应的函数指针;
根据所述函数指针从所述全局构造函数中读取所述第一函数的函数地址。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述方法还包括:
当接收到可执行程序集中预设方法的调用指令时,调用所述第二函数判断所述预设方法是否为加密后的方法;
如果是,则在调用所述预设方法之前对所述预设方法加密后的IL指令进行解密;
如果否,则直接调用所述预设方法。
5.一种可执行程序的保护装置,其特征在于,包括:
确定单元,用于从可执行程序集中确定待保护方法;
加密单元,用于解析所述待保护方法,得到所述待保护方法的IL指令,对所述待保护方法的IL指令进行加密;
挂钩单元,用于在全局构造函数中对第一函数进行挂钩,挂钩后的函数为第二函数,所述第一函数用于监测所述可执行程序集中方法是否被调用,所述第二函数用于当所述待保护方法被调用时对所述待保护方法加密后的IL指令进行解密;
所述挂钩单元包括:
获取模块,用于从全局构造函数中获取所述第一函数对应的函数地址;
添加模块,用于在所述函数地址对应的起始位置添加第二函数,所述第二函数中包括解密判定代码,所述解密判定代码用于当执行到所述待保护方法时,对所述待保护方法进行解密判定;
注入单元,用于将所述全局构造函数以及IL指令加密后的所述待保护方法注入至可执行程序集中。
6.根据权利要求5所述的装置,其特征在于,所述确定单元包括:
解析模块,用于通过解析所述可执行程序集,建立方法数据库,所述方法数据库中包括所述可执行程序集中的类以及类中的方法;
查找模块,用于通过查找所述方法数据库,获取待保护方法;或
所述确定单元,具体用于通过调用数据接口遍历所述可执行程序集中的类以及类中的方法,获取待保护方法。
7.根据权利要求5所述的装置,其特征在于,
所述获取模块,具体用于调用导出函数得到所述第一函数对应的函数指针;
所述获取模块,具体还用于根据所述函数指针从所述全局构造函数中读取所述第一函数对应的函数地址。
8.根据权利要求5-7中任一项所述的装置,其特征在于,所述装置还包括:
判断单元,用于当接收到可执行程序集中预设方法的调用指令时,调用所述第二函数判断所述预设方法是否为加密后的方法;
调用单元,用于在判定所述预设方法是加密后的方法时,在调用所述预设方法之前对所述预设方法加密后的IL指令进行解密;
所述调用单元,还用于在判定所述预设方法不是加密后的方法时,直接调用所述预设方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710521603.XA CN107341373B (zh) | 2017-06-30 | 2017-06-30 | 一种可执行程序的保护方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710521603.XA CN107341373B (zh) | 2017-06-30 | 2017-06-30 | 一种可执行程序的保护方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107341373A CN107341373A (zh) | 2017-11-10 |
CN107341373B true CN107341373B (zh) | 2018-12-18 |
Family
ID=60218155
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710521603.XA Active CN107341373B (zh) | 2017-06-30 | 2017-06-30 | 一种可执行程序的保护方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107341373B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101158911A (zh) * | 2007-11-22 | 2008-04-09 | 北京飞天诚信科技有限公司 | .Net程序保护方法及装置 |
CN101980160A (zh) * | 2010-10-28 | 2011-02-23 | 北京飞天诚信科技有限公司 | 一种.net程序加密后的执行方法 |
CN103413071A (zh) * | 2013-07-09 | 2013-11-27 | 北京深思数盾科技有限公司 | 一种保护软件中数据的方法 |
CN103955635A (zh) * | 2014-04-04 | 2014-07-30 | 北京深思数盾科技有限公司 | 一种对.net可执行程序进行保护的方法和系统 |
CN105208041A (zh) * | 2015-10-15 | 2015-12-30 | 厦门大学 | 基于hook的云存储应用加密数据包破解方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080313282A1 (en) * | 2002-09-10 | 2008-12-18 | Warila Bruce W | User interface, operating system and architecture |
CN102890758B (zh) * | 2012-10-11 | 2014-12-17 | 北京深思洛克软件技术股份有限公司 | 一种保护可执行文件的方法及系统 |
US8732674B1 (en) * | 2012-11-14 | 2014-05-20 | Microsoft Corporation | Revertable managed execution image instrumentation |
CN106547580B (zh) * | 2015-09-22 | 2020-08-28 | 腾讯科技(深圳)有限公司 | 挂钩函数的方法、装置、移动终端及存储介质 |
CN106709282B (zh) * | 2016-06-28 | 2018-10-02 | 腾讯科技(深圳)有限公司 | 资源文件解密方法及装置 |
CN106295370B (zh) * | 2016-08-19 | 2020-02-28 | 北京奇虎科技有限公司 | 一种加固安装包的动态链接库dll文件的方法和装置 |
-
2017
- 2017-06-30 CN CN201710521603.XA patent/CN107341373B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101158911A (zh) * | 2007-11-22 | 2008-04-09 | 北京飞天诚信科技有限公司 | .Net程序保护方法及装置 |
CN101980160A (zh) * | 2010-10-28 | 2011-02-23 | 北京飞天诚信科技有限公司 | 一种.net程序加密后的执行方法 |
CN103413071A (zh) * | 2013-07-09 | 2013-11-27 | 北京深思数盾科技有限公司 | 一种保护软件中数据的方法 |
CN103955635A (zh) * | 2014-04-04 | 2014-07-30 | 北京深思数盾科技有限公司 | 一种对.net可执行程序进行保护的方法和系统 |
CN105208041A (zh) * | 2015-10-15 | 2015-12-30 | 厦门大学 | 基于hook的云存储应用加密数据包破解方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107341373A (zh) | 2017-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101623096B1 (ko) | 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 | |
CN105095771B (zh) | 一种共享目标文件的保护方法及装置 | |
TWI530874B (zh) | 生成應用程式安裝封包、執行應用程式的方法及裝置 | |
US8090959B2 (en) | Method and apparatus for protecting .net programs | |
CN104463002B (zh) | 一种加固apk的方法和装置以及apk加固客户端和服务器 | |
US8589897B2 (en) | System and method for branch extraction obfuscation | |
KR102433011B1 (ko) | Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체 | |
US20120144208A1 (en) | Indexed table based code encrypting/decrypting device and method thereof | |
CN102043932A (zh) | 一种防止Java程序被反编译的方法 | |
CN105022936A (zh) | 一种类class文件加密解密方法和装置 | |
KR101861341B1 (ko) | 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법 | |
EP3552093B1 (en) | Application piracy prevention with secure enclave protection of automatically modularized functions | |
CN108595921A (zh) | 一种源代码中字符串的混淆方法和装置 | |
CN106228041B (zh) | 一种针对Android预编译的代码保护方法 | |
Lu et al. | DeepAutoD: Research on distributed machine learning oriented scalable mobile communication security unpacking system | |
CN103116715A (zh) | Windows平台可执行文件API延迟导入保护方法 | |
CN107430650A (zh) | 保护计算机程序以抵御逆向工程 | |
CN106855926A (zh) | 安卓系统下的恶意代码检测方法、系统及一种移动终端 | |
Wang et al. | Binary code retrofitting and hardening using SGX | |
Pasquier et al. | FlowR: aspect oriented programming for information flow control in ruby | |
CN110472425A (zh) | 基于Mono的Unity插件加密方法、存储介质 | |
Zhang et al. | Vm matters: A comparison of wasm vms and evms in the performance of blockchain smart contracts | |
KR20150069844A (ko) | Arm 프로세서 기반의 파일 난독화 방법 | |
CN107180168A (zh) | 文件加载、生成方法和装置,以及智能终端 | |
CN107341373B (zh) | 一种可执行程序的保护方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing Patentee after: Beijing Shendun Technology Co.,Ltd. Address before: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing Patentee before: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd. |