一种基于编译技术的Licence管理系统
文献发布时间:2023-06-19 10:02:03
技术领域
本发明涉及软件许可证(Licence)管理技术领域,具体说是一种基于编译技术的Licence管理系统。
背景技术
软件开发商为适应不同用户的功能需求和部分客户的个性化需求,售卖软件时通常将软件打包为不同功能组合的版本。软件开发商针对软件的不同销售阶段或销售模式,对软件的使用时间也有不同的限制,例如:软件试用,即为促进意向客户的签单购买,软件开发商通常推出试用版给予客户一定的试用期限;又例如:软件租赁,即软件开发商采取租赁的方式,按月、季或年的时间维度向客户收费,软件到期即止。
针对上述情况,软件开发商需要采取灵活、安全、易于管理和维护的软件保护策略,以满足软件限时/限版本/绑定设备的销售需求的同时,防止软件未经授权被拷贝、篡改或针对软件的逆向工程。
现有的软件保护技术主要可分为硬加密和软加密两种。
硬加密技术主要是指硬件加密狗或加密锁,仅适用于一次性永久授权,无法实现软件试用和软件租赁,且硬件的存在带来额外的生产、初始化、物流、安装和维护成本,难以进行升级、跟踪及售后管理。硬加密技术还存在通过硬件复制被破解的风险,一旦被破解,软件就可以被大批量复制,造成难以补救的损失,从而失去软件保护的意义。
软加密技术通常采用电子许可证(即Licence)的方式,在获得安装软件的机器的硬件特征后,以某种机制将授权与该机器的硬件特征绑定后,形成电子许可证并发给客户使用,可满足互联网时代软件的电子化发行及按需销售。电子许可证技术典型的方法是使用非对称加密算法的私钥对许可证文件进行签名,而非对称加密算法的公钥嵌在软件代码中,在整体架构的安全性和安全效果上相比硬加密具有更多的优势,但难以阻止黑客使用逆向工程,分析或跟踪找到判断代码处,通过暴力破解的方法进行破解。
因此,单纯的硬件加密锁或电子许可证产品,从软件保护的角度到软件授权的角度,已经无法同时满足较高的安全强度、较低的发行成本以及易于管理和维护的要求。
公开于该背景技术部分的信息仅仅旨在加深对本发明的总体背景技术的理解,而不应当被视为承认或以任何形式暗示该信息构成已为本领域技术人员所公知的现有技术。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种基于编译技术的Licence管理系统,解决当前软件保护技术在软件的电子化发行中无法兼顾较高的安全强度、较低的发行成本、以及易于管理和维护的难题。
为达到以上目的,本发明采取的技术方案是:
本申请提供了一种基于编译技术的Licence管理系统,该系统包括:
在创建软件版本时,通过脚本编译预设的Golang程序生成C动态链接库,再通过编译实现C动态链接库到Java语言层的适配,得到授权验证jar包,所述授权验证jar包中包含C动态链接库,
在发布软件版本时,通过配置工程文件,将授权验证jar包嵌入源程序中,并通过代码混淆技术完成源程序代码混淆,编译源程序得到对应版本的软件包。
其中,根据软件的产品信息和版本信息生成包含C动态链接库的授权验证jar包;
授权验证jar包嵌入源程序代码中,在源代码中需要进行授权验证的方法处,引入注解标记,编译源程序代码得到软件产品的过程中,根据注解标记对该方法进行源程序代码混淆,完成源程序代码的加固,得到对应版本的软件包。
在上述技术方案的基础上,系统收到软件授权申请人的申请信息和用户端的计算机硬件特征信息后,向软件产品的负责人发送审核请求,
根据审核结果,编译审核通过的申请信息和计算机硬件特征信息,得到Licence文件,
系统通知软件授权申请人下载Licence文件并作为授权文件保存于用户端。
其中,软件包的Licence文件根据软件产品的负责人对软件授权申请人的申请信息和用户端的计算机硬件特征信息的审核生成,将审核通过的申请信息和计算机硬件特征信息,加密后存储于Licence文件。
在上述技术方案的基础上,在用户端启动软件产品时,加载C动态链接库,读取作为授权文件保存于用户端中的Licence文件,
基于C动态链接库编译生成授权验证程序,授权验证程序对Licence文件中的计算机硬件特征信息及用户端当前实时获取的本机硬件特征信息进行比对验证,验证成功则软件启动成功,否则软件启动失败。
在上述技术方案的基础上,通过向系统提交软件的产品信息和版本信息,触发创建软件版本,
所述软件的产品信息和版本信息,通过脚本转存(写入)于.java文件中,
通过脚本调用(运用)非对称加密算法,生成与软件版本一一对应的密钥对文件,
通过脚本生成C动态链接库时,基于密钥对文件进行加密,密钥对文件用于在通过脚本生成C动态链接库时进行加密。
更进一步,通过管理平台中“管理我的产品”和“新增版本”功能,提交软件的产品信息和版本信息。
更进一步,非对称加密算法采用SHA256 RSA算法,生成密钥对文件rsa/rsa.pub。
更进一步,通过脚本编译预设的Golang程序读取密钥对文件生成C动态链接库,所述Golang程序定义了读取授权文件信息和验证授权文件信息两个方法。再通过编译预设的JNA程序实现C动态链接库到Java语言层的适配,得到授权验证jar包。
更进一步,通过脚本编译预设的JNA程序实现C动态链接库到Java语言层的适配,得到授权验证jar包。
更进一步,授权验证jar包生成后,上传至maven仓库中。
在上述技术方案的基础上,发布软件版本前,软件研发人员需修改软件的工程配置文件及源代码,
在工程配置文件中,通过添加库repository配置,指定引入授权验证jar包的路径,
在工程配置文件中,通过添加依赖dependency配置,指定引入自定义注解依赖包的路径,
在工程配置文件中,通过添加插件plugin配置,指定引入系统提供的自定义代码混淆插件的路径;
修改源代码,在需要进行授权验证的方法处添加@Licence注解,作为对该方法的标记。
更进一步,编译源程序得到软件产品的过程中,根据@Licence注解确定需要进行授权验证的方法,对该方法进行源程序代码混淆。
在上述技术方案的基础上,软件授权申请人的申请信息中至少包括:软件版本、使用时间。
在上述技术方案的基础上,在用户端,运行系统提供的计算机硬件特征信息采集工具,收集以下信息并生成计算机硬件特征信息文件:CPU信息、物理磁盘序列号及物理网卡信息。
在上述技术方案的基础上,系统通过预设的AES加密算法将计算机硬件特征信息文件加密,得到一段无序字符串,
系统读取密钥对文件,并通过密钥对文件和预设的RSA加密算法,将该段无序字符串加密,作为Licence文件。即:通过预设的AES加密算法将计算机硬件特征信息加密生成一段无序字符串,再通过密钥对文件和预设的RSA加密算法对无序字符串进行加密处理,生成Licence文件。
在上述技术方案的基础上,下载Licence文件保存于用户端,将Licence文件存储在软件欲安装的目录中。
软件授权申请人下载Licence文件,并作为授权文件保存于用户端,在软件欲安装的目录中;
在用户端启动软件产品时,软件自动加载C动态链接库,读取作为授权文件保存于用户端中的Licence文件。
在上述技术方案的基础上,通过加载授权验证jar包中的C动态链接库,动态编译生成授权验证程序,实现读取授权文件信息和验证授权文件信息两个方法,其中:
读取授权文件信息包括:Licence文件的读取,计算机硬件特征信息文件的读取;
验证授权文件信息包括:对用户端当前实时获取的计算机硬件特征信息进行加密,与Licence文件中的一段无序字符串比对。
基于C动态链接库编译生成授权验证程序,授权验证程序根据预设的AES加密算法、RSA加密算法和密钥信息对用户端当前实时获取的本机硬件特征信息进行加密,再与Licence文件中的计算机硬件特征信息进行比对,信息一致则验证成功,软件启动成功,否则软件启动失败。其中:
对用户端当前实时获取的本机硬件特征信息的加密过程,包括采用的加密算法、密钥信息和加密顺序,与Licence文件中的计算机硬件特征信息的加密过程一致,以确保在正确有效的授权前提下,两者经加密后的信息一致。
本发明所述的基于编译技术的Licence管理系统,具有以下有益效果:
在使用软加密技术的基础上,利用编译技术与代码混淆技术增加软件逆向工程的难度,使得软件难以被破解,建立一套安全、经济、高效的软件授权管理体系,兼顾了较高的安全强度、较低的发行成本,易于管理和维护。
与现有技术相比,本发明的优势在于:在采用传统电子许可证技术的基础上,在软件的打包发布环节,利用编译技术在软件中嵌入代码混淆插件实现源程序的代码混淆,在软件的授权验证环节,采用动态编译技术加载C动态链接库,实现授权验证程序的生成,使软件无法通过逆向工程进行暴力破解及获取正确的关键源代码。本发明提供从软件授权的设计、开发集成到软件授权的生成、分发、管理一整套完善的授权管理方案,力求以最经济、高效、便捷、安全的软件保护和发行方式,更快地响应用户需求和市场变化。
附图说明
本发明有如下附图:
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1本发明所述基于编译技术的Licence管理系统的组成示意图。
图2版本创建模块的流程示意图。
图3产品配置及发布模块的流程示意图。
图4授权申请模块的流程示意。
图5审核模块的流程示意图。
图6授权文件生成模块的流程示意图。
图7授权验证模块的流程示意图。
具体实施方式
以下结合附图对本发明作进一步详细说明。所述详细说明,为结合本发明的示范性实施例做出的说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
参见附图1所示,在本实施例中公开了一种基于编译技术的Licence管理平台,特选用试用版软件的发布和授权管控情景作为实施例进行详细说明,以便于本领域技术人员的理解。本实施例的Licence管理平台,通过动态编译技术、代码混淆技术、电子授权技术,实现试用版软件在编译打包时源程序自动执行代码混淆,在授权申请获批时平台为其生成授权文件,在安装运行时动态编译生成授权校验程序对授权文件进行验证,进而实现对软件源程序的保护和版本授权。
如附图2所示,在本实施例中,所述版本创建模块包括:创建软件版本、版本信息写入.java文件、生成一对密钥对文件、生成授权验证jar包。
其中,所述创建软件版本是指,用户在Licence管理平台中提交试用版软件的产品信息和版本信息;
所述版本信息写入.java文件是指,平台执行预设的第1个Shell脚本,将提交的产品信息和版本信息写入一个.java文件;
所述生成一对密钥对文件是指,平台根据提交的产品信息和版本信息执行预设的第2个Shell脚本,通过SHAA256 RSA算法生成一对密钥对文件;
所述生成授权验证jar包是指,平台执行预设的第3个Shell脚本,使预设的Golang程序读取所述密钥对文件编译生成C动态链接库,使预设的JNA程序实现将C动态链接库与所述写入的.java文件结合编译生成授权验证jar包,并上传至maven仓库中。
为了便于理解,所述产品信息包括产品名称、缩写简称、产品链接、产品标签、所属部门信息,所述版本信息包括版本标识符(如试用版1.0)、版本备注、是否指定参数。
如附图3所示,在本实施例中,所述产品配置及发布模块包括:修改工程配置文件、修改java源文件、软件编译、打包及发布。
其中,所述修改工程配置文件是指,开发人员在试用版软件的工程配置文件,即maven项目的pom.xml文件中以添加库(repository)、依赖(dependency)和插件(plugin)的方式,指向授权验证jar包、自定义代码混淆插件和@Licence的自定义注解依赖包在maven仓库的存放路径,以便于软件在编译打包时按该路径从maven仓库中下载授权验证jar包、自定义代码混淆插件和自定义注解依赖包;
所述修改java源文件是指,开发人员在试用版软件的源程序中,在需要进行授权验证的方法处添加@Licence注解,作为该方法的一种标记,使该软件在编译打包时能检测到@Licence注解标记的方法处;
所述软件编译、打包及发布是指,软件在编译打包时,根据pom.xml添加的库、依赖和插件信息从maven仓库中下载授权验证jar包、代码混淆插件和@Licence的自定义注解依赖包,通过代码混淆插件和自定义注解依赖包在检测到@Licence注解标注的方法处执行代码混淆。
为了便于理解,所述pom.xml文件中关于添加库(repository)、依赖(dependency)和插件(plugin)的配置将由平台在所述版本创建模块中自动生成示例代码,为开发人员提供授权验证jar包、自定义代码混淆插件和@Licence的自定义注解依赖包在maven仓库中的存放路径。
如附图4所示,在本实施例中,所述授权申请模块包括:填写授权申请单、采集计算机硬件特征信息、上传计算机硬件特征信息文件,提交申请。
其中,所述填写授权申请单是指,用户通过申请授权功能,填写申请原因、申请类型、申请使用时长、是否启用到期提醒以及到期提醒时间;
所述采集计算机硬件特征信息是指,用户通过平台下载计算机硬件特征信息采集工具,采集客户用于安装试用版软件的服务器信息并自动生成计算机硬件特征信息文件。
为了便于理解,所述服务器信息包括服务器的CPU信息、物理磁盘序列号及物理网卡信息。所述采集工具需要根据客户服务器环境选择不同的版本进行下载使用,平台提供了三种不同的版本:windows版、Linux版和Mac版。例如客户的软件部署环境为windows操作系统,则选择下载windows版采集工具。所述计算机硬件特征信息文件是指由采集工具根据采集到的计算机硬件特征信息于客户本机生成的LICENCE.FILE文件。
如附图5所示,在本实施例中,所述审核模块包括:审核授权申请单、转至授权文件生成模块、打回至申请人。
其中,所述审核授权申请单是指,试用版软件的产品负责人接收申请人提交的授权申请单,并进行审核;
所述转至授权文件生成模块是指,授权申请审核通过,平台自动将申请信息转至授权文件生成模块处理;
所述打回至申请人是指,授权申请审核不通过,平台自动将申请单打回至申请人进行处理。
如附图6所示,在本实施例中,所述授权文件生成模块包括:计算机硬件特征信息、无序字符串、授权文件。
其中,所述计算机硬件特征信息是指从所述审核模块接收的计算机硬件特征信息文件中携带的计算机硬件特征信息;
所述无序字符串是指,平台将计算机硬件特征信息通过预设的AES加密算法加密生成的一段无序字符串;
所述授权文件是指,平台利用所述版本创建模块生成的产品密钥和预设的RSA加密算法,对无序字符串进行加密生成的授权文件。
为了便于理解,例如采集到的计算机硬件特征信息为:
LICENCE.GATHER_MAHINE_IP=192.168.11.121;
LICENCE.GATHER_SYSTEM_ID=d99fc2ae35e4ea823***(此处隐藏并省略部分内容)da3a0;
LICENCE.GATHER_TIMESTAMP=15941***(此处隐藏并省略部分内容)80;
通过AES算法加密后生成的无序字符串如下:
cZavH8D***(此处隐藏并省略部分内容)jTiaKTaMxa;
无序字符串通过RSA算法加密后生成的授权文件192.168.11.121.LICENCE,内容如下:
eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTQyNzUxNjMsImli***(此处隐藏并省略部分内容)lKq_AdKNV60tZ9lD41Df7xt-ipOwP7us
如附图7所示,在本实施例中,所述授权验证模块包括:启动软件,加载C动态链接库、生成授权验证程序、读取授权文件中的计算机硬件特征信息、读取本机计算机硬件特征信息、将授权文件中的计算机硬件特征信息与本机硬件特征信息进行比对。
其中,所述启动软件,加载C动态链接库是指,客户在服务器中安装启动其所获取的试用版软件包,试用版软件在启动时将自动加载授权验证jar包中的C动态链接库;
所述生成授权验证程序是指,通过加载C动态链接库动态编译生成授权验证程序,该程序包含了2个方法:读取授权文件信息方法和验证授权文件信息方法;
所述读取授权文件中的计算机硬件特征信息是指,通过读取授权文件信息方法,读取授权文件中的计算机硬件特征信息;
所述读取本机计算机硬件特征信息是指,通过验证授权文件信息方法,采集本机计算机硬件特征信息,通过预设的AES加密算法、RSA加密算法和密钥对采集的本机硬件特征信息进行加密;
所述将授权文件中的计算机硬件特征信息与本机硬件特征信息进行比对是指,通过验证授权文件信息方法,将加密后的本机硬件特征信息与读取的授权文件中的计算机硬件特征信息进行比对,比对结果一致则该授权有效,软件可启动,在试用期内均可正常使用,否则软件启动失败。
为了便于理解,所述AES加密算法、RSA加密算法和密钥与所述授权文件生成模块中采用的AES加密算法、RSA加密算法和密钥一致,使得允许授权的、正确有效的客户本机硬件特征信息在加密后能与授权文件中的计算机硬件特征信息保持一致。所述授权验证程序是在源程序中添加了@Licence注解的方法处生成的。
综上所述,本实施例的Licence管理系统有效地解决了传统软件保护技术在软件的电子化发行及按需销售过程中存在安全性低、成本高、维护复杂的问题。本实施例的Licence管理系统,运用代码混淆技术对@Licence注解的方法处进行代码混淆,从而实现对核心代码的保护;利用动态编译技术构建C动态库,在验证授权时加载动态库生成授权校验程序,使破解者无从跟踪,从而增加了软件的破解成本;从授权校验程序的开发集成,到软件授权的申请、审批及授权文件的生成,提供了一套可靠完善的软件授权管控体系,防止软件未经授权使用,从而保障软件开发商利益,具有重要的现实意义。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
以上所述之实施例仅为本发明的较佳实施例,并非对本发明做任何形式上的限制。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围情况下,利用上述揭示的技术内容对本发明技术方案作出更多可能的变动和润饰,或修改均为本发明的等效实施例。故凡未脱离本发明技术方案的内容,依据本发明之思路所作的等同等效变化,均应涵盖于本发明的保护范围内。
- 一种基于编译技术的Licence管理系统
- 一种基于智能编译技术的决策执行方法、装置、设备及介质