CN114564702A - 一种基于固件的离线软件许可控制方法及装置 - Google Patents
一种基于固件的离线软件许可控制方法及装置 Download PDFInfo
- Publication number
- CN114564702A CN114564702A CN202210454455.5A CN202210454455A CN114564702A CN 114564702 A CN114564702 A CN 114564702A CN 202210454455 A CN202210454455 A CN 202210454455A CN 114564702 A CN114564702 A CN 114564702A
- Authority
- CN
- China
- Prior art keywords
- software
- address
- bios
- host
- software license
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 238000013507 mapping Methods 0.000 claims description 56
- 230000006870 function Effects 0.000 claims description 29
- 230000005856 abnormality Effects 0.000 claims description 26
- 230000008569 process Effects 0.000 claims description 11
- 238000013500 data storage Methods 0.000 claims description 8
- 238000013524 data verification Methods 0.000 claims description 7
- 238000011900 installation process Methods 0.000 claims description 6
- 238000012545 processing Methods 0.000 claims description 6
- 230000002159 abnormal effect Effects 0.000 claims description 4
- 238000013475 authorization Methods 0.000 abstract description 2
- 238000005516 engineering process Methods 0.000 description 4
- 238000012795 verification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000003213 activating effect Effects 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012544 monitoring 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/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
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种基于固件的离线软件许可控制方法及装置,通过将软件许可数据加密后写入BIOS固件的方式有效避免了文件系统分析类软件对软件许可数据的获取,通过在软件许可数据中增加软件首次安装的系统时间可以有效防止用户修改系统时间绕过许可时间的限制,有效提高了离线状态软件的许可控制的可靠性,同时将软件许可数据写入固件中能够实现软件的一次授权对主板终身有效,从而便于满足用户对主机的升级需求。
Description
技术领域
本发明属于软件保护技术领域,具体涉及一种基于固件的离线软件许可控制方法及装置。
背景技术
软件保护技术是保护知识产权、防止技术泄露的重要手段之一。软件保护技术包含很多不同的分支,主要包括加密、防篡改、软件水印、软件多样化、反逆向技术、虚拟机、基于网络的保护和基于硬件的保护等,目前己经形成了许多基于网络的注册、激活和限时控制的方法。但是,对于软件应用的离线运行场景来说,由于软件应用所运行的物理设备无法接入互联网,所以导致现有的依靠网络进行注册、激活等方式显然不能适用于此类应用模式软件的保护。在这种情况下,对于离线使用的软件,很可能会出现使用者通过修改系统时间、拷贝软件、替换磁盘等方式来多机、长期使用软件等问题。现有的离线软件许可控制方法采用的是周期性的修改许可数据并将许可数据加密后写入磁盘的方式规避可能产生的对许可数据的篡改及对许可使用时间的修改等风险,然而,实际当中用户往往存在重装系统甚至升级硬盘的需求,但是当用户重装系统或升级硬盘后采用上述方式实现的软件许可控制就会失效,由此会为用户和软件许可方增加许多不必要的工作量,带来极大不便,很大程度上降低了用户体验。
发明内容
有鉴于此,本发明提供了一种基于固件的离线软件许可控制方法及装置,能够在离线状态下实现软件的许可控制。
本发明提供的一种基于固件的离线软件许可控制方法,包括以下步骤:
获取许可主机的主机标识信息作为许可主机标识信息,将经过编码的许可主机标识信息及许可使用时间写入待安装软件代码中,待安装软件代码经代码混淆后生成所述许可主机的软件安装包;
在许可主机上离线安装所述软件安装包,安装过程中由所述许可主机标识信息得到公私密钥对,将采用私钥加密后的软件许可数据写入许可主机的BIOS中;所述软件许可数据包括起始时间、累计时间、许可主机标识信息和许可使用时间;
使用软件时,软件根据主机标识信息判断当前主机是否为许可主机,如果不是,则终止软件在当前主机的使用;如果是,则从BIOS中读取软件许可数据,判断当前系统时间是否小于软件许可数据中的起始时间,若是则终止软件在当前主机的使用,若不是则判断累计时间是否小于许可使用时间,若不是则终止软件在当前主机的使用,若是则周期性更新软件许可数据中的累计时间。
进一步地,所述将采用私钥加密后的软件许可数据写入许可主机的BIOS中的过程包括以下步骤:
步骤2.1、获取BIOS起始物理地址和BIOS映像文件的长度,将BIOS的起始物理地址映射到虚拟地址空间得到BIOS虚拟地址空间,并将BIOS虚拟地址空间设置为可写;
步骤2.2、根据BIOS映像文件的长度,在BIOS映像文件中搜索PCI扩展ROM,获取PCI扩展ROM的起始地址和跳转地址;根据PCI扩展ROM的跳转地址,计算PCI扩展ROM中的空闲空间起始地址;
步骤2.3、将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中。
进一步地,所述根据PCI扩展ROM的跳转地址,计算PCI扩展ROM中的空闲空间起始地址的过程,包括以下步骤:
步骤3.1、以跳转地址作为PCI扩展ROM的第一基本块的第一起始地址,将第一起始地址之后的第一个非顺序执行指令作为第一结束指令,第一结束指令的地址与指令长度之和为第一基本块的结束地址,将第一结束指令对应的跳转地址作为指令跳转地址,将第一基本块标识为未分析,并将其添加到基本块列表中;
步骤3.2、在基本块列表中若存在以指令跳转地址为起始地址的基本块,则将该基本块标识为已分析,并以该基本块的结束指令对应的跳转地址作为指令跳转地址,执行步骤3.3;若不存在,则将以指令跳转地址为起始地址,以下一个结束指令的地址与指令长度之和为结束地址的新的基本块添加到基本块列表中,并将新的基本块标识为未分析,以新的基本块的结束指令对应的跳转地址作为指令跳转地址,执行步骤3.3;
步骤3.3、若基本块列表中存在未分析的基本块,则执行步骤3.2;否则,执行步骤3.4;
步骤3.4、基本块列表中基本块的最大结束地址为PCI扩展ROM的空闲空间起始地址。
进一步地,所述步骤2.3中在将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中之前,选择空闲空间起始地址与增加标识位的软件许可数据长度之和不大于64KB的PCI扩展ROM的空闲空间起始地址,再将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中。
进一步地,所述步骤2.3中将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中的方式为,选择多个具有空闲空间的PCI扩展ROM,分别将增加标识位的软件许可数据从PCI扩展ROM对应的空闲空间起始地址写入BIOS中。
进一步地,所述离线软件许可控制方法还包括:
当监测到映射函数被调用时,如果映射函数涉及的地址段全部或部分覆盖写入软件许可数据的地址段,则将映射函数返回值所指向的地址加入被监视地址列表中,并将映射函数返回值所指向的内存页的属性修改为禁止写入;如果映射函数所涉及的地址段不涉及写入软件许可数据的地址段,则不处理;
当监测到写内存异常时,若异常所涉及的地址段在被监视地址列表中,则清除异常,将异常涉及的地址段的属性修改为可写,退回到发生异常之前的地址,将采用私钥加密后的软件许可数据写入许可主机的BIOS中。
进一步地,所述离线软件许可控制方法还包括:
当监测到映射函数被调用时,如果映射函数涉及的地址段全部或部分覆盖写入软件许可数据的地址段,则将映射函数返回值所指向的地址加入被监视地址列表中,并将映射函数返回值所指向的内存页的属性修改为禁止写入;如果映射函数所涉及的地址段不涉及写入软件许可数据的地址段,则不处理;
当监测到写内存异常时,若异常所涉及的地址段在被监视地址列表中,则将采用私钥加密后的软件许可数据写入待更新的BIOS映射文件中,清除异常,将异常涉及的地址段的属性修改为可写,退回到发生异常之前的地址。
本发明提供的一种基于固件的离线软件许可控制装置,包括主机信息获取模块、软件安装包生成模块、软件许可数据生成模块、数据加解密模块、软件许可数据读写模块、关键数据存储模块及许可数据验证模块;
所述主机信息获取模块,用于获取主机标识信息,包括主机的CPU序列号和主板序列号;
所述软件安装包生成模块,用于将许可主机的经过编码的主机标识信息及许可使用时间写入软件代码,再将软件代码进行代码混淆后形成软件安装包;
所述软件许可数据生成模块,用于在软件安装包的安装过程中获取当前的系统时间作为起始时间、初始化累计时间,由起始时间、累计时间、主机标识信息和许可使用时间组成软件许可数据,所述累计时间表示软件实际使用的总时间;
所述数据加解密模块,用于根据许可主机的主机标识信息生成公私钥对,采用私钥加密软件许可数据,采用公钥解密数据;
所述软件许可数据读写模块,用于计算BIOS中PCI扩展ROM的空闲空间起始地址,并将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中;以及从BIOS中读取软件许可数据;
所述关键数据存储模块,用于存储许可主机的主机标识信息及许可使用时间;
所述许可数据验证模块,用于在软件的使用过程中根据主机标识信息判断当前主机是否为许可主机,如果不是,则终止软件在当前主机的使用;如果是,则请求所述软件许可数据读写模块获取软件许可数据,判断当前系统时间是否小于软件许可数据中的系统时间,若是则终止软件在当前主机的使用,若不是则判断累计时间是否小于许可使用时间,若不是则终止软件在当前主机的使用,若是则周期性更新软件许可数据中的累计时间,并将更新后的软件许可数据发送至所述软件许可数据读写模块。
进一步地,所述软件许可数据读写模块将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中的方式为:
获取BIOS起始物理地址和BIOS映像文件的长度,将BIOS的起始物理地址映射到虚拟地址空间得到BIOS虚拟地址空间,并将BIOS虚拟地址空间设置为可写;根据BIOS映像文件的长度,在BIOS映像文件中搜索PCI扩展ROM,获取PCI扩展ROM的跳转地址;根据PCI扩展ROM的跳转地址,计算PCI扩展ROM中的空闲空间起始地址;将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中。
进一步地,在所述将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中之前,选择空闲空间起始地址与增加标识位的软件许可数据长度之和不大于64KB的PCI扩展ROM的空闲空间起始地址,再将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中。
有益效果:
1、本发明通过将软件许可数据加密后写入BIOS固件的方式有效避免了文件系统分析类软件对软件许可数据的获取,通过在软件许可数据中增加软件首次安装的系统时间可以有效防止用户修改系统时间绕过许可时间的限制,有效提高了离线状态软件的许可控制的可靠性,同时将软件许可数据写入固件中能够实现软件的一次授权对主板终身有效,从而便于满足用户对主机的升级需求。
2、本发明通过在BIOS中保存多个互为备份的软件许可数据,在对软件许可软件进行验证时只有在多个软件许可数据均相同的情况下才能认定软件许可数据为有效,从而进一步提高了许可数据被篡改的难度,提高了许可数据的可靠性。
附图说明
图1为本发明提供的一种基于固件的离线软件许可控制方法的流程图。
图2为本发明提供的一种基于固件的离线软件许可控制装置的结构图。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
本发明提供的一种基于固件的离线软件许可控制方法及装置,针对的软件生产者允许软件用户在被许可的主机上离线运行其开发的软件,且软件生产者能够获取许可主机的主机标识信息的情况。一般情况下,软件生产者仅允许软件用户在特定主机上运行软件,该特定主机即为许可主机。
本发明提供的一种基于固件的离线软件许可控制方法,流程如图1所示,具体包括以下步骤:
步骤1、软件生产者获取许可主机的主机标识信息作为许可主机标识信息,将许可主机标识信息及许可使用时间采用MD5信息摘要算法编码后写入待安装软件中,再将软件进行代码混淆后形成针对该许可主机的软件安装包。
本发明中的主机标识信息包括CPU序列号和主板序列号等计算机主机的指纹信息。软件生产者预先获取并保存许可主机的CPU序列号,保存的数据格式如:‘09C1B27D09C1B27E09C1B27F’,以及许可主机的主板序列号,保存的数据格式如:‘00342-35723-75321-AAOEM’。对于编码后的CPU序列号和主板序列号,可分别截取前16位保存。
步骤2、软件用户在许可主机上离线安装步骤1生成的软件安装包,安装过程包括以下步骤:
步骤2.1、软件根据记录的许可主机标识信息计算得到公私密钥对。
本发明采用MD5信息摘要算法对许可主机标识信息中的CPU序列号和主板序列号分别进行编码后,截取前16位,得到公私密钥对。
步骤2.2、获取当前的系统时间作为起始时间,将起始时间同步到累计时间中,其中,起始时间表示许可主机实际安装软件的系统时间,累计时间(单位为秒)表示软件实际使用的总时长。由起始时间、累计时间、许可主机标识信息和许可使用时间组成软件许可数据。
步骤2.3、采用步骤2.1生成的私钥加密步骤2.2生成的软件许可数据形成软件许可数据。
加密过程可采用现有的对称加密算法处理,本发明优选采用AES128对称加密算法实现对软件许可数据的加密。
步骤2.4、查找BIOS中的空闲空间,将软件许可数据保存在BIOS中。具体包括以下步骤:
步骤2.41、获取BIOS起始物理地址和BIOS映像文件的长度。
具体来说,采用SMBIOS标准接口即可获取BIOS的起始物理地址和BIOS映像文件的长度。SMBIOS(System Management BIOS)为系统管理BIOS,是主板或系统制造厂商以标准格式显示产品信息所遵循的统一规范,每个主板厂商或OEM厂商对其所生产的电脑在出厂时会根据SMBIOS标准将BIOS信息、系统信息、处理器信息、设备信息等信息写入到BIOS中。
步骤2.42、将BIOS的起始物理地址映射到进程的虚拟地址空间得到BIOS虚拟地址空间,并将BIOS虚拟地址空间设置为可写。
在内核模式下将BIOS对应的起始物理地址映射到用户态的虚拟地址,由此运行在用户态的软件才能够实现对BIOS的访问。例如,在Windows下可采用MmMapIoSpace函数、在Linux下可采用ioremap函数实现对BIOS物理地址的映射。
步骤2.43、根据BIOS映像文件的长度,在BIOS映像文件中遍历搜索所有PCI扩展ROM,并记录PCI扩展ROM的起始地址和跳转地址。
外设组件互连标准PCI(Peripheral Component Interconnect)提供了支持每个PCI标准设备具有扩展ROM的机制,系统通过执行扩展ROM中存放的代码来完成与设备有关的初始化,同时也有可能完成系统的引导功能。通常来说,PCI扩展ROM的大小为64KB;PCI扩展ROM均具有ROM标识“55AA”,ROM标识代表着PCI扩展ROM的起始地址;PCI扩展ROM的属性“EB”为跳转指令,其后的参数即为跳转指令的偏移量,跳转地址为跳转指令的地址与偏移量之和。
进一步地,为了提高在BIOS映像文件中搜索PCI扩展ROM的效率,采用以下方式进行搜索:从BIOS映像文件的起始地址开始搜索ROM标识及属性“EB”,由此即可获取第一个PCI扩展ROM的起始地址和跳转地址;以第一个PCI扩展ROM的起始地址之上增加64KB作为新的起始位置,搜索下一个PCI扩展ROM,以此类推直到新的搜索起始地址大于或等于BIOS映像文件的长度与BIOS映像文件起始地址之和为止。
步骤2.44、查找步骤2.43得到的每个PCI扩展ROM中的空闲空间起始地址。查找PCI扩展ROM的空闲空间起始地址的方式包括以下步骤:
步骤2.44.1、以PCI扩展ROM的跳转地址作为PCI扩展ROM的第一基本块的起始地址,记为第一起始地址;从第一起始地址开始对其后的指令进行反编译,将第一个非顺序执行指令作为第一结束指令,将第一结束指令的地址与指令长度之和作为第一基本块的结束地址,将第一结束指令对应的跳转地址作为指令跳转地址,将第一基本块标识为未分析,并将其加入基本块列表中。本发明中,非顺序执行指令包括但不限于分支、条件分支或Call指令。
现有技术中,基本块是指仅包含一个入口和一个出口的指令或代码块,基本块的典型特点是:只要基本块中第一条指令或语句被执行了,那么基本块内所有指令或语句都会按照顺序仅执行一次。基本块可以用源代码、汇编、指令等表示。
例如,假设PCI扩展ROM的起始地址表示为PCIStartAddress,跳转地址表示为PCIJumpTargetAddress,在PCI扩展ROM中选择以PCIJumpTargetAddress作为起始地址的基本块记为BB-jumpTargetAddress,将BB-jumpTargetAddress加入基本块列表BasicBlockList中,并将其标识为未分析。
步骤2.44.2、在基本块列表中若存在以指令跳转地址为起始地址的基本块,则将该基本块标识为已分析,并以该基本块的结束指令对应的跳转地址作为指令跳转地址,执行步骤2.44.3;若不存在,则将以指令跳转地址为起始地址,以下一个结束指令的地址与指令长度之和为结束地址的新的基本块加入基本块列表中,并将新的基本块标识为未分析,以新的基本块的结束指令对应的跳转地址作为指令跳转地址,执行步骤2.44.3。
步骤2.44.3、若基本块列表中存在未分析的基本块,则执行步骤2.44.2;否则,执行步骤2.44.4。
步骤2.44.4、获取基本块列表中基本块的最大结束地址,该最大结束地址即为PCI扩展ROM的空闲空间起始地址。
步骤2.45、将软件许可数据的首尾增加标识位后,从步骤2.44得到的PCI扩展ROM中的空闲空间起始地址开始写入BIOS中。
进一步地,为了保证软件许可数据写入的完整性,在步骤2.45中,还需要判断PCI扩展ROM中的空闲空间起始地址与增加标识位的软件许可数据长度之和是否大于64KB,选择空闲空间起始地址与软件许可数据长度之和不大于64KB的PCI扩展ROM写入软件许可数据。
进一步地,为了提高软件许可数据的可靠性,本发明在BIOS中选择多个具有空闲空间的PCI扩展ROM,将软件许可数据分别存储在多个PCI扩展ROM中,在对软件进行验证时,对保存在不同PCI扩展ROM中的软件许可数据进行相互校验,若校验通过则说明数据有效,否则说明软件许可数据被篡改,后续验证均失效。
此外,一般情况下用户在使用系统的过程中会有固件更新等需求,当更新固件时就会对BIOS中保存的BIOS映像文件进行修改,由此就可能导致软件许可数据被破坏,从而影响用户对许可软件的后续使用,因此,为了进一步保证软件许可数据的可靠性,本发明还提供了防止软件许可数据被误修改的方式,具体过程如下:
在内核态监测映射函数的调用,当映射函数被调用时,如果映射函数所涉及的地址段全部或部分覆盖了步骤2.45中写入软件许可数据的地址段,则将映射函数返回值所指向的地址加入被监视地址列表中,并将返回值所指向的内存页的属性修改为禁止写入;如果映射函数所涉及的地址段不涉及步骤2.45中写入软件许可数据的地址段,则不处理,继续监测映射函数;
当在内核态监测到写内存异常时,若异常所涉及的地址段在被监视地址列表中,则清除异常,将异常涉及的地址段的属性修改为可写,退回到发生异常之前的地址,执行步骤2.43、步骤2.44及步骤2.45,实现将软件许可数据保存到新的BIOS中。
然而,上述操作可能会产生对内存的写冲突,因此,本发明还提供了防止内存写冲突的方式:在退回到发生异常之前的地址后,待写操作执行完毕后或等待设定时长后,执行步骤2.43、步骤2.44及步骤2.45,实现将软件许可数据保存到新的BIOS中。其中,设定时长可为30秒钟。
此外,为了防止内存的写冲突还可采用以下方式:当监测到系统的写内存异常时,若异常涉及的地址段在被监视地址列表中,则执行步骤2.43、步骤2.44及步骤2.45将软件许可数据保存在待更新的BIOS映射文件中,清除异常后,将异常涉及的地址段的属性修改为可写,退回到发生异常之前的地址,使当前写内存操作正常执行。
进一步地,为了提高计时精度,同时加大篡改系统时间的难度,本发明采用从CMOS中读取时间的方式获取系统时间,计算累计使用时间。
步骤3、在软件用户使用软件时,分析校验软件用户的过程包括以下步骤:
步骤3.1、获取当前主机的主机标识信息包括CPU序列号和主板序列号,与软件中保存的许可主机标识信息进行比对,如果不符合,则认为当前主机为非法主机,将终止软件在当前主机的使用;否则,执行步骤3.2。
步骤3.2、将BIOS的起始物理地址映射到虚拟地址空间,读取BIOS获取软件许可数据。
其中,读取BIOS获取软件许可数据的方式,为通过查找软件许可数据首尾的标识位获取对软件许可数据。
当BIOS中保存了多份软件许可数据时,读取BIOS获取多个软件许可数据,并将多个软件许可数据进行比对验证,若多个软件许可数据均一致则验证成功说明软件许可数据有效,采用步骤1生成的公钥解密软件许可数据得到软件许可数据;若验证失败则说明软件许可数据错误,将终止软件在当前主机的使用。
步骤3.3、获取用户主机当前的系统时间,若系统时间小于步骤3.2获取的软件许可数据中的起始时间,则认为软件用户修改了系统时间,将终止软件在当前主机的使用;否则,判断累计时间与许可使用时间的关系,如果小于则执行步骤3.4,如果不小于,则认为软件用户已到达使用期限,将终止软件在当前主机的使用。
此外,累计时间还可以采用在起始时间上累加实际时间的方式计算得到,此时,步骤3.4中若当前的系统时间小于累计时间,则认为软件用户修改了系统时间,将终止软件在当前主机的使用。
步骤3.4、等待设定的时间间隔后,更新软件许可数据中的累计时间,并将更新后的软件许可数据加密形成更新后的软件许可数据,再采用更新的软件许可数据替换BIOS中原有的软件许可数据。
为了进一步提高软件许可数据的安全性,上述时间间隔可以设置为较短的时间,例如,设置为60秒。
步骤3.5、等待设定的时间间隔后,若软件未停止执行,则执行步骤3.2;否则,退出软件的执行过程,同时停止将BIOS的起始物理地址映射到虚拟地址空间。
本发明提供的一种基于固件的离线软件许可控制装置,结构如图2所示,包括主机信息获取模块、软件安装包生成模块、软件许可数据生成模块、数据加解密模块、软件许可数据读写模块、关键数据存储模块及许可数据验证模块。
其中,主机信息获取模块,用于获取软件用户待安装或运行软件主机的主机标识信息,包括主机的CPU序列号和主板序列号。
软件安装包生成模块,用于将许可主机的主机标识信息及许可使用时间写入软件,再将软件的源代码进行代码混淆后形成针对许可主机的软件安装包。
软件许可数据生成模块,用于在软件安装包的安装过程中获取当前的系统时间作为起始时间,初始化累计时间,其中,起始时间表示软件用户安装软件的时间,累计时间(单位为秒)表示软件实际使用的总时间。由起始时间、累计时间、主机标识信息和许可使用时间组成软件许可数据。
数据加解密模块,用于根据许可主机的主机标识信息生成加密所需的公私钥对,采用私钥加密软件许可数据生成模块生成的软件许可数据,形成软件许可数据加密文件;采用公钥解密软件许可数据加密文件为软件许可数据。
软件许可数据读写模块,用于根据BIOS的起始物理地址和BIOS映像文件的长度获取BIOS中PCI扩展ROM的空闲空间起始地址,并将软件许可数据的首尾增加标识位后从空闲空间起始地址写入BIOS中;以及从BIOS中读取软件许可数据。
为了进一步提高软件许可数据存储的可靠性,本发明在BIOS中选择多个具有空闲空间的PCI扩展ROM,将软件许可数据分别存储在多个PCI扩展ROM中。
关键数据存储模块,用于存储许可主机的主机标识信息及许可使用时间。
许可数据验证模块,用于验证当前使用软件的主机是否为合法主机。
许可数据验证模块的验证方式如下:
首先获取当前主机的主机标识信息包括CPU序列号和主板序列号,与关键数据存储模块中保存的主机标识信息进行比对,如果不符合,则认为当前主机为非法主机,终止软件在当前主机的使用;如果符合,则将BIOS的起始物理地址映射到虚拟地址空间,读取BIOS获取软件许可数据,获取用户主机当前的系统时间,若系统时间小于软件许可数据中记录的起始时间,则认为软件用户修改了系统时间,终止软件在当前主机的使用;否则,若累计时间不小于许可使用时间,则认为软件用户已到达使用期限,终止软件在当前主机的使用;若累计时间小于许可使用时间则循环等待设定的时间间隔后,更新软件许可数据中的累计时间,并将更新后的软件许可数据加密形成更新后的软件许可数据,将其发送至软件许可数据读写模块,直到软件停止执行,停止将BIOS的起始物理地址映射到虚拟地址空间。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于固件的离线软件许可控制方法,其特征在于,包括以下步骤:
获取许可主机的主机标识信息作为许可主机标识信息,将经过编码的许可主机标识信息及许可使用时间写入待安装软件代码中,待安装软件代码经代码混淆后生成所述许可主机的软件安装包;
在许可主机上离线安装所述软件安装包,安装过程中由所述许可主机标识信息得到公私密钥对,将采用私钥加密后的软件许可数据写入许可主机的BIOS中;所述软件许可数据包括起始时间、累计时间、许可主机标识信息和许可使用时间;
使用软件时,软件根据主机标识信息判断当前主机是否为许可主机,如果不是,则终止软件在当前主机的使用;如果是,则从BIOS中读取软件许可数据,判断当前系统时间是否小于软件许可数据中的起始时间,若是则终止软件在当前主机的使用,若不是则判断累计时间是否小于许可使用时间,若不是则终止软件在当前主机的使用,若是则周期性更新软件许可数据中的累计时间。
2.根据权利要求1所述的离线软件许可控制方法,其特征在于,所述将采用私钥加密后的软件许可数据写入许可主机的BIOS中的过程包括以下步骤:
步骤2.1、获取BIOS起始物理地址和BIOS映像文件的长度,将BIOS的起始物理地址映射到虚拟地址空间得到BIOS虚拟地址空间,并将BIOS虚拟地址空间设置为可写;
步骤2.2、根据BIOS映像文件的长度,在BIOS映像文件中搜索PCI扩展ROM,获取PCI扩展ROM的起始地址和跳转地址;根据PCI扩展ROM的跳转地址,计算PCI扩展ROM中的空闲空间起始地址;
步骤2.3、将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中。
3.根据权利要求2所述的离线软件许可控制方法,其特征在于,所述根据PCI扩展ROM的跳转地址,计算PCI扩展ROM中的空闲空间起始地址的过程,包括以下步骤:
步骤3.1、以跳转地址作为PCI扩展ROM的第一基本块的第一起始地址,将第一起始地址之后的第一个非顺序执行指令作为第一结束指令,第一结束指令的地址与指令长度之和为第一基本块的结束地址,将第一结束指令对应的跳转地址作为指令跳转地址,将第一基本块标识为未分析,并将其添加到基本块列表中;
步骤3.2、在基本块列表中若存在以指令跳转地址为起始地址的基本块,则将该基本块标识为已分析,并以该基本块的结束指令对应的跳转地址作为指令跳转地址,执行步骤3.3;若不存在,则将以指令跳转地址为起始地址,以下一个结束指令的地址与指令长度之和为结束地址的新的基本块添加到基本块列表中,并将新的基本块标识为未分析,以新的基本块的结束指令对应的跳转地址作为指令跳转地址,执行步骤3.3;
步骤3.3、若基本块列表中存在未分析的基本块,则执行步骤3.2;否则,执行步骤3.4;
步骤3.4、基本块列表中基本块的最大结束地址为PCI扩展ROM的空闲空间起始地址。
4.根据权利要求2所述的离线软件许可控制方法,其特征在于,所述步骤2.3中在将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中之前,选择空闲空间起始地址与增加标识位的软件许可数据长度之和不大于64KB的PCI扩展ROM的空闲空间起始地址,再将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中。
5.根据权利要求2所述的离线软件许可控制方法,其特征在于,所述步骤2.3中将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中的方式为,选择多个具有空闲空间的PCI扩展ROM,分别将增加标识位的软件许可数据从PCI扩展ROM对应的空闲空间起始地址写入BIOS中。
6.根据权利要求1所述的离线软件许可控制方法,其特征在于,所述离线软件许可控制方法还包括:
当监测到映射函数被调用时,如果映射函数涉及的地址段全部或部分覆盖写入软件许可数据的地址段,则将映射函数返回值所指向的地址加入被监视地址列表中,并将映射函数返回值所指向的内存页的属性修改为禁止写入;如果映射函数所涉及的地址段不涉及写入软件许可数据的地址段,则不处理;
当监测到写内存异常时,若异常所涉及的地址段在被监视地址列表中,则清除异常,将异常涉及的地址段的属性修改为可写,退回到发生异常之前的地址,将采用私钥加密后的软件许可数据写入许可主机的BIOS中。
7.根据权利要求1所述的离线软件许可控制方法,其特征在于,所述离线软件许可控制方法还包括:
当监测到映射函数被调用时,如果映射函数涉及的地址段全部或部分覆盖写入软件许可数据的地址段,则将映射函数返回值所指向的地址加入被监视地址列表中,并将映射函数返回值所指向的内存页的属性修改为禁止写入;如果映射函数所涉及的地址段不涉及写入软件许可数据的地址段,则不处理;
当监测到写内存异常时,若异常所涉及的地址段在被监视地址列表中,则将采用私钥加密后的软件许可数据写入待更新的BIOS映射文件中,清除异常,将异常涉及的地址段的属性修改为可写,退回到发生异常之前的地址。
8.一种基于固件的离线软件许可控制装置,其特征在于,包括主机信息获取模块、软件安装包生成模块、软件许可数据生成模块、数据加解密模块、软件许可数据读写模块、关键数据存储模块及许可数据验证模块;
所述主机信息获取模块,用于获取主机标识信息,包括主机的CPU序列号和主板序列号;
所述软件安装包生成模块,用于将许可主机的经过编码的主机标识信息及许可使用时间写入软件代码,再将软件代码进行代码混淆后形成软件安装包;
所述软件许可数据生成模块,用于在软件安装包的安装过程中获取当前的系统时间作为起始时间、初始化累计时间,由起始时间、累计时间、主机标识信息和许可使用时间组成软件许可数据,所述累计时间表示软件实际使用的总时间;
所述数据加解密模块,用于根据许可主机的主机标识信息生成公私钥对,采用私钥加密软件许可数据,采用公钥解密数据;
所述软件许可数据读写模块,用于计算BIOS中PCI扩展ROM的空闲空间起始地址,并将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中;以及从BIOS中读取软件许可数据;
所述关键数据存储模块,用于存储许可主机的主机标识信息及许可使用时间;
所述许可数据验证模块,用于在软件的使用过程中根据主机标识信息判断当前主机是否为许可主机,如果不是,则终止软件在当前主机的使用;如果是,则请求所述软件许可数据读写模块获取软件许可数据,判断当前系统时间是否小于软件许可数据中的系统时间,若是则终止软件在当前主机的使用,若不是则判断累计时间是否小于许可使用时间,若不是则终止软件在当前主机的使用,若是则周期性更新软件许可数据中的累计时间,并将更新后的软件许可数据发送至所述软件许可数据读写模块。
9.根据权利要求8所述的离线软件许可控制装置,其特征在于,所述软件许可数据读写模块将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中的方式为:
获取BIOS起始物理地址和BIOS映像文件的长度,将BIOS的起始物理地址映射到虚拟地址空间得到BIOS虚拟地址空间,并将BIOS虚拟地址空间设置为可写;根据BIOS映像文件的长度,在BIOS映像文件中搜索PCI扩展ROM,获取PCI扩展ROM的跳转地址;根据PCI扩展ROM的跳转地址,计算PCI扩展ROM中的空闲空间起始地址;将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中。
10.根据权利要求9所述的离线软件许可控制装置,其特征在于,在所述将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中之前,选择空闲空间起始地址与增加标识位的软件许可数据长度之和不大于64KB的PCI扩展ROM的空闲空间起始地址,再将增加标识位的软件许可数据从空闲空间起始地址写入BIOS中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210454455.5A CN114564702A (zh) | 2022-04-24 | 2022-04-24 | 一种基于固件的离线软件许可控制方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210454455.5A CN114564702A (zh) | 2022-04-24 | 2022-04-24 | 一种基于固件的离线软件许可控制方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114564702A true CN114564702A (zh) | 2022-05-31 |
Family
ID=81720856
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210454455.5A Pending CN114564702A (zh) | 2022-04-24 | 2022-04-24 | 一种基于固件的离线软件许可控制方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114564702A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116010904A (zh) * | 2022-12-26 | 2023-04-25 | 北京航天智造科技发展有限公司 | 一种离线授权方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090187699A1 (en) * | 2008-01-23 | 2009-07-23 | Phison Electronics Corp. | Non-volatile memory storage system and method for reading an expansion read only memory image thereof |
CN102385671A (zh) * | 2010-09-02 | 2012-03-21 | 研祥智能科技股份有限公司 | 软件加密方法及系统 |
CN114117364A (zh) * | 2022-01-24 | 2022-03-01 | 北京麟卓信息科技有限公司 | 一种离线的软件许可控制方法及系统 |
-
2022
- 2022-04-24 CN CN202210454455.5A patent/CN114564702A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090187699A1 (en) * | 2008-01-23 | 2009-07-23 | Phison Electronics Corp. | Non-volatile memory storage system and method for reading an expansion read only memory image thereof |
CN102385671A (zh) * | 2010-09-02 | 2012-03-21 | 研祥智能科技股份有限公司 | 软件加密方法及系统 |
CN114117364A (zh) * | 2022-01-24 | 2022-03-01 | 北京麟卓信息科技有限公司 | 一种离线的软件许可控制方法及系统 |
Non-Patent Citations (1)
Title |
---|
鲁青远等: "基于扩展ROM的信任根设备设计与实现", 《计算机工程与设计》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116010904A (zh) * | 2022-12-26 | 2023-04-25 | 北京航天智造科技发展有限公司 | 一种离线授权方法及系统 |
CN116010904B (zh) * | 2022-12-26 | 2023-09-15 | 北京航天智造科技发展有限公司 | 一种离线授权方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1594030B1 (en) | Program update method and server | |
JP6595822B2 (ja) | 情報処理装置及びその制御方法 | |
JP5565040B2 (ja) | 記憶装置、データ処理装置、登録方法、及びコンピュータプログラム | |
US6006190A (en) | Computer implemented method and a computer system for enforcing software licenses | |
JP5175856B2 (ja) | セキュアデバイス・システムにおけるフラッシュメモリ・ブロックの保護と方法 | |
US8341423B2 (en) | Machine, machine management apparatus, system, and method, and recording medium | |
JP6054908B2 (ja) | 変数セットを修復する方法、コンピュータ・プログラムおよびコンピュータ | |
US8966646B2 (en) | Software license management | |
US7929706B2 (en) | Encryption key restoring method, information processing apparatus, and encryption key restoring program | |
US8566949B2 (en) | Software component, software component management method, and software component management system | |
JP5346608B2 (ja) | 情報処理装置およびファイル検証システム | |
US7751584B2 (en) | Method to provide transparent information in binary drivers via steganographic techniques | |
EA012921B1 (ru) | Способ и устройство защиты программного обеспечения от несанкционированного использования | |
US20110271350A1 (en) | method for protecting software | |
US8751817B2 (en) | Data processing apparatus and validity verification method | |
US20080263542A1 (en) | Software-Firmware Transfer System | |
US20040003265A1 (en) | Secure method for BIOS flash data update | |
US20050193195A1 (en) | Method and system for protecting data of storage unit | |
US8656182B2 (en) | Security mechanism for developmental operating systems | |
CN114564702A (zh) | 一种基于固件的离线软件许可控制方法及装置 | |
de Assumpção et al. | Forensic method for decrypting TPM-protected BitLocker volumes using Intel DCI | |
CN114117364B (zh) | 一种离线的软件许可控制方法及系统 | |
CN102855421A (zh) | 防止bios程序被盗用的方法、基本输入输出系统及计算装置 | |
US8667604B2 (en) | Protection of software on portable medium | |
JP7084160B2 (ja) | 起動制御装置、起動制御システム、起動制御方法、及び、起動制御プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20220531 |