买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】保护计算机程序以抵御逆向工程_因温特奥股份公司_201680013140.X 

申请/专利权人:因温特奥股份公司

申请日:2016-02-22

公开(公告)日:2020-10-09

公开(公告)号:CN107430650B

主分类号:G06F21/12(20130101)

分类号:G06F21/12(20130101);G06F21/14(20130101)

优先权:["20150302 EP 15157242.7"]

专利状态码:有效-授权

法律状态:2020.10.09#授权;2017.12.26#实质审查的生效;2017.12.01#公开

摘要:提供了一种保护计算机程序10以抵御逆向工程的方法,所述方法包括:混淆并且或者加密计算机程序10的至少一个程序库22,其中,所述至少一个程序库22包含适于通过虚拟机执行的字节码;将所述至少一个混淆的并且或者加密的程序库22包含于引导程序库16中,引导程序库16包括引导程序模块20,引导程序模块20适于将所述至少一个程序库22加载到虚拟机中并适于启动计算机程序10;对引导程序库16加密;以及将加密的引导程序库16包含于本机代码启动程序可执行文件12中,本机代码启动程序可执行文件12包括启动程序模块14,启动程序模块14适于启动虚拟机、对引导程序库16解密并适于将引导程序库16加载到虚拟机中。

主权项:1.一种用于保护计算机程序10以抵御逆向工程的方法,所述方法包括:混淆并且或者加密所述计算机程序10的至少一个程序库,其中,所述至少一个程序库包含适于通过虚拟机执行的字节码;将所述至少一个混淆的并且或者加密的程序库包含于引导程序库16中,所述引导程序库16包括引导程序模块20,所述引导程序模块20适于将所述至少一个程序库加载到所述虚拟机中并适于启动所述计算机程序10;对所述引导程序库16加密;将所述加密的引导程序库16包含于本机代码启动程序可执行文件12中,所述本机代码启动程序可执行文件12包括启动程序模块14,所述启动程序模块14适于启动所述虚拟机、对所述引导程序库16解密并适于将所述引导程序库16加载到所述虚拟机中。

全文数据:保护计算机程序以抵御逆向工程技术领域[0001]本发明涉及保护计算机程序以抵御逆向工程的方法以及启动受保护的计算机程序的方法。此外,本发明涉及受保护的计算机程序以及计算机可读介质。背景技术[0002]本申请的申请人生产升降机和自动扶梯以及对应的控制装置。这些控制装置由若干应用程序访问,这些应用程序例如可被用于显示建筑物的升降机的当前位置或用于执行诊断任务。[0003]为了从与机器不相关的代码的优点中获益,这些应用程序通常以诸如JAVA、C#或VisualBasic之类的编程语言编写,这些编程语言产生作为中间语言的字节码,这些字节码在运行时期间被翻译为本机代码。例如,被用于在升降机上执行诊断任务的CADI计算机辅助诊断工具)©应用程序通常以C#编写。源代码由.NETCLR公共语言运行库)编译器编译为CIL通用中间语言)XIL字节码用于CLR运行库,CLR运行库在启动.NET进程时加载。JIT即时编译器处理CIL字节码并将其转换为由计算机的处理器处理的本机代码。[0004]字节码不受到保护以抵御逆向工程。类似于ILSpyO的工具、其使.NET应用程序的逆向工程非常容易、可免费使用并且是可以做到这些的开源软件。然而,从逆向工程的应用程序中,控制装置的访问代码可被检索到并被误用。[0005]保护C#源代码以抵御逆向工程的通常方法是混淆。混淆将类、方法、属性和域重命名并且为了混淆并破坏反编译而可能引入错误的条件语句和其它误导性的架构。混淆可使程序的读、写和逆向工程变得困难并且耗时,但也不是不可能。[0006]WO2006031127A2涉及以安全的方式分发计算机程序和用户许可证的方法和装置。计算机程序的一部分可被独立地混淆或加密。发明内容[0007]本发明的目的是保护字节码以抵御逆向工程。[0008]该目的通过独立权利要求的主题实现。从从属权利要求和以下说明中可明显看出其它示例性实施例。[0009]本发明的一方面涉及一种用于保护计算机程序以抵御逆向工程的方法。计算机程序可基于字节码并且或者可基于包含该计算机程序的函数和或类的一个或多个程序库。[0010]根据本发明的实施例,该方法包括:混淆并且或者加密计算机程序的至少一个程序库,其中,所述至少一个程序库包含适于通过虚拟机执行的字节码;将至少一个混淆的并且或者加密的库包含于引导程序库中,引导程序库包括引导程序模块,引导程序模块适于将所述至少一个程序库加载到虚拟机中并适于启动计算机程序;对引导程序库加密;将加密的引导程序库包含于本机代码启动程序可执行文件中,本机代码启动程序可执行文件包括启动程序模块,启动程序模块适于启动虚拟机、对引导程序库解密并适于将引导程序库加载到虚拟机的存储器中。[0011]总之,计算机程序的一个或多个库可分两步混淆并且或者加密,并且基于本机代码保存到启动程序可执行文件中。用于保护计算机程序的整个方法可利用批处理文件执行并且或者生成使混淆、加密和或打包步骤自动进行的文件。[0012]存储计算机程序的文件通常包括两部分。一部分存储计算机程序的代码诸如字节码或本机代码)。另一部分存储可由计算机程序处理的数据。这样的文件可被称为库或可执行文件。库可存储用于若干函数和或类的代码。可执行文件可以是特殊的库,其附加地包括当可执行文件加载到存储器中和或虚拟机中时被调用的函数。例如,在C++或C语言中,在启动可执行文件之后调用“主”函数。[0013]例如,对于.NET语言诸如C#、VisualBasic等),库包括CIL字节码并被称为程序集。.NET程序集可具有文件扩展名“.DLL”。对应的可执行文件可具有文件扩展名“.ΕΧΕ”。在JAVA中,库被称为包。[0014]在第一步骤中,待保护的计算机程序的一个或多个库(其包含字节码被混淆并且或者加密并且作为数据放置于被称为引导程序库的附加库中。引导程序库还包括基于字节码的模块,该模块包括用于将一个或多个库加载到虚拟机以及可选地用于对它们解密的函数和或类。此外,受保护的计算机程序的主函数可由引导程序模块调用。引导程序模块可以是适于执行引导程序模块的任务的函数和或类基于字节码的集合。[0015]在第二步骤中,可对引导程序库混淆和或加密并且可将其作为数据放置于启动程序可执行文件中,启动程序可执行文件包括基于本机代码的启动程序模块,启动程序模块适于对引导程序库解密、适于启动虚拟机并适于调用引导程序模块的引导函数,引导程序模块启动引导程序库的任务。启动程序模块可以是适于执行引导程序模块的任务的函数和或类基于字节码的集合。[0016]根据本发明的实施例,用于对至少一个程序库解密的第一密钥包含于引导程序库中,其中,引导程序模块适于用第一密钥对所述至少一个库解密。第一密钥其可以是用于RC4算法或私有证书的字符串、初始向量可选地与机密一起)作为数据存储于引导程序库中。引导程序模块可读取密钥并且可用其来对程序库解密。[0017]根据本发明的实施例,用于对引导程序库解密的第二密钥包含于启动程序可执行文件中。第二密钥、其可与第一密钥不同、可作为数据存储于启动程序可执行文件中。启动程序模块可读取第二密钥(其可以是用于RC4算法或私有证书的字符串、初始向量可选地与机密一起)并且可用其来对引导程序库解密。[0018]根据本发明的实施例,引导程序库在其被加密之前就被混淆。在没有混淆引导程序库的情况下,存在以下可能性:混淆程序库并且加密引导程序库、加密程序库并加密引导程序库以及混淆且加密程序库以及加密引导程序库。在混淆引导程序库的情况下,存在以下可能性:混淆程序库并混淆且加密引导程序库、加密程序库并混淆且加密引导程序库以及混淆且加密程序库并混淆且加密引导程序库。[0019]根据本发明的实施例,所述至少一个程序库和或引导程序库通过RC4算法加密和解密。RC4是使用用于对数据流加密和解密的初始向量的流密码。[0020]根据本发明的实施例,包含字节码的附加的程序库直接未被修改包含于引导程序库中。例如,第三方库不需要混淆和或加密,因为这些库的源代码无论如何都是可用的并且因而可以节省用于对这些库解密的计算时间。[0021]根据本发明的实施例,所述至少一个程序库、附加的程序库和或引导程序库包含CIL字节码或JAVA字节码。受保护的计算机程序可以是.NET托管代码程序(并且可以C#或VisualBasic编写或者可以是JAVA程序。引导程序库可以与程序库相同的语言编写。[0022]本发明的另一方面涉及一种启动受保护的计算机程序的方法,该方法可由上文和下文中所述的用于保护计算机程序的方法组成。尽管受保护的计算机程序可通过批处理文件生成或者从程序库中创建文件,当启动启动程序可执行文件时,可执行用于启动受保护的计算机程序的方法。[0023]根据本发明的实施例,该方法包括:启动本机代码启动程序可执行文件的启动程序模块,本机代码启动程序可执行文件包含加密的引导程序库,加密的引导程序库包含至少一个混淆的并且或者加密的程序库;通过启动程序模块启动虚拟机;通过启动程序模块对引导程序库解密;将至少引导程序库的引导程序模块加载到虚拟机中并通过启动程序模块启动引导程序模块;将存储于引导程序库中的程序库加载到虚拟机中并通过引导程序模块启动程序库。[0024]总之,启动程序可执行文件对引导程序库解压缩并解密,启动虚拟机并启动虚拟机中的引导程序模块。引导程序模块之后可对包含受保护的计算机程序的主函数的库解压缩并且或者解密,可将该库加载到虚拟机中并且可启动主函数。[0025]根据本发明的实施例,该方法进一步包括:通过引导程序模块对程序库解密。如前所述,除了混淆以外,程序库可通过第一密钥解密,而引导程序库可通过第二密钥解密。[0026]根据本发明的实施例,该方法进一步包括:通过以下步骤解析引导程序模块对附加的加密程序库的调用:等待调用;在调用之后对附加的程序库解密;将附加的程序库加载到虚拟机中。.NET以及JAVA包括用于解析函数调用的可重写机制。每当虚拟机找不到被调用的函数时,它就可以将控制权传递给引导程序模块,引导程序模块可选地对包括被调用函数的程序库解密并将其加载到虚拟机中。在那之后,虚拟机可调用函数。这样,仅对计算机程序真正需要的库解密。此外,通过仅对所需程序库解密可节省计算时间。[0027]根据本发明的实施例,该方法进一步包括通过启动程序模块检测调试程序是否处于活动状态;并且当检测到活动的调试程序时终止。如果启动程序模块检测到可被用于读取引导程序模块和或所执行的程序库的调试程序,可终止程序的运行以阻止这种读取。[0028]根据本发明的实施例,该方法进一步包括通过启动程序模块测试是否允许在系统上运行计算机程序,该系统执行启动程序可执行文件,并且当不允许在该系统上运行计算机程序时终止。例如,受保护的计算机程序可被限制为诸如特定的PC的特定的真实的机器。启动程序模块可测试其是否由该PC执行。如果其没有在正确的机器上运行,其将被终止。这可建立用于受保护的计算机程序的拷贝保护。[0029]本发明的其它方面涉及一种受保护的计算机程序以及计算机可读介质,这种计算机程序存储于该计算机可读介质中。计算机可读介质可以是软盘、硬盘、USB通用串行总线存储设备、RAM随机存取存储器ROM只读存储器)、EPR0M可擦除可编程只读存储器)或闪存。计算机可读介质也可以是允许下载程序代码的数据通信网路、例如、因特网。通常,计算机可读介质可以是非暂时性的或暂时性的介质。[0030]根据本发明的实施例,计算机程序包括包含本机代码的启动程序可执行文件、包含于启动程序可执行文件中的加密的引导程序库以及包含于引导程序库中的至少一个混淆的并且或者加密的程序库。当计算机程序启动时,该计算机程序适于执行如在上文和在下文中所述的启动受保护的计算机程序的方法。基于字节码的加密的引导程序库可作为数据存储于基于本机代码的启动程序可执行文件中。启动程序可执行文件的本机代码可对引导程序库解密并且可调用引导程序函数,引导程序函数启动以获取程序库中的字节码,该字节码作为数据存储于引导程序库中。[0031]根据本发明的实施例,启动程序可执行文件包含于一个数据文件中,在所述一个数据文件中存储有包含所述至少一个程序库的引导程序库。启动程序可执行文件可以是一个“.ΕΧΕ”文件,其包含用于执行受保护的计算机程序所需的所有代码和所有库。[0032]从下文说明的实施例中,本发明的这些以及其它方面将变得明显,并将参照这些实施例对这些方面进行阐述。附图说明[0033]以下,参照附图更加详细地对本发明的实施例进行说明。[0034]图1示意性地示出了根据本发明的实施例的受保护的计算机程序。[0035]图2示出了根据本发明的实施例的用于保护计算机程序的流程图。[0036]图3示出了根据本发明的实施例的用于启动受保护的计算机程序的流程图。[0037]在附图标记列表中以总结的形式列出了附图中使用的附图标记以及它们的含义。原则上,附图中相同的部件设置有相同的附图标记。具体实施方式[0038]图1示出了受保护的计算机程序10,其包括基于本机代码的启动程序可执行文件12。启动程序可执行文件12其可直接启动而不需要虚拟机包括启动程序模块14,启动程序模块14包含可执行的本机代码和加密的引导程序库16。加密的引导程序库16可作为数据被包含于启动程序可执行文件12中。此外,启动程序可执行文件12可包括用于对引导程序库16解密的密钥18。[0039]当启动程序可执行文件12启动时,启动程序模块14中的本机代码中的主函数启动,该主函数对引导程序库16解密、启动虚拟机并将解密的引导程序库16加载到虚拟机中。[0040]引导程序库16包括呈字节码形式的引导程序模块20和一个或多个加密的程序库22,引导程序模块20可由虚拟机执行,加密的程序库22作为数据被包含于引导程序库16中。此外,引导程序库16可包含用于对程序库22解密的密钥24。引导程序库16还可包含用于对程序库22解密的密钥24。此外,引导程序库16还可包含未被解密的一个或多个附加further库26。附加库26可作为数据被包含于引导程序库16中。[0041]引导程序模块20包含可由虚拟机执行的字节码,并且或者该字节码可包含用于对程序库22解密和或将程序库22、26加载到虚拟机中的功能。同样,程序库22、24基于字节码。此外,引导程序模块20可适于在调用内部函数时拦截虚拟机的库解析以仅对加密的程序库22解密。[0042]例如,启动程序可执行文件12可以是用C++编写的Win32应用程序,加密的引导程序库16作为C++头文件而被包含于其中。引导程序库16可以是.NET程序集,在该.NET程序集中,加密的程序库22、附加的程序库26以及密钥24可以是嵌入式源。同样,程序库22、26可以是.NET程序集。在这种情况下,虚拟机可以是.NET运行库runtime,可在其中加载并执行引导程序库16和程序库。[0043]程序库22受到保护以抵御逆向工程,因为这些程序库22和它们的密钥24从不会在非永久性存储器外未加密地呈现。[0044]由于计算机程序10的所有库22可能被混淆,记录器诸如NLog、用于.NET的免费登录平台)的记录器名称可能对所有混淆后的类而言不可读。这可能不会影响公共类。为了解决这点,可以为这样的类的记录器实例创建明确的名称。[0045]图2示出了用于生成受保护的计算机程序10的方法。对在程序库22、26中的计算机程序的保护包括多级的混淆和加密。所有这些多级的混淆和加密使创建计算机程序的非法拷贝或对其代码进行逆向工程变得更加困难。[0046]启动程序可执行文件12的部署可由批处理脚本自动完成(例如、*.bat或*.cmd文件)。这种批处理脚本可执行用于构建、混淆、加密和打包所有相关文件所需的所有操作。以下方法步骤全部可由这种批处理脚本来执行。[0047]在步骤SlO中,程序库22由源代码构建。例如,在VisualStudio中,可以开始构建相应的C#项目并且常量“0B-FUSCATE”可以作为参数argument传递。这可允许移除由单元测试使用的“内部可见(InternalsVisibleTo”属性以获取内部类。[0048]在步骤S12中,生成的程序库22被混淆和或加密。例如,混淆的配置可启用“字符串加密”。它还可以将混淆代码合并到共享程序集中以提高性能并减少开销。混淆后的程序库22可用私有证书和或用RC4算法加密。RC4算法可从批处理脚本中获得随机初始向量,所以每次部署计算机程序时,使用不同的初始向量。在使用证书的情况下,密钥24可以是私有证书以及对应的机密secret。在使用RC4的情况下,密钥24可以是随机初始向量。[0049]在步骤S14中,生成了引导程序库16。引导程序库16可基于适于对程序库22解密、将程序库22、26加载到虚拟机中并通过调用程序库22中的一个程序库中的启动函数或主函数启动计算机程序的代码。加密引导程序库16的被编译为字节码的代码作为引导程序模块20包含在引导程序库16中。混淆的并且或者加密的库22和密钥24也包含于加密的引导程序库16中。[0050]例如,加密的引导程序库16可基于包括引导程序模块20的源代码的附加的C#项目。加密的程序库C#程序集22通过使用、例如、VisualStudio而被放置于引导程序库的资源文件夹中。此外,被存储为文件的程序库26和密钥24可放置于该资源文件夹内。例如,来自前面步骤的生成的初始向量将作为生成的C#文件被添加至该项目。[0051]引导程序库16的项目文件可含有包含资源文件夹中所有文件的通配符。所以所有加密的程序库22、程序库26以及密钥24均可作为嵌入式源被嵌入引导程序库16中。[0052]在步骤S16中,引导程序库16被随意地混淆并且在此之后被加密。由于引导程序模块20包含字节码并且包含解密算法,而引导程序库包含密钥24,因此库16在完成构建之后被随意地混淆并加密。[0053]可使用证书或RC4算法对引导程序库16加密。用于RC4加密的初始向量可随机地生成并且对每个构建而言可以不同。在使用证书的情况下,密钥18可以是私有证书和对应的机密。在使用RC4的情况下,密钥18可以是随机初始向量。引导程序库16的密钥18可以与密钥24不同。[0054]对于程序库22的加密和引导程序库16的加密二者而言,可使用RC4算法一一最广泛使用的软件流密码。RC4的初始向量(S卩、密钥18、24可在每次构建程序库22和引导程序库16时生成并且因此对于计算机程序的每个版本而言将会不同。[0055]在步骤S18中,启动程序可执行文件12被构建。启动程序可执行文件12包括启动程序模块14,启动程序模块14基于本机代码并适于启动虚拟机、对引导程序库16解密并将引导程序库16加载到虚拟机中。加密的引导程序库16和密钥18包含于启动程序可执行文件12中。[0056]例如,启动程序可执行文件12可基于加载.NET引擎并启动引导程序的Win32C++项目。加密的引导程序库16可被存储在C++头文件中,该C++头文件包含带有引导程序库16的加密内容的字节数组。该文件可被放置于启动程序项目中并且或者可与启动程序可执行文件12的其它源一起被编译成本机代码。同样,密钥18、例如RC4的生成的初始向量、可包含于该构建中。最终的启动程序可执行文件12可包含加密且混淆版本的引导程序库16。[0057]结果可以是经由Windows启动的打包的、两次加密并且两次混淆的计算机程序。当启动程序可执行文件12被启动时,.NET引擎可执行引导程序库16,引导程序库16可解析、解密并执行原始程序库22。计算机程序10的程序库22的从不会在文件系统上未加密地可用。计算机程序10的所有程序库22、26可捆绑在一起例如、仅一个*.exe文件待交付)。[0058]图3示出了用于启动受保护的计算机程序10的方法。[0059]在步骤S20中,启动程序模块14被启动。例如,启动程序可执行文件12可以是Windows可执行的本机代码,并且在其启动之后,启动程序模块14中的主函数被调用。由于计算机程序10经由启动程序可执行文件执行,该启动程序可执行文件是本机代码库,诸如.NET程序的进入程序集的字节码库没有入口点。[0060]在步骤S22中,启动程序模块14测试是否允许计算机程序在执行启动程序可执行文件的系统上运行。例如,该系统可以是PC并且或者引导程序模块20可使用X509证书来确认其是否被允许在当前计算机上运行。这些证书可包含唯一的硬件标识和请求该证书的用户。如果某人能够创建计算机程序10的合法拷贝,该证书其同样可包含于启动程序可执行文件12中)可能可获得有关谁提供了原始软件的信息。[0061]如果不允许在该系统上运行计算机程序10,启动程序可执行文件12终止。[0062]在步骤S24中,启动程序模块14检测调试程序debugger是否处于活动状态。这可由完整性检查程序执行,完整性检查程序可以是在启动程序可执行文件12中运行的检查应用程序完整性的任务。该任务可检测到调试程序或激活的操作(manipulationoftheactivation。然而,对于受保护的计算机程序10而言,调试几乎不可能。这些类可被混淆并且除在存储器中以外不可用。堆栈跟踪信息可给出一些关于异常的信息但仍然很难理解。[0063]如果检测到处于活动状态的调试程序,那么启动程序可执行文件和或启动的虚拟机终止。[0064]在步骤S26中,引导程序库由启动程序模块14进行解密。例如,引导程序库16通过以启动程序模块14中的本机代码实现的RC4算法解密。[0065]在步骤S28中,虚拟机由启动程序模块14启动。例如,启动程序模块14可启动.NET运行库。在那之后,引导程序库16加载到虚拟机中并且启动程序模块14调用入口点例如主函数)。因而,引导程序模块20启动并在虚拟机中执行。[0066]在步骤S30中,引导程序模块20对包含进入受保护的计算机程序10的入口点例如主函I»的程序库22解密。例如,在.NET中这可以是托管的“.ΕΧΕ”文件。解密的程序库22加载到虚拟机中并且启动程序模块14调用入口点。因而,计算机程序10的保护代码被启动。[0067]当没有调用计算机程序10的程序库22的函数时,没有必要对程序库22解密。库的解密可通过函数调用解析来控制。[0068]在步骤S32中,通过引导程序模块20来解析对进一步加密的程序库22的调用。例如,引导程序模块20注册了虚拟机的回调,其在无法解析函数名时被调用。在存在这个回调的情况下,引导程序模块20等待对未解析函数的调用。当调用这个回调时,引导程序模块20对包含待调用的函数的程序库22解密并将其加载到虚拟机中。[0069]例如,.NET框架允许拦截程序集解析并以自定义的方式加载它们。这可用于从加密源例如二进制文件或嵌入式源加载程序集。当使用该技术时,程序集的CIL仅在存储器中是非加密可用的。从不存在可用于反编译的非加密文件。[0070]尽管已经在附图中详细地图示并在前文的说明中详细地说明了本发明,这种图示和说明应当被认为是说明性的或示例性的而不是限制性的,本发明不限于所公开的实施例。通过对附图、公开内容和随附权利要求书的研究,本领域的技术人员能够理解并实现所公开的实施例的其它变型并实践要求保护的发明。在权利要求书中,词语“包括”不排除其它元件或步骤,并且不定冠词“一”或“一个”不排除多个。单个处理器或控制器或其它单元可实现权利要求中记载的若干物件的功能。某些特征被记载在彼此不同的从属权利要求中的事实并不意味着这些特征的组合不能加以利用。权利要求书中的任何附图标记都不应当被解释为限制范围。

权利要求:1.一种用于保护计算机程序10以抵御逆向工程的方法,所述方法包括:混淆并且或者加密所述计算机程序(10的至少一个程序库22,其中,所述至少一个程序库22包含适于通过虚拟机执行的字节码;将所述至少一个混淆的并且或者加密的程序库(22包含于引导程序库(16中,所述引导程序库(16包括引导程序模块20,所述引导程序模块20适于将所述至少一个程序库22加载到所述虚拟机中并适于启动所述计算机程序10;对所述引导程序库(16加密;将所述加密的引导程序库(16包含于本机代码启动程序可执行文件(12中,所述本机代码启动程序可执行文件(12包括启动程序模块14,所述启动程序模块14适于启动所述虚拟机、对所述引导程序库(16解密并适于将所述引导程序库(16加载到所述虚拟机中。2.根据权利要求1所述的方法,其中,将第一密钥(24包含于所述引导程序库(16中,所述第一密钥(24用于对所述至少一个程序库22解密;其中,所述引导程序模块20适于用所述第一密钥24对所述至少一个程序库22解I_L|〇3.根据权利要求1或2所述的方法,其中,将第二密钥(18包含于所述启动程序可执行文件(12中,所述第二密钥(18用于对所述引导程序库(16解密;其中,所述启动程序可执行文件(12适于用所述第二密钥(18对所述引导程序库(16解密。4.根据前述权利要求中的任一项所述的方法,其中,所述引导程序库(16在其被加密之前被混淆。5.根据前述权利要求中的任一项所述的方法,其中,所述至少一个程序库22和或所述引导程序库(16通过RC4算法加密和解密。6.根据前述权利要求中的任一项所述的方法,其中,将附加的程序库(26直接包含于所述引导程序库(16中,所述附加的程序库26包含字节码。7.根据前述权利要求中的任一项所述的方法,其中,所述至少一个程序库22包含CIL字节码或JAVA字节码;并且或者其中,所述引导程序库(16包含CIL字节码或JAVA字节码。8.—种启动受保护的计算机程序10的方法,所述方法包括:启动本机代码启动程序可执行文件(12的启动程序模块14,所述本机代码启动程序可执行文件(12包含加密的引导程序库(16,所述加密的引导程序库(16包含至少一个混淆的并且或者加密的程序库22;通过所述启动程序模块14启动虚拟机;通过所述启动程序模块14对所述引导程序库(16解密;将至少所述引导程序库(16的引导程序模块20加载到所述虚拟机中并通过所述启动程序模块14启动所述引导程序模块20;将包含于所述引导程序库(16中的程序库(22加载到所述虚拟机中并通过所述引导程序模块20启动所述程序库22。9.根据权利要求8所述的方法,进一步包括:通过所述引导程序模块20对所述程序库22解密。10.根据权利要求8或9所述的方法,进一步包括:通过以下步骤解析所述引导程序模块20对附加的加密的程序库22的调用:等待所述调用;在所述调用之后对所述附加的程序库22解密;将所述附加的程序库22加载到所述虚拟机中。11.根据权利要求8至10中的任一项所述的方法,进一步包括:通过所述启动程序模块14检测调试程序是否处于活动状态;当检测到处于活动状态的调试程序时终止所述检测。12.根据权利要求8至11中的任一项所述的方法,进一步包括:利用所述启动程序模块(14测试是否允许所述计算机程序(10在执行所述启动程序可执行文件的系统上运行;当不允许所述计算机程序10在所述系统上运行时终止所述测试。13.—种计算机程序10,所述计算机程序包括:启动程序可执行文件(12,所述启动程序可执行文件包含本机代码;加密的引导程序库(16,所述加密的引导程序库(16包含于所述启动程序可执行文件12中;至少一个混淆的并且或者加密的程序库(22,所述至少一个混淆的并且或者加密的程序库22包含于所述引导程序库(16中;其中,所述计算机程序10适于执行权利要求8至12中的一项所述的方法。14.根据权利要求10所述的计算机程序10,其中,所述启动程序可执行文件(12包含于一个数据文件中,在所述一个数据文件中存储有包含所述至少一个程序库22的所述引导程序库(16。15.—种计算机可读介质,所述计算机可读介质中存储有根据权利要求13或14所述的计算机程序10。

百度查询: 因温特奥股份公司 保护计算机程序以抵御逆向工程

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。