CN107430650B - 保护计算机程序以抵御逆向工程 - Google Patents
保护计算机程序以抵御逆向工程 Download PDFInfo
- Publication number
- CN107430650B CN107430650B CN201680013140.XA CN201680013140A CN107430650B CN 107430650 B CN107430650 B CN 107430650B CN 201680013140 A CN201680013140 A CN 201680013140A CN 107430650 B CN107430650 B CN 107430650B
- Authority
- CN
- China
- Prior art keywords
- library
- bootstrap
- boot
- module
- encrypted
- 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
- 238000004590 computer program Methods 0.000 title claims abstract description 72
- 238000000034 method Methods 0.000 claims abstract description 41
- 238000004422 calculation algorithm Methods 0.000 claims description 10
- 239000003999 initiator Substances 0.000 claims description 7
- 238000012360 testing method Methods 0.000 claims description 6
- 238000001514 detection method Methods 0.000 claims 1
- XWVFVITVPYKIMH-UHFFFAOYSA-N ethyl n-[4-[benzyl(2-phenylethyl)amino]-2-(2-fluorophenyl)-1h-imidazo[4,5-c]pyridin-6-yl]carbamate Chemical compound N=1C(NC(=O)OCC)=CC=2NC(C=3C(=CC=CC=3)F)=NC=2C=1N(CC=1C=CC=CC=1)CCC1=CC=CC=C1 XWVFVITVPYKIMH-UHFFFAOYSA-N 0.000 description 38
- 230000006870 function Effects 0.000 description 29
- 230000000007 visual effect Effects 0.000 description 5
- 238000013515 script Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004195 computer-aided diagnosis Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
Images
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/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/065—Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/14—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using a plurality of keys or algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45575—Starting, stopping, suspending or resuming virtual machine instances
-
- 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/106—Enforcing content protection by specific content processing
- G06F21/1066—Hiding content
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Technology Law (AREA)
- Multimedia (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- General Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (AREA)
- Storage Device Security (AREA)
Abstract
提供了一种保护计算机程序(10)以抵御逆向工程的方法,所述方法包括:混淆并且/或者加密计算机程序(10)的至少一个程序库(22),其中,所述至少一个程序库(22)包含适于通过虚拟机执行的字节码;将所述至少一个混淆的并且/或者加密的程序库(22)包含于引导程序库(16)中,引导程序库(16)包括引导程序模块(20),引导程序模块(20)适于将所述至少一个程序库(22)加载到虚拟机中并适于启动计算机程序(10);对引导程序库(16)加密;以及将加密的引导程序库(16)包含于本机代码启动程序可执行文件(12)中,本机代码启动程序可执行文件(12)包括启动程序模块(14),启动程序模块(14)适于启动虚拟机、对引导程序库(16)解密并适于将引导程序库(16)加载到虚拟机中。
Description
技术领域
本发明涉及保护计算机程序以抵御逆向工程的方法以及启动受保护的计算机程序的方法。此外,本发明涉及受保护的计算机程序以及计算机可读介质。
背景技术
本申请的申请人生产升降机和自动扶梯以及对应的控制装置。这些控制装置由若干应用程序访问,这些应用程序例如可被用于显示建筑物的升降机的当前位置或用于执行诊断任务。
为了从与机器不相关的代码的优点中获益,这些应用程序通常以诸如JAVA、C#或Visual Basic之类的编程语言编写,这些编程语言产生作为中间语言的字节码,这些字节码在运行时期间被翻译为本机代码。例如,被用于在升降机上执行诊断任务的CADI(计算机辅助诊断工具)应用程序通常以C#编写。源代码由.NET CLR(公共语言运行库)编译器编译为CIL(通用中间语言)。CIL字节码用于CLR运行库,CLR运行库在启动.NET进程时加载。JIT(即时)编译器处理CIL字节码并将其转换为由计算机的处理器处理的本机代码。
保护C#源代码以抵御逆向工程的通常方法是混淆。混淆将类、方法、属性和域重命名并且为了混淆并破坏反编译而可能引入错误的条件语句和其它误导性的架构。混淆可使程序的读、写和逆向工程变得困难并且耗时,但也不是不可能。
WO 2006 031127 A2涉及以安全的方式分发计算机程序和用户许可证的方法和装置。计算机程序的一部分可被独立地混淆或加密。
发明内容
本发明的目的是保护字节码以抵御逆向工程。
该目的通过独立权利要求的主题实现。从从属权利要求和以下说明中可明显看出其它示例性实施例。
本发明的一方面涉及一种用于保护计算机程序以抵御逆向工程的方法。计算机程序可基于字节码并且/或者可基于包含该计算机程序的函数和/或类的一个或多个程序库。
根据本发明的实施例,该方法包括:混淆并且/或者加密计算机程序的至少一个程序库,其中,所述至少一个程序库包含适于通过虚拟机执行的字节码;将至少一个混淆的并且/或者加密的库包含于引导程序库中,引导程序库包括引导程序模块,引导程序模块适于将所述至少一个程序库加载到虚拟机中并适于启动计算机程序;对引导程序库加密;将加密的引导程序库包含于本机代码启动程序可执行文件中,本机代码启动程序可执行文件包括启动程序模块,启动程序模块适于启动虚拟机、对引导程序库解密并适于将引导程序库加载到虚拟机的存储器中。
总之,计算机程序的一个或多个库可分两步混淆并且/或者加密,并且基于本机代码保存到启动程序可执行文件中。用于保护计算机程序的整个方法可利用批处理文件执行并且/或者生成使混淆、加密和/或打包步骤自动进行的文件。
存储计算机程序的文件通常包括两部分。一部分存储计算机程序的代码(诸如字节码或本机代码)。另一部分存储可由计算机程序处理的数据。这样的文件可被称为库或可执行文件。库可存储用于若干函数和/或类的代码。可执行文件可以是特殊的库,其附加地包括当可执行文件加载到存储器中和/或虚拟机中时被调用的函数。例如,在C++或C语言中,在启动可执行文件之后调用“主”函数。
例如,对于.NET语言(诸如C#、Visual Basic等),库包括CIL字节码并被称为程序集。.NET程序集可具有文件扩展名“.DLL”。对应的可执行文件可具有文件扩展名“.EXE”。在JAVA中,库被称为包。
在第一步骤中,待保护的计算机程序的一个或多个库(其包含字节码)被混淆并且/或者加密并且作为数据放置于被称为引导程序库的附加库中。引导程序库还包括基于字节码的模块,该模块包括用于将一个或多个库加载到虚拟机以及可选地用于对它们解密的函数和/或类。此外,受保护的计算机程序的主函数可由引导程序模块调用。引导程序模块可以是适于执行引导程序模块的任务的函数和/或类(基于字节码)的集合。
在第二步骤中,可对引导程序库混淆和/或加密并且可将其作为数据放置于启动程序可执行文件中,启动程序可执行文件包括基于本机代码的启动程序模块,启动程序模块适于对引导程序库解密、适于启动虚拟机并适于调用引导程序模块的引导函数,引导程序模块启动引导程序库的任务。启动程序模块可以是适于执行引导程序模块的任务的函数和/或类(基于字节码)的集合。
根据本发明的实施例,用于对至少一个程序库解密的第一密钥包含于引导程序库中,其中,引导程序模块适于用第一密钥对所述至少一个库解密。第一密钥(其可以是用于RC4算法或私有证书的字符串、初始向量(可选地与机密一起))作为数据存储于引导程序库中。引导程序模块可读取密钥并且可用其来对程序库解密。
根据本发明的实施例,用于对引导程序库解密的第二密钥包含于启动程序可执行文件中。第二密钥、其可与第一密钥不同、可作为数据存储于启动程序可执行文件中。启动程序模块可读取第二密钥(其可以是用于RC4算法或私有证书的字符串、初始向量(可选地与机密一起))并且可用其来对引导程序库解密。
根据本发明的实施例,引导程序库在其被加密之前就被混淆。在没有混淆引导程序库的情况下,存在以下可能性:混淆程序库并且加密引导程序库、加密程序库并加密引导程序库以及混淆且加密程序库以及加密引导程序库。在混淆引导程序库的情况下,存在以下可能性:混淆程序库并混淆且加密引导程序库、加密程序库并混淆且加密引导程序库以及混淆且加密程序库并混淆且加密引导程序库。
根据本发明的实施例,所述至少一个程序库和/或引导程序库通过RC4算法加密和解密。RC4是使用用于对数据流加密和解密的初始向量的流密码。
根据本发明的实施例,包含字节码的附加的程序库直接(未被修改)包含于引导程序库中。例如,第三方库不需要混淆和/或加密,因为这些库的源代码无论如何都是可用的并且因而可以节省用于对这些库解密的计算时间。
根据本发明的实施例,所述至少一个程序库、附加的程序库和/或引导程序库包含CIL字节码或JAVA字节码。受保护的计算机程序可以是.NET托管代码程序(并且可以C#或Visual Basic编写)或者可以是JAVA程序。引导程序库可以与程序库相同的语言编写。
本发明的另一方面涉及一种启动受保护的计算机程序的方法,该方法可由上文和下文中所述的用于保护计算机程序的方法组成。尽管受保护的计算机程序可通过批处理文件生成或者从程序库中创建文件,当启动启动程序可执行文件时,可执行用于启动受保护的计算机程序的方法。
根据本发明的实施例,该方法包括:启动本机代码启动程序可执行文件的启动程序模块,本机代码启动程序可执行文件包含加密的引导程序库,加密的引导程序库包含至少一个混淆的并且/或者加密的程序库;通过启动程序模块启动虚拟机;通过启动程序模块对引导程序库解密;将至少引导程序库的引导程序模块加载到虚拟机中并通过启动程序模块启动引导程序模块;将存储于引导程序库中的程序库加载到虚拟机中并通过引导程序模块启动程序库。
总之,启动程序可执行文件对引导程序库解压缩并解密,启动虚拟机并启动虚拟机中的引导程序模块。引导程序模块之后可对包含受保护的计算机程序的主函数的库解压缩并且/或者解密,可将该库加载到虚拟机中并且可启动主函数。
根据本发明的实施例,该方法进一步包括:通过引导程序模块对程序库解密。如前所述,除了混淆以外,程序库可通过第一密钥解密,而引导程序库可通过第二密钥解密。
根据本发明的实施例,该方法进一步包括:通过以下步骤解析引导程序模块对附加的加密程序库的调用:等待调用;在调用之后对附加的程序库解密;将附加的程序库加载到虚拟机中。.NET以及JAVA包括用于解析函数调用的可重写机制。每当虚拟机找不到被调用的函数时,它就可以将控制权传递给引导程序模块,引导程序模块可选地对包括被调用函数的程序库解密并将其加载到虚拟机中。在那之后,虚拟机可调用函数。这样,仅对计算机程序真正需要的库解密。此外,通过仅对所需程序库解密可节省计算时间。
根据本发明的实施例,该方法进一步包括通过启动程序模块检测调试程序是否处于活动状态;并且当检测到活动的调试程序时终止。如果启动程序模块检测到可被用于读取引导程序模块和/或所执行的程序库的调试程序,可终止程序的运行以阻止这种读取。
根据本发明的实施例,该方法进一步包括通过启动程序模块测试是否允许在系统上运行计算机程序,该系统执行启动程序可执行文件,并且当不允许在该系统上运行计算机程序时终止。例如,受保护的计算机程序可被限制为诸如特定的PC的特定的真实的机器。启动程序模块可测试其是否由该PC执行。如果其没有在正确的机器上运行,其将被终止。这可建立用于受保护的计算机程序的拷贝保护。
本发明的其它方面涉及一种受保护的计算机程序以及计算机可读介质,这种计算机程序存储于该计算机可读介质中。计算机可读介质可以是软盘、硬盘、USB(通用串行总线)存储设备、RAM(随机存取存储器)ROM(只读存储器)、EPROM(可擦除可编程只读存储器)或闪存。计算机可读介质也可以是允许下载程序代码的数据通信网路、例如、因特网。通常,计算机可读介质可以是非暂时性的或暂时性的介质。
根据本发明的实施例,计算机程序包括包含本机代码的启动程序可执行文件、包含于启动程序可执行文件中的加密的引导程序库以及包含于引导程序库中的至少一个混淆的并且/或者加密的程序库。当计算机程序启动时,该计算机程序适于执行如在上文和在下文中所述的启动受保护的计算机程序的方法。基于字节码的加密的引导程序库可作为数据存储于基于本机代码的启动程序可执行文件中。启动程序可执行文件的本机代码可对引导程序库解密并且可调用引导程序函数,引导程序函数启动以获取程序库中的字节码,该字节码作为数据存储于引导程序库中。
根据本发明的实施例,启动程序可执行文件包含于一个数据文件中,在所述一个数据文件中存储有包含所述至少一个程序库的引导程序库。启动程序可执行文件可以是一个“.EXE”文件,其包含用于执行受保护的计算机程序所需的所有代码和所有库。
从下文说明的实施例中,本发明的这些以及其它方面将变得明显,并将参照这些实施例对这些方面进行阐述。
附图说明
以下,参照附图更加详细地对本发明的实施例进行说明。
图1示意性地示出了根据本发明的实施例的受保护的计算机程序。
图2示出了根据本发明的实施例的用于保护计算机程序的流程图。
图3示出了根据本发明的实施例的用于启动受保护的计算机程序的流程图。
在附图标记列表中以总结的形式列出了附图中使用的附图标记以及它们的含义。原则上,附图中相同的部件设置有相同的附图标记。
具体实施方式
图1示出了受保护的计算机程序10,其包括基于本机代码的启动程序可执行文件12。启动程序可执行文件12(其可直接启动而不需要虚拟机)包括启动程序模块14,启动程序模块14包含可执行的本机代码和加密的引导程序库16。加密的引导程序库16可作为数据被包含于启动程序可执行文件12中。此外,启动程序可执行文件12可包括用于对引导程序库16解密的密钥18。
当启动程序可执行文件12启动时,启动程序模块14中的本机代码中的主函数启动,该主函数对引导程序库16解密、启动虚拟机并将解密的引导程序库16加载到虚拟机中。
引导程序库16包括呈字节码形式的引导程序模块20和一个或多个加密的程序库22,引导程序模块20可由虚拟机执行,加密的程序库22作为数据被包含于引导程序库16中。此外,引导程序库16可包含用于对程序库22解密的密钥24。引导程序库16还可包含用于对程序库22解密的密钥24。此外,引导程序库16还可包含未被解密的一个或多个附加(further)库26。附加库26可作为数据被包含于引导程序库16中。
引导程序模块20包含可由虚拟机执行的字节码,并且/或者该字节码可包含用于对程序库22解密和/或将程序库22、26加载到虚拟机中的功能。同样,程序库22、24基于字节码。此外,引导程序模块20可适于在调用内部函数时拦截虚拟机的库解析以仅对加密的程序库22解密。
例如,启动程序可执行文件12可以是用C++编写的Win32应用程序,加密的引导程序库16作为C++头文件而被包含于其中。引导程序库16可以是.NET程序集,在该.NET程序集中,加密的程序库22、附加的程序库26以及密钥24可以是嵌入式源。同样,程序库22、26可以是.NET程序集。在这种情况下,虚拟机可以是.NET运行库(runtime),可在其中加载并执行引导程序库16和程序库。
程序库22受到保护以抵御逆向工程,因为这些程序库22和它们的密钥24从不会在非永久性存储器外未加密地呈现。
由于计算机程序10的所有库22可能被混淆,记录器(诸如NLog、用于.NET的免费登录平台)的记录器名称可能对所有混淆后的类而言不可读。这可能不会影响公共类。为了解决这点,可以为这样的类的记录器实例创建明确的名称。
图2示出了用于生成受保护的计算机程序10的方法。对在程序库22、26中的计算机程序的保护包括多级的混淆和加密。所有这些多级的混淆和加密使创建计算机程序的非法拷贝或对其代码进行逆向工程变得更加困难。
启动程序可执行文件12的部署可由批处理脚本自动完成(例如、*.bat或*.cmd文件)。这种批处理脚本可执行用于构建、混淆、加密和打包所有相关文件所需的所有操作。以下方法步骤全部可由这种批处理脚本来执行。
在步骤S10中,程序库22由源代码构建。例如,在Visual Studio中,可以开始构建相应的C#项目并且常量“OB-FUSCATE”可以作为参数(argument)传递。这可允许移除由单元测试使用的“内部可见(Internals Visible To)”属性以获取内部类。
在步骤S12中,生成的程序库22被混淆和/或加密。例如,混淆的配置可启用“字符串加密”。它还可以将混淆代码合并到共享程序集中以提高性能并减少开销。混淆后的程序库22可用私有证书和/或用RC4算法加密。RC4算法可从批处理脚本中获得随机初始向量,所以每次部署计算机程序时,使用不同的初始向量。在使用证书的情况下,密钥24可以是私有证书以及对应的机密(secret)。在使用RC4的情况下,密钥24可以是随机初始向量。
在步骤S14中,生成了引导程序库16。引导程序库16可基于适于对程序库22解密、将程序库22、26加载到虚拟机中并通过调用程序库22中的一个程序库中的启动函数或主函数启动计算机程序的代码。加密引导程序库16的被编译为字节码的代码作为引导程序模块20包含在引导程序库16中。混淆的并且/或者加密的库22和密钥24也包含于加密的引导程序库16中。
例如,加密的引导程序库16可基于包括引导程序模块20的源代码的附加的C#项目。加密的程序库(C#程序集)22通过使用、例如、Visual Studio而被放置于引导程序库的资源文件夹中。此外,被存储为文件的程序库26和密钥24可放置于该资源文件夹内。例如,来自前面步骤的生成的初始向量将作为生成的C#文件被添加至该项目。
引导程序库16的项目文件可含有包含资源文件夹中所有文件的通配符。所以所有加密的程序库22、程序库26以及密钥24均可作为嵌入式源被嵌入引导程序库16中。
在步骤S16中,引导程序库16被随意地混淆并且在此之后被加密。由于引导程序模块20包含字节码并且包含解密算法,而引导程序库包含密钥24,因此库16在完成构建之后被随意地混淆并加密。
可使用证书或RC4算法对引导程序库16加密。用于RC4加密的初始向量可随机地生成并且对每个构建而言可以不同。在使用证书的情况下,密钥18可以是私有证书和对应的机密。在使用RC4的情况下,密钥18可以是随机初始向量。引导程序库16的密钥18可以与密钥24不同。
对于程序库22的加密和引导程序库16的加密二者而言,可使用RC4算法——最广泛使用的软件流密码。RC4的初始向量(即、密钥18、24)可在每次构建程序库22和引导程序库16时生成并且因此对于计算机程序的每个版本而言将会不同。
在步骤S18中,启动程序可执行文件12被构建。启动程序可执行文件12包括启动程序模块14,启动程序模块14基于本机代码并适于启动虚拟机、对引导程序库16解密并将引导程序库16加载到虚拟机中。加密的引导程序库16和密钥18包含于启动程序可执行文件12中。
例如,启动程序可执行文件12可基于加载.NET引擎并启动引导程序的Win32/C++项目。加密的引导程序库16可被存储在C++头文件中,该C++头文件包含带有引导程序库16的加密内容的字节数组。该文件可被放置于启动程序项目中并且/或者可与启动程序可执行文件12的其它源一起被编译成本机代码。同样,密钥18、例如RC4的生成的初始向量、可包含于该构建中。最终的启动程序可执行文件12可包含加密且混淆版本的引导程序库16。
结果可以是经由Windows启动的打包的、两次加密并且两次混淆的计算机程序。当启动程序可执行文件12被启动时,.NET引擎可执行引导程序库16,引导程序库16可解析、解密并执行原始程序库22。计算机程序10的程序库22的从不会在文件系统上未加密地可用。计算机程序10的所有程序库22、26可捆绑在一起(例如、仅一个*.exe文件待交付)。
图3示出了用于启动受保护的计算机程序10的方法。
在步骤S20中,启动程序模块14被启动。例如,启动程序可执行文件12可以是Windows可执行的本机代码,并且在其启动之后,启动程序模块14中的主函数被调用。由于计算机程序10经由启动程序可执行文件执行,该启动程序可执行文件是本机代码库,诸如.NET程序的进入程序集的字节码库没有入口点。
在步骤S22中,启动程序模块14测试是否允许计算机程序在执行启动程序可执行文件的系统上运行。例如,该系统可以是PC并且/或者引导程序模块20可使用X509证书来确认其是否被允许在当前计算机上运行。这些证书可包含唯一的硬件标识和请求该证书的用户。如果某人能够创建计算机程序10的合法拷贝,该证书(其同样可包含于启动程序可执行文件12中)可能可获得有关谁提供了原始软件的信息。
如果不允许在该系统上运行计算机程序10,启动程序可执行文件12终止。
在步骤S24中,启动程序模块14检测调试程序(debugger)是否处于活动状态。这可由完整性检查程序执行,完整性检查程序可以是在启动程序可执行文件12中运行的检查应用程序完整性的任务。该任务可检测到调试程序或激活的操作(manipulation of theactivation)。然而,对于受保护的计算机程序10而言,调试几乎不可能。这些类可被混淆并且除在存储器中以外不可用。堆栈跟踪信息可给出一些关于异常的信息但仍然很难理解。
如果检测到处于活动状态的调试程序,那么启动程序可执行文件和/或启动的虚拟机终止。
在步骤S26中,引导程序库由启动程序模块14进行解密。例如,引导程序库16通过以启动程序模块14中的本机代码实现的RC4算法解密。
在步骤S28中,虚拟机由启动程序模块14启动。例如,启动程序模块14可启动.NET运行库。在那之后,引导程序库16加载到虚拟机中并且启动程序模块14调用入口点(例如主函数)。因而,引导程序模块20启动并在虚拟机中执行。
在步骤S30中,引导程序模块20对包含进入受保护的计算机程序10的入口点(例如主函数)的程序库22解密。例如,在.NET中这可以是托管的“.EXE”文件。解密的程序库22加载到虚拟机中并且启动程序模块14调用入口点。因而,计算机程序10的保护代码被启动。
当没有调用计算机程序10的程序库22的函数时,没有必要对程序库22解密。库的解密可通过函数调用解析来控制。
在步骤S32中,通过引导程序模块20来解析对进一步加密的程序库22的调用。例如,引导程序模块20注册了虚拟机的回调,其在无法解析函数名时被调用。在存在这个回调的情况下,引导程序模块20等待对未解析函数的调用。当调用这个回调时,引导程序模块20对包含待调用的函数的程序库22解密并将其加载到虚拟机中。
例如,.NET框架允许拦截程序集解析并以自定义的方式加载它们。这可用于从加密源(例如二进制文件或嵌入式源)加载程序集。当使用该技术时,程序集的CIL仅在存储器中是非加密可用的。从不存在可用于反编译的非加密文件。
尽管已经在附图中详细地图示并在前文的说明中详细地说明了本发明,这种图示和说明应当被认为是说明性的或示例性的而不是限制性的,本发明不限于所公开的实施例。通过对附图、公开内容和随附权利要求书的研究,本领域的技术人员能够理解并实现所公开的实施例的其它变型并实践要求保护的发明。在权利要求书中,词语“包括”不排除其它元件或步骤,并且不定冠词“一”或“一个”不排除多个。单个处理器或控制器或其它单元可实现权利要求中记载的若干物件的功能。某些特征被记载在彼此不同的从属权利要求中的事实并不意味着这些特征的组合不能加以利用。权利要求书中的任何附图标记都不应当被解释为限制范围。
Claims (14)
1.一种用于保护计算机程序(10)以抵御逆向工程的方法,所述方法包括:
混淆并且/或者加密所述计算机程序(10)的至少一个程序库,其中,所述至少一个程序库包含适于通过虚拟机执行的字节码;
将所述至少一个混淆的并且/或者加密的程序库包含于引导程序库(16)中,所述引导程序库(16)包括引导程序模块(20),所述引导程序模块(20)适于将所述至少一个程序库加载到所述虚拟机中并适于启动所述计算机程序(10);
对所述引导程序库(16)加密;
将所述加密的引导程序库(16)包含于本机代码启动程序可执行文件(12)中,所述本机代码启动程序可执行文件(12)包括启动程序模块(14),所述启动程序模块(14)适于启动所述虚拟机、对所述引导程序库(16)解密并适于将所述引导程序库(16)加载到所述虚拟机中。
2.根据权利要求1所述的方法,
其中,将第一密钥(24)包含于所述引导程序库(16)中,所述第一密钥(24)用于对所述至少一个程序库解密;
其中,所述引导程序模块(20)适于用所述第一密钥(24)对所述至少一个程序库解密。
3.根据权利要求1或2所述的方法,
其中,将第二密钥(18)包含于所述启动程序可执行文件(12)中,所述第二密钥(18)用于对所述引导程序库(16)解密;
其中,所述启动程序可执行文件(12)适于用所述第二密钥(18)对所述引导程序库(16)解密。
4.根据权利要求1或2所述的方法,
其中,所述引导程序库(16)在其被加密之前被混淆。
5.根据权利要求1或2所述的方法,
其中,所述至少一个程序库和/或所述引导程序库(16)通过RC4算法加密和解密。
6.根据权利要求1或2所述的方法,
其中,将附加的程序库直接包含于所述引导程序库(16)中,所述附加的程序库包含字节码。
7.根据权利要求1或2所述的方法,
其中,所述至少一个程序库包含CIL字节码或JAVA字节码;并且/或者
其中,所述引导程序库(16)包含CIL字节码或JAVA字节码。
8.一种启动受保护的计算机程序(10)的方法,所述方法包括:
启动本机代码启动程序可执行文件(12)的启动程序模块(14),所述本机代码启动程序可执行文件(12)包含加密的引导程序库(16),所述加密的引导程序库(16)包含至少一个混淆的并且/或者加密的程序库,所述至少一个混淆的并且/或者加密的程序库包含适于通过虚拟机执行的字节码;
通过所述启动程序模块(14)启动虚拟机;
通过所述启动程序模块(14)对所述引导程序库(16)解密;
将至少所述引导程序库(16)的引导程序模块(20)加载到所述虚拟机中并通过所述启动程序模块(14)启动所述引导程序模块(20);
将包含于所述引导程序库(16)中的程序库加载到所述虚拟机中并通过所述引导程序模块(20)启动所述程序库。
9.根据权利要求8所述的方法,进一步包括:
通过所述引导程序模块(20)对所述程序库解密。
10.根据权利要求8或9所述的方法,进一步包括:
通过以下步骤解析所述引导程序模块(20)对附加的加密的程序库的调用:
等待所述调用;
在所述调用之后对所述附加的加密的程序库解密;
将解密的附加的加密的程序库加载到所述虚拟机中。
11.根据权利要求8或9所述的方法,进一步包括:
通过所述启动程序模块(14)检测调试程序是否处于活动状态;
当检测到处于活动状态的调试程序时终止所述检测。
12.根据权利要求8或9所述的方法,进一步包括:
利用所述启动程序模块(14)测试是否允许所述计算机程序(10)在执行所述启动程序可执行文件的系统上运行;
当不允许所述计算机程序(10)在所述系统上运行时终止所述测试。
13.一种计算机可读介质,所述计算机可读介质中存储有计算机程序(10),所述计算机程序包括:
启动程序可执行文件(12),所述启动程序可执行文件包含本机代码;
加密的引导程序库(16),所述加密的引导程序库(16)包含于所述启动程序可执行文件(12)中;
至少一个混淆的并且/或者加密的程序库,所述至少一个混淆的并且/或者加密的程序库包含于所述引导程序库(16)中;
其中,所述计算机程序(10)适于执行权利要求8至12中的一项所述的方法。
14.根据权利要求13所述的计算机可读介质,
其中,所述启动程序可执行文件(12)包含于一个数据文件中,在所述一个数据文件中存储有包含所述至少一个混淆的并且/或者加密的程序库的所述引导程序库(16)。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP15157242.7 | 2015-03-02 | ||
EP15157242 | 2015-03-02 | ||
PCT/EP2016/053676 WO2016139078A1 (en) | 2015-03-02 | 2016-02-22 | Protecting a computer program against reverse engineering |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107430650A CN107430650A (zh) | 2017-12-01 |
CN107430650B true CN107430650B (zh) | 2020-10-09 |
Family
ID=52669453
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680013140.XA Active CN107430650B (zh) | 2015-03-02 | 2016-02-22 | 保护计算机程序以抵御逆向工程 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10482221B2 (zh) |
EP (1) | EP3265945A1 (zh) |
CN (1) | CN107430650B (zh) |
WO (1) | WO2016139078A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016139078A1 (en) | 2015-03-02 | 2016-09-09 | Inventio Ag | Protecting a computer program against reverse engineering |
CN111656345B (zh) * | 2018-01-31 | 2024-01-02 | 亚萨合莱有限公司 | 启用容器文件中加密的软件模块 |
CN110032838B (zh) * | 2019-03-21 | 2023-05-12 | 深圳市腾讯信息技术有限公司 | 一种脚本文件加固方法、装置及设备 |
CN110866226B (zh) * | 2019-11-15 | 2022-05-24 | 中博信息技术研究院有限公司 | 一种基于加密技术的java应用软件版权保护方法 |
CN111552931A (zh) * | 2020-04-30 | 2020-08-18 | 平安科技(深圳)有限公司 | java代码的加壳方法与系统 |
CN111782282B (zh) * | 2020-06-24 | 2023-12-08 | 智车优行科技(北京)有限公司 | 启动程序加载方法和装置、电子设备和存储介质 |
US11550883B2 (en) | 2020-09-08 | 2023-01-10 | Assured Information Security, Inc. | Code protection |
CN112363693A (zh) * | 2020-11-09 | 2021-02-12 | 北京字跳网络技术有限公司 | 代码文本的处理方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013377A (zh) * | 2007-01-12 | 2007-08-08 | 中山大学 | 一种Java Processor启动时类装载方法 |
CN102360412A (zh) * | 2011-09-26 | 2012-02-22 | 飞天诚信科技股份有限公司 | Java源代码的保护方法和系统 |
CN103294518A (zh) * | 2012-12-31 | 2013-09-11 | 北京北大众志微系统科技有限责任公司 | 一种解释器中间接跳转预测方法及系统 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7165260B2 (en) * | 2002-06-12 | 2007-01-16 | Fsl, L.L.C. | Layered computing systems and methods for insecure environments |
US7841009B1 (en) * | 2004-07-09 | 2010-11-23 | Angel Secure Networks | System and method for defending against reverse engineering of software, firmware and hardware |
NO20043858L (no) | 2004-09-15 | 2006-03-16 | Beep Science As | Fremgangsmater og anordninger for sikker distribuering av digitale produkter |
US8151277B2 (en) * | 2007-05-15 | 2012-04-03 | Dynatrace Software Gmbh | Method and system for dynamic remote injection of in-process agents into virtual machine based applications |
CN102598017B (zh) * | 2009-11-13 | 2016-03-09 | 爱迪德技术有限公司 | 提高Java字节码的防窜改能力的系统和方法 |
US20120216052A1 (en) * | 2011-01-11 | 2012-08-23 | Safenet, Inc. | Efficient volume encryption |
JP5988473B2 (ja) * | 2011-09-20 | 2016-09-07 | 株式会社Dnpハイパーテック | モジュールの暗号化/復号化プログラム |
US8924723B2 (en) * | 2011-11-04 | 2014-12-30 | International Business Machines Corporation | Managing security for computer services |
US8892876B1 (en) | 2012-04-20 | 2014-11-18 | Trend Micro Incorporated | Secured application package files for mobile computing devices |
US9202053B1 (en) * | 2013-02-27 | 2015-12-01 | Trend Micro Inc. | MBR infection detection using emulation |
WO2016139078A1 (en) | 2015-03-02 | 2016-09-09 | Inventio Ag | Protecting a computer program against reverse engineering |
-
2016
- 2016-02-22 WO PCT/EP2016/053676 patent/WO2016139078A1/en active Application Filing
- 2016-02-22 US US15/554,830 patent/US10482221B2/en active Active
- 2016-02-22 CN CN201680013140.XA patent/CN107430650B/zh active Active
- 2016-02-22 EP EP16706832.9A patent/EP3265945A1/en not_active Ceased
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013377A (zh) * | 2007-01-12 | 2007-08-08 | 中山大学 | 一种Java Processor启动时类装载方法 |
CN102360412A (zh) * | 2011-09-26 | 2012-02-22 | 飞天诚信科技股份有限公司 | Java源代码的保护方法和系统 |
CN103294518A (zh) * | 2012-12-31 | 2013-09-11 | 北京北大众志微系统科技有限责任公司 | 一种解释器中间接跳转预测方法及系统 |
Non-Patent Citations (1)
Title |
---|
一种面向解释器的间接转移预测技术;黄明凯;《计算机研究与发展》;20150131(第1期);第66-82页 * |
Also Published As
Publication number | Publication date |
---|---|
US20180181729A1 (en) | 2018-06-28 |
EP3265945A1 (en) | 2018-01-10 |
US10482221B2 (en) | 2019-11-19 |
WO2016139078A1 (en) | 2016-09-09 |
CN107430650A (zh) | 2017-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107430650B (zh) | 保护计算机程序以抵御逆向工程 | |
CN106778103B (zh) | 一种安卓应用程序防逆向破解的加固方法、系统及解密方法 | |
KR101471589B1 (ko) | 공통중간언어 기반 프로그램을 위한 보안 제공 방법 | |
EP2897072B1 (en) | Device for obfuscating code and method for same | |
US9141787B2 (en) | Interlocked binary protection using whitebox cryptography | |
KR101503785B1 (ko) | 동적 라이브러리를 보호하는 방법 및 장치 | |
US20170024230A1 (en) | Method, apparatus, and computer-readable medium for ofuscating execution of an application on a virtual machine | |
JP2019505887A (ja) | 信頼できる実行環境を有するモバイル装置 | |
US20110271350A1 (en) | method for protecting software | |
US20150095653A1 (en) | Method and apparatus of creating application package, method and apparatus of executing application package, and recording medium storing application package | |
Bauman et al. | Sgxelide: enabling enclave code secrecy via self-modification | |
You et al. | Reference hijacking: Patching, protecting and analyzing on unmodified and non-rooted android devices | |
Shioji et al. | Code shredding: byte-granular randomization of program layout for detecting code-reuse attacks | |
CN108595950A (zh) | 一种结合远程认证的sgx安全增强方法 | |
Kerns et al. | Double-extortion ransomware: A technical analysis of maze ransomware | |
Tychalas et al. | SGXCrypter: IP protection for portable executables using Intel's SGX technology | |
Ladisa et al. | The Hitchhiker's Guide to Malicious Third-Party Dependencies | |
Xu et al. | N-version obfuscation | |
El-Harake et al. | Blocking advertisements on android devices using monitoring techniques | |
CN107209815B (zh) | 用于使用返回导向编程的代码混淆的方法 | |
Lanet et al. | Memory forensics of a java card dump | |
Ormandy | Sophail: Applied attacks against sophos antivirus | |
Cho et al. | Mobile application tamper detection scheme using dynamic code injection against repackaging attacks | |
Sonnleitner et al. | Indirect Data Representation Via Offset Vectoring: A Code-integrity-driven In-memory Data Regeneration Scheme. | |
CN113360181A (zh) | 用于工业互联网的代码调用方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |