基于.Net虚拟机的软件保护系统和方法
技术领域
本发明属于信息安全领域,涉及一种基于.Net虚拟机的软件保护系统和方法。
背景技术
目前,随着计算机技术的发展,基于互联网的相关技术也越来越受到关注。其中,Microsoft公司的.Net Framework是Microsoft为在多个操作系统上实现开发多种类型的应用程序而创建的一个富有革命性的新平台。
.Net Framework没有限制应用程序的类型,它可以实现开发的应用程序包括:Windows应用程序、Web应用程序、Web服务和其他各种类型的应用程序。由此.Net Framework的设计方式保证它可以用于各种语言比如:C#语言、C++、Visual Basic、J#,甚至一些旧的语言,如COBOL。.Net Framework功能实现主要在于它包含一个非常大的代码库和.Net公共语言运行库(Common Language Runtime,CLR),代码库使得客户可以在客户语言(如C#)中通过面向对象编程技术(OOP)来使用这些代码,而.Net公共语言运行库负责管理用.Net库开发的所有应用程序的执行。所以,使用.Net Framework编写应用程序,实质就是使用.Net代码库编写代码,编程语言被目标操作系统能够理解,需要编译代码,将.Net framework代码库中的代码变译成Microsoft的中间语言。
所谓虚拟机,可以把它想象成一台用软件来模拟的机器,在这台机器里有处理器、内存、寄存器等各种硬件,模拟执行各种指令,在这台机器上运行的软件对运行环境没有特殊要求,所以虚拟机对在它上运行的程序是透明的。例如,x86虚拟机模拟的是x86指令程序的运行环境,c51虚拟机模拟的是c51指令程序的运行环境。
软件保护装置:是一种带有处理器和存储器的小型硬件装置,它可通过计算机的数据通讯接口与计算机连接。可预置加密算法,且相关的运算完全在装置内部运行,具有抗攻击的特性,安全性极高。
鉴于软件保护装置和虚拟机的出现,软件保护装置生产商(简称生产商)会在较高端的硬件设备中实现某种虚拟机功能,那么便可以在软件保护装置中直接运行与实现的虚拟机相对应格式的代码,例如,硬件生产商在件保护装置中实现了c51虚拟机,目前的应用方式就是将C语言通过KEIL编译成c51代码,存入软件保护装置中运行。
目前,可编程的较高端软件保护装置,保护软件的原理是将软件中的核心程序写入信息,并且不在主机上保留这一部分程序的副本。但现有的软件保护装置可以运行C51指令却不能够运行其他指令,所以在将运行非c51指令程序写入软件保护装置时,需将程序的源代码在Keil C51开发环境下编译成.hex文件,再将.hex文件转换成bin文件,bin文件是包含C51指令的,从而可以直接将bin文件写入到软件保护装置。但是若源程序不是由C语言编写的,需要将源程序中这一部分程序先改写成C语言的程序,再按照上述步骤来完成。在源程序相应位置,需要开发人员编写一个与源代码同种编程语言的通讯,以便源程序运行到这一位置时,能够寻找到软件保护装置,调用软件保护装置中的程序,完成整个程序的功能。由此可见,这一过程是相当繁琐的,且要求开发人员必须对C语言很熟悉,但是随着社会的发展,熟悉C语言的开发人员越来越少。
发明内容
鉴于现有技术在软件保护装置内部写入被保护软件的核心代码的过程烦琐,工作量大,对开发人员的要求也较高。本发明提供了一种基于.Net虚拟机的软件保护系统和方法。
一种基于.Net虚拟机的软件保护系统,其特征在于,所述系统包括处理设备和软件保护装置;
所述处理设备包括向导模块、集成开发模块和主机端微型框架模块,所述软件保护装置包括管理模块、接口模块、运行模块、函数库模块和加载模块;
所述向导模块分别与集成开发模块和主机端微型框架模块相连,用于根据用户需要,生成用户代码的模板,并将用户程序所引用的.Net类库指向主机端微型框架模块;
所述集成开发模块分别与向导模块、主机端微型框架模块、管理模块和接口模块相连接,用于开发被保护的软件;
所述主机端微型框架模块分别与向导模块和集成开发模块相连,用于和软件保护装置内的系统函数库相匹配实现软件保护装置的功能以用于用户进行程序调试;
所述管理模块分别与接口模块和集成开发模块相连接,用于管理软件保护装置的设置和文件系统;
所述接口模块分别与运行模块和所述处理设备的集成开发模块相连接,用于所述处理设备和所述软件保护装置之间的通信;
所述运行模块分别与所述函数库模块、所述加载模块和所述接口模块相连接,用于解释并执行加载器单元读取的核心代码,所述运行模块具体为.Net虚拟机;
所述函数库模块与所述运行模块相连接,用于在被保护软件在所述软件保护装置中运行调用时向所述运行模块提供所调用的函数;
所述加载模块与所述运行模块相连接,用于读取软件保护装置中写入的核心代码。
所述软件保护装置具体为加密锁。
所述运行模块具体为.Net虚拟机。
所述集成开发模块具体为VS2005集成开发环境。
所述管理模块具体为加密锁管理工具。
一种基于.Net虚拟机的软件保护方法,包括:保护被保护软件中核心代码和运行被保护软件;
所述保护被保护软件中核心代码的步骤具体包括:
步骤1、根据将用户程序所引用的.Net类库指向主机端微型框架的向导建立工程,所述主机端微型框架与软件保护装置内部的函数库对应,模拟软件保护装置的功能,实现软件保护装置的运行特征以实现被保护软件主机端调试;
步骤2、应用建立好的工程选择自己的编程语言开发被保护软件;
步骤3、将编写好的被保护软件调试运行;
步骤4、将调试运行后的被保护软件的核心代码写入软件保护装置,并在被保护软件中删除所述核心代码;
步骤5、编写被保护软件与软件保护装置的通讯代码;
所述运行被保护软件的步骤具体包括:
步骤1’、主机运行被保护软件;
步骤2’、主机运行到通讯代码处,由软件保护装置将写入的核心代码读入内存,通过.Net虚拟机解释执行核心代码;
步骤3’、软件保护装置将核心代码运行结果返回主机;
步骤4’、主机继续运行被保护软件。
所述步骤4和所述步骤2’中的软件保护装置包含.Net虚拟机、函数库和加载器;相应的,步骤2’中软件保护装置运行核心代码时,软件保护装置从其内部的函数库中调用函数。
所述步骤1中的向导用于将用户程序所引用的.Net类库指向主机端微型框架。
所述主机端微型框架与软件保护装置内部的函数库对应,模拟软件保护装置的功能,实现软件保护装置的运行特征以实现被保护软件主机端调试。
所述步骤2中的编程语言为C#、VB、J#、C++开发语言。
所述步骤3中的调试运行的具体步骤为:被保护软件在主机上运行,并在运行过程中调用主机端微型框架中的函数。
所述步骤4中将调试运行后的被保护软件的核心代码写入软件保护装置具体为调试运行后的被保护软件的核心代码被直接写入软件保护装置或优化后写入软件保护装置。
所述步骤2’访问软件保护装置的过程具体为:软件保护装置将写入的核心代码读入内存,通过.Net虚拟机解释执行。
有益效果:在本发明技术方案中的软件保护装置中包含.Net虚拟机、函数库模块和加载模块,允许用户选择不同的开发语言开发核心代码,增加了软件保护装置的易用性。
附图说明
图1是本发明一种基于.Net虚拟机的软件保护系统的结构示意图。
图2是本发明保护被保护软件中核心代码的方法流程图。
图3是本发明运行被保护软件的方法流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例
如图1所示是一种基于.Net虚拟机的软件保护系统结构示意图。
一种基于.Net虚拟机的软件保护系统,包括处理设备100和软件保护装置200;
处理设备100包括向导模块101、集成开发模块102和主机端微型框架模块103,软件保护装置200包括管理模块202、接口模块201、运行模块204,函数库模块203和加载模块205;
软件保护装置200用于写入、存储、运行被保护软件中核心代码并返回核心代码运行。
向导模块101分别与集成开发模块102和主机端微型框架模块103相连,用于根据用户需要,生成用户代码的模板,并将用户程序所引用的.Net类库指向主机端微型框架模块;
集成开发模块102分别与向导模块101,主机端微型框架模块103,管理模块202和接口模块201相连接,用于被保护软件的开发;
主机端微型框架模块103分别与向导模块101和集成开发模块102相连,用于和软件保护装置200内的函数库模块203相匹配实现软件保护装置的功能以用于用户进行程序调试;
管理模块202分别与接口模块201和集成开发模块102相连接,用于管理软件保护装置的设置和文件系统;
接口模块201分别与运行模块204和处理设备100的集成开发模块102相连接,用于处理设备100和软件保护装置200之间的通信;
运行模块204分别与函数库模块203和加载模块205相连接,用于解释并执行加载器单元读取的核心代码;
函数库模块203与运行模块204相连接,用于在被保护软件在软件保护装置200中运行调用时向运行模块204提供所调用的函数;
加载模块205与运行模块204相连接,用于读取软件保护装置模块200中写入的核心代码。
集成开发模块是VS2005集成开发环境,软件保护装置是加密锁。加密锁内部包含作为接口模块的API,,作为管理模块的加密锁管理工具,作为运行模块的Net虚拟机,作为函数库模块的系统函数库以及作为加载单元的加载器,而系统函数库的设计方式保证它可以用于各种语言比如:C#语言、C++、Visual Basic、J#,甚至一些旧的语言,使得用户在将被保护软件中的核心代码写入加密锁时,不必再经过代码转换,直接将使用任一开发语言开发的核心代码写入加密锁。
本实施例中,以C++为开发语言开发被保护软件,VS2005集成开发环境随加密锁一起提供给用户。
主机端微型框架连接于向导和VS2005集成开发环境用于实现和加密锁内的系统函数库相匹配,用于VS2005集成开发环境在主机上开发被保护软件后进行被保护软件程序调试。
加密锁管理工具连接于API,用于管理加密锁的设置和文件系统。
API连接于VS2005集成开发环境和加密锁中的加密锁管理工具,用于完成主机和加密锁的通讯的功能。
加密锁,用于写入、存储、运行被保护软件中核心代码并返回核心代码运行结果,包含API、加密锁管理工具、.Net虚拟机、系统函数库和加载器。
本实施例中,主机端微型框架和加密锁中的系统函数库匹配,被保护软件在主机上运行调试调用主机端微型框架,在加密锁中运行调用加密锁内部的系统函数库,实现被保护软件在主机及加密锁中正常运行。
本实施例通过在软件保护装置中包含.Net虚拟机、系统函数库和加载器。允许用户选择不同的开发语言开发核心代码,增加了软件保护装置的易用性。
如图2所示是保护被保护软件核心代码的方法流程图。
所述保护被保护软件中核心代码的步骤具体包括;
步骤201、用户根据向导建立工程;
在本实施例中,集成开发模块是VS2005集成开发环境,软件保护装置是加密锁。加密锁内部包含.Net虚拟机、系统函数库、加载器,而系统函数库的设计方式保证它可以用于各种语言比如:C#语言、C++、Visual Basic、J#,甚至一些旧的语言,使得用户在将被保护软件中的核心代码写入加密锁时,不必再经过代码转换,直接将使用任一开发语言开发的核心代码写入加密锁。
具体的步骤1为用户根据向导安装VS2005集成开发环境,并在用户开发程序的过程中将程序所引用的.Net类库指向主机端微型框架。
步骤202、用户应用建立好的工程选择自己的编程语言开发被保护软件;
具体的步骤202为用户应用VS2005集成环境选择编程语言开发其选定的被保护软件,编程语言可以是C#、VB、J#、C++等任一开发语言或其它更多的开发语言。
步骤203、用户将编写好的被保护软件调试运行;
具体的,步骤203为用户将开发完毕的被保护软件在主机上运行,运行过程中调用主机端微型框架,本实施例中的主机端微型架框与加密锁内部的系统函数库对应,用于模拟实现加密锁的运行特征,运行结束后得.exe文件。
步骤204、用户将调试运行后的被保护软件的核心代码写入软件保护装置模块,并在被保护软件中删除;
具体的,步骤204为用户将通过运行后的被保护软件的核心代码下载到加密锁,还可以优化后下载到加密锁,优化可以是使下载到加密锁中的核心代码占用的空间更小或提高该代码的执行效率。
步骤205、编写被保护软件与软件保护装置模块的通讯代码。
用户在被保护软件的核心代码处写入与加密锁的通讯指令,并在被保护软件中删除该核心代码。
如图3所示是运行被保护软件的方法流程图,其中软件保护装置是加密锁,加密锁中包含.Net虚拟机、系统函数库和加载器。
所述运行被保护软件的步骤具体包括:
步骤301、主机运行被保护软件;
主机运行被保护软件,运行过程中调用与加密锁中的系统函数库对应的主机端微型框架。
步骤302、主机运行到通讯代码处由软件保护装置模块运行核心代码;
在本实施例中,步骤302具体为主机运行到通讯代码处,软件保护装置来运行其内部的核心代码。
步骤303、软件保护装置将运行结果返回主机;
加密锁运行写入其中的被保护软件的核心代码,加密锁内的PE加载器将写入加密锁中的核心代码读入加密锁的内存,通过.Net虚拟机解释执行,当调用到主机端微型框架功能时,由加密锁内的系统函数库执行命令并返回给.Net虚拟机。
步骤304、主机继续运行被保护软件。
上所述的实施例,只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换,都应包含在本发明的保护范围内。