CN101201883A - 基于虚拟机的软件保护方法 - Google Patents
基于虚拟机的软件保护方法 Download PDFInfo
- Publication number
- CN101201883A CN101201883A CNA200710121950XA CN200710121950A CN101201883A CN 101201883 A CN101201883 A CN 101201883A CN A200710121950X A CNA200710121950X A CN A200710121950XA CN 200710121950 A CN200710121950 A CN 200710121950A CN 101201883 A CN101201883 A CN 101201883A
- Authority
- CN
- China
- Prior art keywords
- software
- virtual machine
- assembly
- hiding
- code
- 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.)
- Granted
Links
Images
Landscapes
- Storage Device Security (AREA)
Abstract
本发明公开了一种基于虚拟机的软件保护方法,包括步骤:定义用于编写隐藏组件的高级程序设计语言;定义虚拟机规范;实现高级程序设计语言到虚拟机专有指令集的编译器;实现以解释器作为执行引擎的虚拟机;将软件分割为公开组件和隐藏组件;在公开组件中添加提取用户计算机硬件ID信息模块;将上述步骤得到的虚拟机和公开组件的源代码编译为可执行文件;用高级程序设计语言重新实现隐藏组件,并将其编译为虚拟机代码,作为单独的隐藏组件文件。本发明构造的安全运行环境的性能高,公开与隐藏组件间的响应延迟小,极大改善了用户体验。本发明为软件开发商提供了一条有效防止软件盗版的途径,使在线发布软件成为现实,软件成本极大降低。
Description
技术领域
本发明涉及一种软件保护方法,具体地说,是涉及一种将软件分割为公开组件和隐藏组件,并将隐藏组件通过一定的编译规则装载到虚拟机中运行,以此来保护软件的方法。
背景技术
盗版给软件产业带来了巨大的损失。以2004年为例,全球一年非法安装的软件总值达到了310亿美元。由于软件的盗版,软件企业的研发投入资金不能得到充分回收,整个软件业的发展变得萎缩或畸形。软件盗版是一个全球性问题,它严重影响了整个软件业的健康发展,可见,软件保护技术研究有着重大的现实意义。
目前,最能有效抑制软件盗版的措施是通过使用技术手段来增加盗版软件的难度和成本。基于分割软件的软件保护是一种有效的软件保护方法,其在软件专有算法保护和软件拷贝保护领域有着重要的应用。一般,基于分割软件的软件保护是将软件分割为公开组件和隐藏组件两部分。公开组件安装在不可信的用户的计算机上,隐藏组件安装在安全的机器或设备上。隐藏组件所完成的功能是软件不可或缺的部分,公开组件必须通过与隐藏组件交互才能完成软件功能,即如果离开隐藏组件,公开组件便不能正常运行软件。而安装在安全的机器或设备上的隐藏组件是难于物理复制的,且隐藏组件的代码也是无法获得的,所以盗版者只能偷走公开组件(如复制),而得不到隐藏组件,这样便很好地防止了软件的盗版。
目前,公知的用于存储和运行隐藏组件的安全运行环境主要有两种:一种是软件开发商完全控制的Internet服务器,另一种是含有安全智能卡芯片的软件锁(Dongle)。
对于第一种安全运行环境,运行在用户计算机上的公开组件只能以事先规定好的完全受控方式,通过网络与运行在Internet服务器上的隐藏组件进行交互。其缺点是网络同步通信速度慢,频繁的延迟会造成较差的用户体验。
近年,提出了一种虚拟束缚技术(Virtual Leashing)。若软件使用了该技术,则为软件的公开组件分配的存储是由隐藏组件来决定如何释放的。由于存储的释放是不需要严格同步的,所以公开组件与隐藏组件间的通信实现了异步。可见,虚拟束缚技术作为一种不阻塞的软件分割技术,在一定程度上解决了网络延迟的问题,但是由于自身技术特点,其不能适用于采用自动存储回收机制语言(如Java、C#等)编写的应用软件。而且,软件的可用性依赖于Internet服务器中的隐藏组件的运行,也就是软件的可用性依赖于网络的可用性。因此,由于网络的限制,使得该种环境的使用受到了极大的限制。
对于第二种安全运行环境,软件锁中含有具有一定存储和计算能力的安全智能卡芯片,软件的隐藏组件存储并运行在软件锁中。运行在用户计算机中的软件公开组件只能通过预定义的接口来调用软件锁中对用户隐藏的隐藏组件。一般,正版软件在发布时配送软件锁。盗版者由于无法复制软件锁,也无法获得软件锁中的隐藏组件代码,因此,离开隐藏组件而单纯地复制软件公开组件是无法正常运行软件的,软件锁很好地解决了软件盗版的问题。然而,每发布一个软件拷贝,软件公司都需要随软件拷贝赠送一个配套的软件锁。因此,对于大量发行的软件,发布成本会显著增加,而且,由于软件锁的存在,软件的在线发布受到限制。另外,相对于目前的计算机而言,软件锁中安全智能卡芯片的存储和计算能力都非常弱,这也就造成了软件的整体运行性能低、用户体验差的缺陷,且无法实现在软件锁中运行复杂算法。而若在软件锁中对隐藏组件使用简单算法,则又会使得攻击者易猜测到算法的功能,这样便很大地降低了软件的安全性。
发明内容
本发明的目的在于提供一种基于虚拟机的软件保护方法,该方法为软件构造了一种基于虚拟机的纯软件的安全运行环境,使软件受到了有效保护,维护了软件开发商的知识产权。
为实现上述目的,本发明采用了以下技术方案:
一种基于虚拟机的软件保护方法,其特征在于它包括如下步骤:
A.定义一用于编写隐藏组件的高级程序设计语言HCPL;
B.定义虚拟机规范,该规范包括非公开的虚拟机专有指令集和虚拟机文件格式;
C.实现高级程序设计语言HCPL到虚拟机专有指令集的编译器;
D.实现以解释器作为执行引擎的虚拟机;
E.将软件分割为公开组件和隐藏组件两部分;
F.在公开组件中添加提取用户计算机硬件ID信息模块,以用于在安装软件、运行该模块后提取用户计算机硬件ID信息而生成用户可识别的注册码;
G.将步骤D得到的虚拟机和步骤F得到的公开组件的源代码编译为可执行文件;
H.使用高级程序设计语言HCPL重新实现隐藏组件,将重新实现的隐藏组件使用编译器编译为虚拟机代码,而作为一单独的隐藏组件文件。
之后还包括步骤:
a.在计算机中安装所述可执行文件;
b.运行所述公开组件中的提取用户计算机硬件ID信息模块,该模块将提取的计算机硬件ID信息转换为软件注册码;
c.用户将该注册码提供给软件开发商;
d.若该注册码合法,则软件开发商将用户提供的注册码生成为软件使用许可证,将该许可证添加到所述隐藏组件文件中,然后将该隐藏组件文件反馈给用户,进行下一步骤,若该注册码非法,则软件开发商不进行隐藏组件文件的反馈,步骤中断;
e.在计算机中装入软件开发商反馈的隐藏组件文件;
f.所述虚拟机的装载器将隐藏组件的代码从隐藏组件文件中装载到所述虚拟机中;
g.用户开始使用软件。
本发明的优点是:
1、由于本发明不采用即时编译技术,所以隐藏组件的代码永远不会被编译成本地代码,这样便可防止攻击者通过公开指令集的反汇编工具来分析隐藏组件的代码。将软件分割后的隐藏组件是在一个专有指令集的虚拟机上运行的。由于攻击者不知道指令集的定义和编码方式,所以即使得到隐藏组件的代码,也无法分析和理解其语义。攻击者为了能够理解隐藏组件代码的含义,就不得不通过逆向工程的手段分析整个虚拟机的代码。而虚拟机是一个复杂的系统,在没有源代码和相关文档资料的条件下,通过逆向工程的手段去分析一个虚拟机是一个工程难题。而且,在本发明中,为了更好地防止软件的盗版,向虚拟机中插入了数目众多的用于其自身完整性校验的代码段,众多校验点构成一个网络,各个校验点间形成多重相互保护,使虚拟机具有了更强的防非法篡改功能,给试图篡改软件的攻击者造成了极大的困难。
2、在使用软件的过程中,公开组件向虚拟机发出调用隐藏组件的指令后,运行隐藏组件代码而获取的实际计算机硬件ID信息会与许可证中授权运行软件的计算机硬件ID信息进行比较,这样便可有效地防止软件在未经授权的计算机上使用。
3、在保护不同的软件产品时,只需要改变本发明中的编译器后端、虚拟机的装载器和解释器等几个重要模块即可,通用性强。
4、在性能上,基于虚拟机的隐藏组件安全运行环境比传统技术构造的安全运行环境有了大幅地提高。对于交互式应用,这种提高更为明显。公开组件与隐藏组件间的响应延迟会因虚拟机的采用而明显降低,极大地改善和提升了用户体验。性能的改善也使得可以在隐藏组件中使用更复杂的算法,从而降低了受黑盒子攻击的风险,提高了安全性。
5、本发明为软件开发商提供了一条有效防止软件盗版的途径,使在线发布软件成为现实,软件成本极大降低。
附图说明
图1是本发明软件保护方法的实现流程图;
图2是设定校验器和构造校验区间的一个实例;
图3是为校验器选择校验区间而形成强连通校验关系图的一个实例;
图4是使用软件时的本发明实施软件保护的流程图;
图5是拥有合法许可证的软件运行效果图;
图6是没有合法许可证的软件运行效果图。
具体实施方式
下面将结合附图对本发明作进一步的说明。
如图1所示,软件开发商可以通过以下步骤A至H来将软件进行分割处理,以使软件得到有效的保护。
A.定义一用于编写隐藏组件的高级程序设计语言HCPL。高级程序设计语言HCPL是软件开发商自己定义的一种编写语言,该HCPL可采用现有的程序设计语言中的语法规则,如采用与JAVA语言相类似的语法规则,当然,HCPL也可完全由软件开发商自行规定一套新的、不同于现有程序设计语言的语法规则。
B.定义虚拟机规范,该规范包括非公开的虚拟机专有指令集和虚拟机文件格式。
C.实现高级程序设计语言HCPL到虚拟机专有指令集的编译器。该编译器为可变目标编译器,即对于不同软件,该可变目标编译器的后端是不同的,但其它部分相同。
D.实现以解释器作为执行引擎的虚拟机。一个典型的虚拟机是由装载器、执行引擎、存储管理等组件构成的。本发明中的虚拟机采用解释器作为执行引擎,该解释器用来解释执行隐藏组件的代码。由于虚拟机的执行引擎采用解释器,故虚拟机可以很容易地被移植到不同的处理器和操作系统平台上。但是,解释器的一个固有问题就是其解释执行代码的速度要比直接执行本地代码的速度慢很多。所以本发明的解释器采用了基于交换线代码(Switch Threaded Code)技术的高效解释器,该高效解释器采用C语言的switch语句构造了一个高效的跳转表。而且由于只有隐藏组件是通过解释器来执行的,所以通过合理分割软件,使隐藏组件代码的运行时间只占软件总体运行时间的一小部分,就可以有效地提升代码执行速度。
E.将软件分割为公开组件和隐藏组件两部分。其中,隐藏组件只占整个软件的一小部分,其主要包括软件的重要代码,如软件主要模块中的若干核心算法和关键代码。公开组件离开了隐藏组件,是不能单独运行计算的。
F.在公开组件中添加提取用户计算机硬件ID信息模块,以用于在安装软件、运行该模块后提取用户计算机硬件ID信息而生成用户可识别的注册码。该提取用户计算机硬件ID信息模块可以设置在公开组件的窗口中,如设置为一个帮助菜单下的选项。
G.将步骤D得到的虚拟机和步骤F得到的公开组件的源代码编译为可执行文件。
H.将软件分割后,使用高级程序设计语言HCPL重新实现隐藏组件,并将重新实现的隐藏组件使用上述可变目标编译器编译为虚拟机代码,而作为一单独的隐藏组件文件。由于本发明不采用即时编译技术,所以隐藏组件的代码永远不会被编译成本地代码,这样便可防止攻击者通过公开指令集的反汇编工具来分析隐藏组件的代码。并且,用HCPL高级程序设计语言编写隐藏组件和将隐藏组件编译为虚拟机代码的目的是:若攻击者得到隐藏组件,攻击者无法分析、理解隐藏组件的代码。
虚拟机是一个复杂的系统,在没有源代码和相关文档资料的条件下,通过逆向工程的手段去分析一个虚拟机是一个工程难题。本发明中的虚拟机是安全运行环境的一个核心模块,为了使其更好地防止软件盗版,在本发明中,向其插入了数目众多的用于其自身完整性校验的代码段,众多校验点构成一个网络,各个校验点间形成多重相互保护,以使虚拟机具有很强的防非法篡改功能,可给试图篡改软件的攻击者造成极大困难。具体实现过程如下:
1、定义一校验器模板,该校验器模板为一段代码,该段代码负责校验一个校验区间的完整性,但未定义被校验区间的起始结束位置,并且在该校验器模板中含有配平代码(即校验器所在校验区间的配平值)。
2、将校验器模板以汇编语言的形式植入虚拟机的源代码中。
在这里,校验器模板是以汇编语言的形式植入虚拟机的源代码中的,而不是直接植入可执行文件中。这样,便可在植入阶段避免对目标文件(即可执行文件)的直接操作,从而避免了对于二进制目标文件中跳转指令偏移量的调整、寄存器的重新分配等繁琐的处理,同时也避免了跨平台时对于不同目标文件格式繁琐的支持。
3、在校验器模板中设定校验器和构造校验区间:
设防篡改区间为I[s,e]。取位于区间I中的校验器n个,按照其地址由小到大分别记为:C1,C2,...,Cn。取位于区间I外的高地址区域的校验器m-1个,按照其地址由小到大分别记为Cn+1,Cn+2,...,Cn+m-1。构造n+m-2个校验区间Ii[si,ei],1≤i≤n+m-2,对于1≤i≤m-1,随机选择si,ei,并使得si<s,Ci<ei<Ci+1,对于m≤i≤n+m-2,随机选择si,ei,并使得Ci-m+1<si<Ci-m+2,Ci<ei<Ci+1。
例如,如图2所示,防篡改区间内设有5个校验器,高地址区域内设有3个校验器,整个区间内共设有7个校验区间。
按照上述方法构造校验区间的好处是:由于上述方法中保证了每个校验区间都被一个校验器所校验,所以区间I中每个位置至少被m-2个校验区间所包含,即区间I中每个位置都会被多次校验,这样,区间I中每个位置都会受到多个校验器的多重保护。
4、为校验器选择校验区间:
构造自然数1到n+m-2的一个任意排列,记为:a1,a2,...,an+m-2,则校验器Ca1用来校验区间Ia2,校验器Ca2用来校验区间Ia3,以此类推,直至校验器Can+m-2用来校验区间Ia1。
为校验器选择校验区间后,各个校验器间便存在一定的校验关系,为此,定义一校验关系图,以清楚明了各校验器间的校验次序。
定义:校验关系图是一个有向图,图中每一个节点代表一个校验器,图中存在从节点i到节点j的有向边,当且仅当校验器j所在区间被校验器i所校验。
按照校验关系图的定义,由步骤3和4可得到一个校验关系图,且该校验关系图是强连通的。这就意味着,如果所有的校验器都在虚拟机运行中被有效执行,那么,即使对防篡改区间内的代码做一字节的修改,也需要使所有的校验器全部失效,才能逃避抗篡改机制的检测,而这在实际工程中是很难做到的。
例如,如图3所示,为图2中的校验器选择校验区间。取自然数1到7的一个任意排列:4,7,2,5,3,6,1,则形成的校验关系图中存在一个包括Ci,i=1,2,...,7全部顶点的环(见图3中的粗有向线),故该校验关系图是强连通的。
5、为每一校验区间计算配平值:
对于校验区间Ii,选取校验器Ci中的配平位置存放配平值。按照校验区间结束地址由低到高的顺序,逐个计算每个校验区间的配平值。配平是若干字节的不可达代码。因为不可达,所以配平值可以更改为任意值,以便达到使其所在校验区间的校验和为零的目的,从而达到校验目的。
另外,对于校验器模板、配平值、校验器中的校验函数以及校验器的响应机制,可以进行多样性处理,以防止攻击者破解一个保护点后,通过模式匹配发现其它保护点。
实际应用中,步骤3至5是在虚拟机与公开组件形成的可执行文件上操作的,其可作为可执行文件的补丁来发布。
综上所述,整个软件被分割为了两个部分,一个是公开组件,另一个是隐藏组件。公开组件与虚拟机结合而生成一个可执行文件,该可执行文件将要处于的环境被看作一个不可信环境。隐藏组件作为一个单独的数据文件存在,软件开发商可在隐藏组件上设置数字签名,该隐藏组件可被存储在任何可读存储介质中。
软件进行以上分割处理后,软件开发商便可发布可执行文件和补丁了(也可直接发布打过补丁的可执行文件),而隐藏组件文件是在用户提供软件注册码后反馈给用户的,且反馈的隐藏组件文件中添加了代表用户使用的计算机硬件ID信息的许可证(即许可码)。
如图4所示,若用户购买了软件开发商发布的软件(这里指打过补丁的可执行文件),则可通过以下步骤来使用软件:
a.在计算机中安装可执行文件。
b.打开公开组件,运行其中的提取用户计算机硬件ID信息模块,该模块将提取的计算机硬件ID信息转换为软件注册码。
c.用户将得到的注册码提供给软件开发商,如email发送给开发商。
d.若该注册码合法,则软件开发商将用户提供的注册码生成为软件使用许可证,该许可证包含了该用户的计算机硬件ID信息,软件开发商将该许可证添加到隐藏组件文件中,然后将该隐藏组件文件反馈给用户,进行下一步骤。若该注册码非法,则软件开发商不进行隐藏组件文件的反馈,步骤中断。
e.用户在计算机中装入软件开发商反馈的隐藏组件文件。
f.装载器将隐藏组件文件中的隐藏组件代码装载到虚拟机中。若软件开发商在隐藏组件文件中设置了数字签名,则在装载隐藏组件代码的同时,对该隐藏组件的代码进行软件开发商的数字签名验证,若通过验证,则成功装载该隐藏组件,进行下一步骤,若没有通过验证,则不能装载该隐藏组件,无法使用软件,步骤中断。
g.用户开始使用软件:在使用软件的过程中,公开组件向虚拟机发出调用隐藏组件的指令,然后装载到虚拟机上的隐藏组件代码运行,将由隐藏组件代码获取的实际计算机硬件ID信息与许可证中授权运行软件的计算机硬件ID信息进行比较,以防止软件被非法拷贝。若相一致,则隐藏组件向公开组件提供正确的服务;若不一致,则隐藏组件向公开组件提供错误的服务。
通过本发明的软件保护方法分割处理软件,可以有效防止软件盗版。例如,图5所示的软件为正版软件,其拥有合法的软件使用许可证,故该软件可以正常运行。而图6所示的软件为盗版软件,其没有合法的软件使用许可证,故该软件不能正常运行(见图6弹出的错误对话框)。
在实际使用本发明时,保护不同的软件产品,只需要改变本发明中的编译器后端、虚拟机的装载器和解释器等几个重要模块即可。另外,对于不同软件的保护,HCPL、编译器、虚拟机等可以使用完全不同的指令集和编码,这样,攻击者即使花费极大努力破解了某个指令集的含义,其工作成果也无法推广到其它软件中去。
下面,将本发明构造基于虚拟机的隐藏组件安全运行环境与公知的软件锁和Internet服务器构造的安全运行环境进行比较,以评价本发明的安全运行环境的性能。其中:
含有安全智能卡芯片的软件锁选取目前某主流软件加密锁作为比较对象。该软件加密锁内部采用通过EAL5+认证的Philips SmartMXTM系列安全智能卡芯片,有着优良的抗物理攻击特性。其和同类芯片相比,SmartMXTM系列芯片有着优良的计算性能,其处理器主频16MHz,总线宽度16位,用户可用RAM大于2K字节,使用250字节的独立通信缓冲区,采用8~64K字节的EEPROM存储用户算法及数据,片上集成USB1.1接口。
Internet服务器选取教育网内的两台计算机做模拟实验,公开组件和隐藏组件间采用同步调用方式,由于Internet网络的传输波动性比较大,实验记录10组数据,最后选取时间最大值和平均值作比较。
而本发明的安全运行环境如下:AMD Athlon XP 2500+处理器,主频:1.84GHz,512M DDR RAM。
在三种安全运行环境中,各种类型数据运算所需的时间如下表所示:
评测内容 | 软件加密锁(ms) | Internet服务器 | 虚拟机(ms) | |
最大(ms) | 平均(ms) | |||
整数运算 | 35.03 | 381.53 | 43.65 | 0.0178 |
单精度浮点运算 | 36.52 | 8.44 | 2.80 | 0.0220 |
双精度浮点运算 | 36.99 | 217.97 | 29.59 | 0.0231 |
冒泡排序10整数 | 245.73 | 6.73 | 3.67 | 0.11 |
冒泡排序50整数 | 4871.89 | 7.68 | 2.71 | 1.64 |
冒泡排序100整数 | 19,158.20 | 85.02 | 11.54 | 6.43 |
从上表可以看到,基于虚拟机的隐藏组件安全运行环境与软件加密锁相比,在性能上有两个数量级的提高。造成这种现象的原因是:当前PC处理器的运算速度远远高于智能卡芯片处理器。而且,软件加密锁的低速I/O,也是造成其运算性能低下的重要原因,即使不作任何运算,对软件加密锁的一次调用也需要19ms,若传递大量参数,则性能更是急剧恶化。而对于Internet服务器,由于其评测程序计算量小,在服务器上的实际计算时间很少,调用的完成时间基本由当时的网络延迟所决定,故而有很大的随机性。如上表所示,在宽带网络下的测试结果尚表现不佳,那么在低速网络下,其性能更无法保证。
从上表的数据可以得到:在性能上,基于虚拟机的隐藏组件安全运行环境比传统技术构造的隐藏组件安全运行环境有了大幅地提高。对于交互式应用,这种提高更为明显。公开组件与隐藏组件间的响应延迟会因虚拟机的采用而明显降低,极大地改善和提升了用户体验。性能的改善也使得可以在隐藏组件中使用更复杂的算法,从而降低了受黑盒子攻击的风险,提高了安全性。
Claims (9)
1.一种基于虚拟机的软件保护方法,其特征在于它包括如下步骤:
A.定义一用于编写隐藏组件的高级程序设计语言HCPL;
B.定义虚拟机规范,该规范包括非公开的虚拟机专有指令集和虚拟机文件格式;
C.实现高级程序设计语言HCPL到虚拟机专有指令集的编译器;
D.实现以解释器作为执行引擎的虚拟机;
E.将软件分割为公开组件和隐藏组件两部分;
F.在公开组件中添加提取用户计算机硬件ID信息模块,以用于在安装软件、运行该模块后提取用户计算机硬件ID信息而生成用户可识别的注册码;
G.将步骤D得到的虚拟机和步骤F得到的公开组件的源代码编译为可执行文件;
H.使用高级程序设计语言HCPL重新实现隐藏组件,将重新实现的隐藏组件使用编译器编译为虚拟机代码,而作为一单独的隐藏组件文件。
2.根据权利要求1所述的基于虚拟机的软件保护方法,其特征在于:
所述步骤D中,将校验器模板以汇编语言的形式植入所述虚拟机的源代码中,以使所述虚拟机具有防非法篡改功能。
3.根据权利要求2所述的基于虚拟机的软件保护方法,其特征在于:
植入所述校验器模板后,还包括步骤:
1)设定校验器和构造校验区间;
2)为校验器选择校验区间;
3)为每一校验区间计算配平值。
4.根据权利要求3所述的基于虚拟机的软件保护方法,其特征在于:
所述步骤1)中,设定校验器和构造校验区间具体为:
设防篡改区间为I[s,e],取位于区间I中的校验器n个,按照其地址由小到大分别记为:C1,C2,...,Cn,取位于区间I外的高地址区域的校验器m-1个,按照其地址由小到大分别记为Cn+1,Cn+2,...,Cn+m-1,构造n+m-2个校验区间Ii[si,ei],1≤i≤n+m-2,对于1≤i≤m-1,随机选择si,ei,并使得si<s,Ci<ei<Ci+1,对于m≤i≤n+m-2,随机选择si,ei,并使得Ci-m+1<si<Ci-m+2,Ci<ei<Ci+1。
5.根据权利要求3所述的基于虚拟机的软件保护方法,其特征在于:
所述步骤2)中,为所述校验器选择校验区间具体为:
构造自然数1到n+m-2的一个任意排列,记为:a1,a2,...,an+m-2,则校验器Ca1用来校验区间Ia2,校验器Ca2用来校验区间Ia3,以此类推,直至校验器Can+m-2用来校验区间Ia1。
6.根据权利要求1所述的基于虚拟机的软件保护方法,其特征在于:
所述步骤D中,所述解释器为高效解释器,该高效解释器采用C语言的switch语句构造了一个高效的跳转表。
7.根据权利要求1所述的基于虚拟机的软件保护方法,其特征在于:
之后还包括步骤:
a.在计算机中安装所述可执行文件;
b.运行所述公开组件中的提取用户计算机硬件ID信息模块,该模块将提取的计算机硬件ID信息转换为软件注册码;
c.用户将该注册码提供给软件开发商;
d.若该注册码合法,则软件开发商将用户提供的注册码生成为软件使用许可证,将该许可证添加到所述隐藏组件文件中,然后将该隐藏组件文件反馈给用户,进行下一步骤,若该注册码非法,则软件开发商不进行隐藏组件文件的反馈,步骤中断;
e.在计算机中装入软件开发商反馈的隐藏组件文件;
f.所述虚拟机的装载器将隐藏组件的代码从隐藏组件文件中装载到所述虚拟机中;
g.用户开始使用软件。
8.根据权利要求7所述的基于虚拟机的软件保护方法,其特征在于:
在所述步骤f中,装载隐藏组件文件的同时,对该隐藏组件的代码进行软件开发商的数字签名验证,若通过验证,则成功装载该隐藏组件,进行下一步骤,若没有通过验证,则不能装载该隐藏组件,无法使用软件,步骤中断。
9.根据权利要求7所述的基于虚拟机的软件保护方法,其特征在于:
所述步骤g具体为:
所述公开组件向所述虚拟机发出调用隐藏组件的指令;
运行装载到所述虚拟机上的隐藏组件代码,将由隐藏组件代码获取的实际计算机硬件ID信息与许可证中授权运行软件的计算机硬件ID信息进行比较,若相一致,则隐藏组件向公开组件提供正确的服务,若不一致,则隐藏组件向公开组件提供错误的服务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710121950XA CN101201883B (zh) | 2007-09-18 | 2007-09-18 | 基于虚拟机的软件保护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710121950XA CN101201883B (zh) | 2007-09-18 | 2007-09-18 | 基于虚拟机的软件保护方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101201883A true CN101201883A (zh) | 2008-06-18 |
CN101201883B CN101201883B (zh) | 2010-04-14 |
Family
ID=39517045
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200710121950XA Expired - Fee Related CN101201883B (zh) | 2007-09-18 | 2007-09-18 | 基于虚拟机的软件保护方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101201883B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101853363A (zh) * | 2010-05-07 | 2010-10-06 | 北京飞天诚信科技有限公司 | 一种文件保护方法及系统 |
CN102214281A (zh) * | 2011-04-27 | 2011-10-12 | 北京深思洛克软件技术股份有限公司 | 一种软件保护方法和装置 |
CN102360412A (zh) * | 2011-09-26 | 2012-02-22 | 飞天诚信科技股份有限公司 | Java源代码的保护方法和系统 |
CN103049683A (zh) * | 2012-12-18 | 2013-04-17 | 惠州市亿能电子有限公司 | 一种bms上位机程序授权保密方法 |
CN103106356A (zh) * | 2013-02-01 | 2013-05-15 | 北京深思洛克软件技术股份有限公司 | 一种在安全环境中生成代码提高软件保护强度的方法 |
CN103765379A (zh) * | 2011-08-30 | 2014-04-30 | 微软公司 | 基于云的构建服务 |
CN104620553A (zh) * | 2012-06-25 | 2015-05-13 | 西门子公司 | 用于保护计算机程序产品的方法、计算机程序产品以及计算机可读存储介质 |
CN105046117A (zh) * | 2015-06-30 | 2015-11-11 | 西北大学 | 一种具有指令集随机化的代码虚拟化软件保护系统 |
CN105930735A (zh) * | 2016-04-22 | 2016-09-07 | 北京奇虎科技有限公司 | 一种文件加固方法及装置 |
CN108287727A (zh) * | 2017-12-19 | 2018-07-17 | 北京趣拿软件科技有限公司 | 组件的调度方法和装置 |
CN112199158A (zh) * | 2020-10-16 | 2021-01-08 | 常熟理工学院 | 虚拟机保护的解释例程识别方法、装置、设备及存储介质 |
CN112199163A (zh) * | 2020-10-16 | 2021-01-08 | 常熟理工学院 | 分析解释例程的虚拟指令方法、装置、设备及存储介质 |
WO2021055987A1 (en) | 2019-09-17 | 2021-03-25 | Thales Dis Cpl Usa, Inc. | Method for controlling execution of an application |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1275141C (zh) * | 2003-12-25 | 2006-09-13 | 中国科学院自动化研究所 | 一种数字媒体发布及播放的保护方法 |
CN100342296C (zh) * | 2005-09-09 | 2007-10-10 | 深圳兆日技术有限公司 | 基于可信计算模块芯片实现计算机软件防盗版的方法 |
CN100461200C (zh) * | 2006-12-22 | 2009-02-11 | 北京飞天诚信科技有限公司 | 一种在软件保护装置中实现软件保护的方法与装置 |
-
2007
- 2007-09-18 CN CN200710121950XA patent/CN101201883B/zh not_active Expired - Fee Related
Cited By (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8856521B2 (en) | 2010-05-07 | 2014-10-07 | Feitian Technologies Co., Ltd. | Methods and systems for performing secure operations on an encrypted file |
CN101853363A (zh) * | 2010-05-07 | 2010-10-06 | 北京飞天诚信科技有限公司 | 一种文件保护方法及系统 |
CN101853363B (zh) * | 2010-05-07 | 2012-08-08 | 飞天诚信科技股份有限公司 | 一种文件保护方法及系统 |
CN102214281A (zh) * | 2011-04-27 | 2011-10-12 | 北京深思洛克软件技术股份有限公司 | 一种软件保护方法和装置 |
US10078536B2 (en) | 2011-08-30 | 2018-09-18 | Microsoft Technology Licensing, Llc | Cloud-based build service |
CN103765379B (zh) * | 2011-08-30 | 2017-10-17 | 微软技术许可有限责任公司 | 基于云的构建服务 |
CN103765379A (zh) * | 2011-08-30 | 2014-04-30 | 微软公司 | 基于云的构建服务 |
CN102360412B (zh) * | 2011-09-26 | 2014-07-02 | 飞天诚信科技股份有限公司 | Java源代码的保护方法和系统 |
CN102360412A (zh) * | 2011-09-26 | 2012-02-22 | 飞天诚信科技股份有限公司 | Java源代码的保护方法和系统 |
CN104620553A (zh) * | 2012-06-25 | 2015-05-13 | 西门子公司 | 用于保护计算机程序产品的方法、计算机程序产品以及计算机可读存储介质 |
CN104620553B (zh) * | 2012-06-25 | 2018-03-13 | 西门子公司 | 用于保护计算机程序产品的方法、计算机程序产品以及计算机可读存储介质 |
US10268807B2 (en) | 2012-06-25 | 2019-04-23 | Siemens Aktiengesellschaft | Method for protecting a computer program product, computer program product and computer-readable storage medium |
CN103049683B (zh) * | 2012-12-18 | 2016-04-06 | 惠州市亿能电子有限公司 | 一种bms上位机程序授权保密方法 |
CN103049683A (zh) * | 2012-12-18 | 2013-04-17 | 惠州市亿能电子有限公司 | 一种bms上位机程序授权保密方法 |
CN103106356A (zh) * | 2013-02-01 | 2013-05-15 | 北京深思洛克软件技术股份有限公司 | 一种在安全环境中生成代码提高软件保护强度的方法 |
CN103106356B (zh) * | 2013-02-01 | 2016-03-16 | 北京深思数盾科技有限公司 | 一种在安全环境中生成代码提高软件保护强度的方法 |
WO2014117668A1 (zh) * | 2013-02-01 | 2014-08-07 | 北京深思洛克软件技术股份有限公司 | 一种在安全环境中生成代码提高软件保护强度的方法 |
CN105046117A (zh) * | 2015-06-30 | 2015-11-11 | 西北大学 | 一种具有指令集随机化的代码虚拟化软件保护系统 |
CN105930735A (zh) * | 2016-04-22 | 2016-09-07 | 北京奇虎科技有限公司 | 一种文件加固方法及装置 |
CN105930735B (zh) * | 2016-04-22 | 2019-02-05 | 北京奇虎科技有限公司 | 一种文件加固方法及装置 |
CN108287727A (zh) * | 2017-12-19 | 2018-07-17 | 北京趣拿软件科技有限公司 | 组件的调度方法和装置 |
WO2021055987A1 (en) | 2019-09-17 | 2021-03-25 | Thales Dis Cpl Usa, Inc. | Method for controlling execution of an application |
CN112199158A (zh) * | 2020-10-16 | 2021-01-08 | 常熟理工学院 | 虚拟机保护的解释例程识别方法、装置、设备及存储介质 |
CN112199163A (zh) * | 2020-10-16 | 2021-01-08 | 常熟理工学院 | 分析解释例程的虚拟指令方法、装置、设备及存储介质 |
CN112199163B (zh) * | 2020-10-16 | 2021-12-28 | 常熟理工学院 | 分析解释例程的虚拟指令方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN101201883B (zh) | 2010-04-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101201883B (zh) | 基于虚拟机的软件保护方法 | |
Collberg et al. | Dynamic path-based software watermarking | |
US8176473B2 (en) | Transformations for software obfuscation and individualization | |
CA2293650C (en) | Obfuscation techniques for enhancing software security | |
Collberg et al. | Sandmark-a tool for software protection research | |
EP2553570B1 (en) | Method for linking and loading to protect applications | |
US20100313188A1 (en) | Method for Preventing Software Reverse Engineering, Unauthorized Modification, and Runtime Data Interception | |
GB2439417A (en) | Comparing software functions using a comparison matrix | |
Zhang et al. | Hiding program slices for software security | |
CN102667712A (zh) | 用于同时定义和实行访问控制和完整性策略的系统、方法和装置 | |
CN112839036B (zh) | 基于拟态防御理论的软件运行环境生成方法及系统 | |
CN100481032C (zh) | 一种基于双usb密钥设备的usb接口锁 | |
Park et al. | Detecting common modules in Java packages based on static object trace birthmark | |
Madou et al. | On the effectiveness of source code transformations for binary obfuscation | |
CN105956425B (zh) | 一种基于smali代码混淆的Android应用保护方法 | |
Oishi et al. | Self destructive tamper response for software protection | |
EP3574425B1 (en) | Method to secure a software code | |
Li et al. | Research on blockchain smart contracts vulnerability and a code audit tool based on matching rules | |
Fu et al. | Some new approaches for preventing software tampering | |
Mesbah et al. | Reverse engineering a Java Card memory management algorithm | |
Smolka et al. | Fuzz on the Beach: Fuzzing Solana Smart Contracts | |
CN103677770B (zh) | 指令重组方法及装置 | |
Tsang et al. | A robust anti-tamper protection scheme | |
Sahoo et al. | Software watermarking in the frequency domain: Implementation, analysis, and attacks | |
Novac et al. | LLWM & IR-mark: Integrating software watermarks into an LLVM-based framework |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100414 Termination date: 20140918 |
|
EXPY | Termination of patent right or utility model |