软件加密方法及系统的制作方法

文档序号:6331454阅读:201来源:国知局
专利名称:软件加密方法及系统的制作方法
软件加密方法及系统
技术领域
本发明涉及软件加密技术领域,尤其涉及一种软件加密方法及系统。背景技术
为了防止软件的非法复制和盗版,保护软件开发商的利益,需要对软件进行加密保护。目前,市面上的许多反盗版软件大多是单机处理,使用简单的加密手段,容易被解密者破解。此外,也有一些是通过硬件加密狗的方式实现加密的。加密狗是一种插在计算机并行口(或USB接口)上的软硬件结合的加密产品,其中一般有几十或几千字节的非易失性存储空间可供读写,目前常用的加密狗内部还包含单片机。软件开发者通过接口函数 (API, Application Programming hterface,应用程序编程接口 )和加密狗进行数据交换 (即对加密狗的读写),来检查加密狗是否插在并行口(或USB接口)上,或者直接用加密狗附带的工具加密自己的可执行文件。这样软件开发者可以在软件中设置多处加密锁,利用加密狗作为钥匙来打开这些锁。如果没有将加密狗插在计算机并行口(或USB接口)上或加密狗与软件不对应,则软件不能正常运行。然而,通过硬件加密狗的方式实现加密,对于软件开发商来说,系统增加了一个硬件加密狗设备,提高了成本,尤其在大批量生产时,成本将大幅增加;此外,插拔式的加密狗也容易丢失或损坏,从而导致整个系统软件瘫痪;插拔式的加密狗稳定性差,容易接触不良,特别是在工作环境恶劣的情况下,例如对抗震性要求比较高的工控领域,插拔式的加密狗势必会影响整个系统的稳定性;并且,目前加密狗反破解技术虽然在不断改善,网络上破解加密狗的方法也比比皆是,使用加密狗加密软件降低了系统软件的加密安全性。

发明内容基于此,有必要提供一种能提高加密安全性的软件加密方法。一种软件加密方法,包括以下步骤将软件授权信息写入BIOS或EFI的预留存储空间;运行软件时,从预留存储空间获取软件授权信息;通过软件的应用程序检测软件授权信息是否正确,若是,则软件正常运行,否则软件运行出现异常。优选的,在将软件授权信息写入所述预留存储空间的步骤之前还包括在上电自检阶段检测主板授权信息,若主板授权信息正确,则正常开机,否则系统当机。优选的,所述在上电自检阶段检测主板授权信息的步骤具体是预先指定多个通用输入输出接口,规定多个通用输入输出接口的初始高低电平由硬件强制拉出,在上电自检阶段,读取通用输入输出接口的高低电平,根据高低电平判断主板是否授权。优选的,从预留存储空间获取软件授权信息的步骤是通过SoftSMI或通过BIOS 即插即用功能函数调用或通过软中断实现对所述预留存储空间的读取,获取软件授权信息;其中,通过SoftSMI实现对预留存储空间的读取,获取软件授权信息的步骤具体是通过软件的应用程序向SoftSMI的IO端口写数据,触发SMI中断,使中央处理器切换至系统管理模式,在系统管理模式下对预留存储空间进行读写,获取软件授权信息。优选的,通过软件的应用程序检测软件授权信息是否正确的步骤具体是将从预留存储空间获取的软件授权码与软件中的正确授权码进行对比,若相同,则软件授权信息正确,否则错误;或者通过软件的应用程序检测软件授权信息是否正确的步骤具体是检测获取的软件授权信息是否为软件的应用程序接下来要运行的代码,若是,则软件正常运行,否则软件运行出现异常。优选的,所述将软件授权信息写入预留存储空间的步骤之前还包括对所述软件授权信息进行加密的步骤;所述获取软件授权信息之后还包括对所述软件授权信息进行解密的步骤。此外,还有必要提供一种能提高加密安全性的软件加密系统。一种软件加密系统,包括存储模块,为BIOS或EFI上的一段预留存储空间,用于存储软件授权信息;授权信息写入模块,用于将软件授权信息写入所述存储模块;授权信息获取模块,用于在运行软件时,从存储模块中获取软件授权信息;检测模块,检测授权信息获取模块获取的软件授权信息是否正确;控制模块,当检测模块检测到软件授权信息正确时,控制软件正常运行,否则控制软件运行出现异常。优选的,系统还包括主板授权检测模块,用于在上电自检阶段检测主板授权信息,若主板授权信息正确,则控制正常开机,否则系统当机。优选的,主板授权检测模块进一步用于预先指定多个通用输入输出接口,规定多个通用输入输出接口的初始高低电平由硬件强制拉出,在上电自检阶段,读取通用输入输出接口的高低电平,根据高低电平判断主板是否授权。优选的,授权信息获取模块用于通过SoftSMI或通过BIOS即插即用功能函数调用或通过软中断实现对预留存储空间的读取,获取软件授权信息;其中,所述授权信息获取模块进一步用于向SoftSMI的IO端口写数据,触发SMI中断,使中央处理器切换至系统管理模式,在系统管理模式下对预留存储空间进行读写,获取软件授权信息。优选的,检测模块用于将获取的软件授权码与软件中的正确授权码进行对比,若相同,则软件授权信息正确,否则错误;或者检测模块用于检测获取的软件授权信息是否为软件的应用程序接下来要运行的代码;控制模块用于当获取的软件授权信息为软件的应用程序接下来要运行的代码时,控制软件正常运行,否则控制软件运行出现异常。优选的,系统还包括加解密模块,用于在所述授权信息写入模块将软件授权信息写入所述存储模块之前对所述软件授权信息进行加密,以及在所述授权信息获取模块获取到软件授权信息之后对所述软件授权信息进行解密。上述软件加密方法及系统,通过在BIOS或EFI的预留存储空间中写入软件授权信息,当运行软件时,从该预留存储空间获取软件授权信息并检测是否正确,正确时软件才正常运行,错误则软件运行出现异常。由于存放在BIOS或EFI中的核心代码是采用二进制形式存放且无法获知软件授权信息存放的起始地址,因此,软件盗用者,甚至专业的BIOS或 EFI从业人员都极难用反汇编工具来猜测或获取软件授权信息的原始内容,大大降低了软件被破解的概率,提高了软件加密的安全性。
图1为一个实施例中软件加密方法的流程图;图2为一个实施例中软件加密系统的结构示意图;图3为另一个实施例中软件加密系统的结构示意图。
具体实施方式如图1所示,一种软件加密方法,包括以下步骤步骤SlO中,将软件授权信息写入BIOS (Basic Input/Output System,基本输入/ 输出系统)或EFI (Extended Firmware hterface,可扩展固件接口,一种替代BIOS的升级方案)的预留存储空间中。其中,软件授权信息可以是预先设定的软件授权码或运行软件所需要执行的代码等。下面以BIOS为例进行说明,EFI是BIOS的升级方案,其实现方式与 BIOS的实现方式原理相同。BIOS的预留存储空间指的是在BIOS芯片中留出一部分空间, 这部分空间不会再给BIOS使用,该功能也称为BIOS的RomHole功能。将软件授权信息写入BIOS的预留存储空间可以利用BIOS提供的软件或库函数编写访问BIOS RomHole的工具(在D0S、WindoWS XP或Linux等操作系统下均可使用),通过该工具将软件授权信息写入BIOS的预留存储空间中。步骤SlO可以在正常开机后执行,也可以在硬件的制造过程中通过专用的工具写入。在一个实施例中,计算机系统上电后首先执行BIOS中的程序,完成对硬件的初始化,包括创建中断向量、设置寄存器、对一些外部设备进行检测、设置硬件参数等常规工作。 在开机的上电自检阶段(Power On SelfTest,即POST阶段)还需检测主板授权信息,若主板授权信息正确,则正常开机,否则系统当机。在一个优选的实施例中,可预先指定多个通用输入输出接口(General PurposeInput Output,简称“GPI0”),规定这些GPIO的初始高低电平由硬件强制拉出,在上电自检阶段,读取这些GPIO的高低电平,根据这些GPIO的高低电平来判断主板是否授权,实现了 BIOS与主板硬件的绑定,进一步提高了软件加密的安全性。步骤S20中,运行软件时,从所述预留存储空间获取软件授权信息。从BIOS的预留存储空间获取软件授权信息可通过SoftSMI (Soft System ManagemenWnterrupt,软件系统管理中断)、软中断或BIOS即插即用功能函数调用等来实现。SoftSMI是指通过向指定10(输入输出)端口写数据会引起 SMI (SystemManagement hterrupt,系统管理中断)的触发,使得中央处理器暂停当前运行的程序,切入到系统管理模式(System Management Mode,简称“SMM”),在SMM模式下处理相应代码,待处理完毕后恢复原来正在运行的程序。在一个实施例中,通过SoftSMI实现从BIOS的预留存储空间获取软件授权信息的过程具体是向SoftSMI的10端口发送写指令的命令(software SMI command),触发SMI中断,实现对BIOS芯片的读写功能,包括读数据、写数据和擦除数据等。触发SMI中断后使中央处理器切换至系统管理模式,在系统管理模式下对BIOS的预留存储空间进行读写,则能获取软件授权信息。通过SoftSMI实现对 BIOS指定区域的读写的方式比较安全,最难破译,且兼容性较强。软中断是指在BIOS中事先定义好一些预留的(未被使用的)中断号的具体功能, 来实现对BIOS的预留存储空间进行读写的功能。软中断方式实现比较灵便,可根据具体需
6要定制功能接口,提供更为方便的接口供用户使用。BIOS即插即用功能函数调用(BIOS PnP Function Call)是直接调用现有函数实现对BIOS指定区域的读写,其实现较简单。步骤S30中,通过软件的应用程序检测软件授权信息是否正确,若是,则进入步骤 S40,否则进入步骤S50。在一个实施例中,步骤S30的过程为将从BIOS的预留存储空间获取的软件授权码与软件中正确的授权码进行对比,若相同,则软件授权正确,否则错误。在一个优选的实施例中,在将软件授权信息写入BIOS的预留存储空间之前还可对软件授权信息进行加密,则从BIOS的预留存储空间获取到的是加密后的软件授权码,需进行解密后再与软件中的正确授权码进行对比。加密后的软件授权信息更难破解,进一步提高了软件加密的安全性。在另一个实施例中,步骤S30的具体过程为检测获取的软件授权信息是否为软件的应用程序接下来要运行的代码,若是,则软件正常运行,否则软件运行出现异常。该实施例中,检测软件授权信息是否为软件的应用程序运行所需的代码,若是,可将获取的代码拷贝到内存中的某一指定位置,运行获取的代码,使软件正常运行;若检测到的软件授权信息不是软件的应用程序运行所需的代码,则软件无法运行。在一个优选的实施例中,在将软件运行所需的代码写入BIOS的预留存储空间之前还可对这些代码进行加密,则从BIOS的预留存储空间获取到的是加密后的代码,需进行解密后检测这些代码是否为运行软件所需的代码。由于软件授权信息是存储在BIOS的预留存储空间中的,也就是说,只有在使用存储了软件运行所需的代码的BIOS的情况下,软件才能正常运行,这种方式很难破译,加密的安全性更高。步骤S40,软件正常运行。步骤S50,软件运行出现异常。异常状态可通过软件自行定义,如死机,应用程序提示错误信息或应用程序直接退出等。在一个实施例中,上述软件加密方法还包括对BIOS的预留存储空间中的软件授权信息进行更新的步骤。可通过将新的软件授权信息写入BIOS的预留存储空间来实现更新。软件正常运行的过程中,BIOS会等待下一次SMI中断请求,当对BIOS芯片中的软件授权信息进行更新时,可通过SMI中断请求暂停当前运行的软件程序,在更新完后,再继续运行软件,继续判断软件是否授权等。由于软件授权信息存储在BIOS芯片中,其核心代码采用二进制形式存放且无法获知软件授权信息存放的起始地址,因此,软件授权信息不易被破解,大大降低了软件被破解的概率,提高了软件加密的安全性。软件授权信息以代码形式存储在BIOS芯片中,系统则无需使用硬件加密狗,降低了成本。且由于BIOS芯片是固定焊接在主板上的,不易丢失, 也不会因为频繁的插拔而造成损坏,不会出现接触不良的现象,特别适用于对稳定性要求比较高的工控领域。如图2所示,一种软件加密系统,包括存储模块10、授权信息写入模块20、授权信息获取模块30、检测模块40和控制模块50。其中存储模块10为BIOS或EFI上的一段预留存储空间,这部分空间不会再给BIOS使用,用于存储软件授权信息,其中,软件授权信息可以是预先设定的软件授权码或运行软件所需要执行的代码等;授权信息写入模块20用于将软件授权信息写入存储模块10中;授权信息获取模块30用于在运行软件时,从存储模块10中获取软件授权信息;检测模块40用于检测授权信息获取模块30获取的软件授权信息是否正确;控制模块50则当检测模块 40检测到软件授权信息正确时,控制软件正常运行,否则控制软件运行出现异常。如图3所示,在另一个实施例中,软件加密系统除了包括上述存储模块10、授权信息写入模块20、授权信息获取模块30、检测模块40和控制模块50外,还包括主板授权检测模块60和加解密模块70。其中主板授权检测模块60用于在正常开机后的上电自检阶段检测主板授权信息,若主板授权信息正确则控制正常开机,否则系统当机。在一个优选的实施例中,主板授权检测模块60用于预先指定多个通用输入输出接口,规定该多个通用输入输出接口的初始高低电平由硬件强制拉出,在上电自检阶段,读取通用输入输出接口的高低电平,根据这些高低电平判断主板是否授权。在一个实施例中,授权信息获取模块30可通过SoftSMI (Soft SystemManagement Interrupt,软件系统管理中断)、软中断或BIOS即插即用功能函数调用来实现从存储模块 10中获取软件授权信息。其中,SoftSMI为授权信息获取模块30向SoftSMI的IO端口写数据,触发SMI中断,使中央处理器切换至系统管理模式,在系统管理模式下对BIOS的预留存储空间进行读写,获取软件授权信息。软中断是指在BIOS中事先定义好一些预留的(未被使用的)中断号的具体功能,授权信息获取模块30通过这些中断号来实现对BIOS的预留存储空间进行读写的功能。BIOS即插即用功能函数调用为授权信息获取模块30直接调用现有函数实现对BIOS指定区域的读写,其实现较简单。在一个实施例中,检测模块40用于将从存储模块10获取的软件授权码与软件中的正确授权码进行对比,若相同,则软件授权信息正确,控制模块50控制软件正常运行,否则控制软件运行出现异常。控制模块50控制软件运行出现异常可通过死机、应用程序提示错误信息或应用程序直接退出等来实现。加解密模块70用于在授权信息写入模块20将软件授权码写入存储模块10之前对软件授权码进行加密,以及在授权信息获取模块30获取到软件授权码之后对软件授权码进行解密。解密后的软件授权码再与软件中的正确授权码进行对比。在另一个实施例中,检测模块40还用于检测获取的软件授权信息是否为软件的应用程序接下来要运行的代码;控制模块50则用于当获取的软件授权信息为软件的应用程序接下来要运行的代码时,控制软件正常运行,否则控制软件运行出现异常。在一个优选的实施例中,加解密模块70还用于在授权信息写入模块20将运行软件所需的代码写入存储模块10之前对这些代码进行加密,以及在授权信息获取模块30获取到这些代码之后对代码进行解密。控制模块50控制软件运行出现异常可通过死机、应用程序提示错误信息或应用程序直接退出等来实现。在一个实施例中,授权信息写入模块20还用于更新存储模块10中的软件授权信息。具体是,授权信息写入模块20将新的软件授权信息写入BIOS的预留存储空间来实现更新。软件正常运行的过程中,BIOS会等待下一次SMI中断请求,当对BIOS芯片中的软件授权信息进行更新时,可通过SMI中断请求暂停当前运行的软件程序,在更新完后,再继续运行软件,继续判断软件是否授权等。应当说明的是,上述软件加密方法及系统在采用BIOS的计算机系统中适用,在采用EFI的计算机系统中也适用,其原理相同,在此不再赘述。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
权利要求
1.一种软件加密方法,包括以下步骤将软件授权信息写入BIOS或EFI的预留存储空间;运行软件时,从所述预留存储空间获取软件授权信息;通过软件的应用程序检测所述软件授权信息是否正确,若是,则软件正常运行,否则软件运行出现异常。
2.根据权利要求1所述的软件加密方法,其特征在于,在所述将软件授权信息写入所述预留存储空间的步骤之前还包括在上电自检阶段检测主板授权信息,若主板授权信息正确,则正常开机,否则系统当机。
3.根据权利要求2所述的软件加密方法,其特征在于,所述在上电自检阶段检测主板授权信息的步骤具体是预先指定多个通用输入输出接口,规定所述多个通用输入输出接口的初始高低电平由硬件强制拉出,在上电自检阶段,读取所述通用输入输出接口的高低电平,根据所述高低电平判断主板是否授权。
4.根据权利要求1所述的软件加密方法,其特征在于,所述从预留存储空间获取软件授权信息的步骤是通过SoftSMI或通过BIOS即插即用功能函数调用或通过软中断实现对所述预留存储空间的读取,获取软件授权信息;其中,通过SoftSMI实现对预留存储空间的读取,获取软件授权信息的步骤具体是通过软件的应用程序向SoftSMI的IO端口写数据,触发SMI中断,使中央处理器切换至系统管理模式,在系统管理模式下对所述预留存储空间进行读写,获取软件授权信息。
5.根据权利要求1所述的软件加密方法,其特征在于,所述通过软件的应用程序检测软件授权信息是否正确的步骤具体是将从所述预留存储空间获取的软件授权码与软件中的正确授权码进行对比,若相同,则软件授权信息正确,否则错误;或者所述通过软件的应用程序检测软件授权信息是否正确的步骤具体是检测获取的软件授权信息是否为软件的应用程序接下来要运行的代码,若是,则软件正常运行,否则软件运行出现异常。
6.根据权利要求5所述的软件加密方法,其特征在于,所述将软件授权信息写入预留存储空间的步骤之前还包括对所述软件授权信息进行加密的步骤;所述获取软件授权信息之后还包括对所述软件授权信息进行解密的步骤。
7.一种软件加密系统,其特征在于,包括存储模块,为BIOS或EFI上的一段预留存储空间,用于存储软件授权信息;授权信息写入模块,用于将软件授权信息写入所述存储模块;授权信息获取模块,用于在运行软件时,从存储模块中获取软件授权信息;检测模块,检测所述授权信息获取模块获取的软件授权信息是否正确;控制模块,当所述检测模块检测到软件授权信息正确时,控制软件正常运行,否则控制软件运行出现异常。
8.根据权利要求7所述的软件加密系统,其特征在于,还包括主板授权检测模块,用于在上电自检阶段检测主板授权信息,若主板授权信息正确,则控制正常开机,否则系统当机。
9.根据权利要求8所述的软件加密系统,其特征在于,所述主板授权检测模块进一步用于预先指定多个通用输入输出接口,规定所述多个通用输入输出接口的初始高低电平由硬件强制拉出,在上电自检阶段,读取所述通用输入输出接口的高低电平,根据所述高低电平判断主板是否授权。
10.根据权利要求7所述的软件加密系统,其特征在于,所述授权信息获取模块用于通过SoftSMI或通过BIOS即插即用功能函数调用或通过软中断实现对预留存储空间的读取, 获取软件授权信息;其中,所述授权信息获取模块进一步用于向SoftSMI的IO端口写数据, 触发SMI中断,使中央处理器切换至系统管理模式,在系统管理模式下对所述预留存储空间进行读写,获取软件授权信息。
11.根据权利要求7所述的软件加密系统,其特征在于,所述检测模块用于将获取的软件授权码与软件中的正确授权码进行对比,若相同,则软件授权信息正确,否则错误;或者所述检测模块用于检测获取的软件授权信息是否为软件的应用程序接下来要运行的代码;所述控制模块用于当获取的软件授权信息为软件的应用程序接下来要运行的代码时,控制软件正常运行,否则控制软件运行出现异常。
12.根据权利要求11所述的软件加密系统,其特征在于,还包括加解密模块,用于在所述授权信息写入模块将软件授权信息写入所述存储模块之前对所述软件授权信息进行加密,以及在所述授权信息获取模块获取到软件授权信息之后对所述软件授权信息进行解密。
全文摘要
本发明提供了一种软件加密方法及系统,所述方法包括以下步骤将软件授权信息写入BIOS或EFI的预留存储空间;运行软件时,从所述预留存储空间获取软件授权信息;通过软件的应用程序检测所述软件授权信息是否正确,若是,则软件正常运行,否则软件运行出现异常。采用上述提供的软件加密方法及系统,能使得软件不容易被破解,提高了软件加密的安全性。
文档编号G06F21/00GK102385671SQ201010272438
公开日2012年3月21日 申请日期2010年9月2日 优先权日2010年9月2日
发明者修惠文, 吴昌, 陈志列 申请人:研祥智能科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1