基于license文件对JAVA类软件实现授权控制的方法技术

技术编号:25835891 阅读:39 留言:0更新日期:2020-10-02 14:16
一种基于license文件对JAVA类软件实现授权控制的方法,其步骤包括:步骤S1:上层用户软件首次启动时生成本机安装序列号;步骤S2:通过页面提交软件注册信息;步骤S3:通过文件监听器生成.lcf2注册文件,并检测文件是否有效;如果有效进行步骤S4,否则跳到步骤S6;步骤S4:与用户软件之间建立管道文件.pipe1,向管道中发送授权参数;步骤S5:用户软件读取授权控制参数,立即拆除管道文件;用户软件被控制只能在授权模式下运行;步骤S6:用户软件主进程被操作系统强制杀死,注册控制进程主动退出,至此整个软件的生命周期结束。本发明专利技术具有原理简单、易实现、适用范围广、授权管理保密性更好等优点。

【技术实现步骤摘要】
基于license文件对JAVA类软件实现授权控制的方法
本专利技术主要涉及到软件授权管理
,特指一种基于license文件对JAVA类软件实现授权控制的方法。
技术介绍
由于JAVA代码本身限制,JVM虚拟机上运行的是符合规范的class二进制文件,通过常用的反汇编工具可以查看完整的原始代码;而在对软件的授权使用方面的控制基本方法是通过一定的算法计算出一系列注册号,由软件的开发组织发给对应的软件使用者,软件启动和使用过程中再根据相同的算法还原注册号对应的鉴权信息加以验证。针对上述传统的方法和机制依然存在很大的风险,具体包括如下:(1)使用一些JAVA代码层的混淆工具,如proguard等对编译工具输入的.class文件做混淆,原方法名、变量名会变成a.b.c之类的名称;是可以在一定程度上对反汇编出来代码的可读性起到一定的加强作用,但这也取决于源码中逻辑的复杂性,越是复杂的代码混淆后被反汇编出来的源码越难读懂,只是增大破译难度,本质上并没有起到代码加密的效果,高级的软件开发人员只要多花些时间成本还是可以读出原判断逻辑进而达到软件破解目的。(2)对原始的核心受修护的.class类文件做一次加密处理,再通过自定义的JAVA类加载器实现对这个class文件的解密加载处理。由于加过密后的类文件不符合class文件的规范,所以自然是不可能被反汇编工具看到源码的,可以起到对类文件的保存作用。这里的核心问题是对加密时使用的秘钥的管理(参见下面的第3点说明),如果保护不当同样会被轻易破解。(3)对于秘钥的管理常用做法一个是放到软件自身的某个隐藏目录或者操作系统比较隐蔽的目录里面,这种方式在操作系统的进程查看工具是非常容易被发现的,起不到保护作用。另外一种做法是通过网络的方式读取软件开发商服务器下发的加密秘钥,网络使用ssl方式加密传输可以保护秘钥在网络传输过程中不被截获。这种方式的秘钥本身可以做到定期更新缩短时效性,从而加大被破解难度。软件注册码的下发一般也可采用这种方式获取。这里存在的问题是软件必须处在联网环境中,否则软件自身也无法实现自解密正常运行。破解人员可以在断网情况下轻松实现对软件的破解。(4)对核心的授权代码可以使用c、c++等其它语言开发(由于语言本身特点很难被破解)后打包成.dll或者.so库文件提供给java调用进而达到软件保护目的。上述方法中,软件代码对受保护代码的调用处,只要存在逻辑上的函数调用关系,只要被破解人员定位到函数调用点就可以模拟正常授权时的函数返回值,轻易绕过调用逻辑达到破解软件的目的。综上所述,传统的所有方法仍然未能较佳的解决软件授权管理的问题。
技术实现思路
本专利技术要解决的技术问题就在于:针对现有技术存在的技术问题,本专利技术提供一种原理简单、易实现、适用范围广、授权管理保密性更好的基于license文件对JAVA类软件实现授权控制的方法。为解决上述技术问题,本专利技术采用以下技术方案:一种基于license文件对JAVA类软件实现授权控制的方法,其步骤包括:步骤S1:上层用户软件首次启动时生成本机安装序列号;步骤S2:通过页面提交软件注册信息;步骤S3:通过文件监听器生成.lcf2注册文件,并检测文件是否有效;如果有效进行步骤S4,否则跳到步骤S6;步骤S4:与用户软件之间建立管道文件.pipe1,向管道中发送授权参数;步骤S5:用户软件读取授权控制参数,立即拆除管道文件;用户软件被控制只能在授权模式下运行;步骤S6:执行用户软件主进程的kil-9操作,用户软件主进程被操作系统强制杀死,注册控制进程主动退出,至此整个软件的生命周期结束。作为本专利技术的进一步改进:所述步骤S1中,生成软件安装序列号的流程为:取操作系统级的硬件串号,组成一个唯一的软件机器安装序列号;再加上一个本机的时间戳整体采用3DES方式加密显示到软件的首次启动界面上,使每次用户看到的序列号都完全不一样。作为本专利技术的进一步改进:所述步骤S3中,读取注册文件.lcf2过程为:软件首次启动时通过注册页面上输入的注册文件内容由内部的HkFileLister文件监听器读取到写入本地的.lcf2文件及备份文件.lcf2.first;写入软件过期控制文件.timeOut,第一次尝试读取本地的.lcf2注册文件,如果由于文件内容损坏或被篡改导致文件读取失败则尝试从临时文件.lcf2.tmp中恢复成.lcf2文件并再次读取,如果还失败就从首次生成的备份文件.lcf2.first中恢复成.lcf2文件并再次读取,如果还失败就认为注册文件无效,读取过程结束;读取成功后调用有效性验证方法判断注册文件是否有效,如果有效删除.timeOut文件,读取的文件内容存储在内存注册变量中,读取过程结束并启动超时过期判断服务。作为本专利技术的进一步改进:所述步骤S3中写入注册文件(.lcf2)过程为:将实时的内存注册变量中内容先经过3DES加密后再通用Base64Ex工具编码后先写入到临时文件.lcf2.tmp;成功后再拷贝到注册文件.lcf2中,并及时调用fd.sync()执行强制刷盘操作来保证每次都能真正写入磁盘物理文件后再返回。作为本专利技术的进一步改进:还包括对超时过期判断服务流程:步骤S100:检测如果注册文件.lcf2或者内存注册变量为空或不存在返回软件过期,写入控制参数到软件过期控制文件.timeOut;步骤S200:读取内存注册变量中的软件安装序列号systemid和本机生成的序列号systemid比较如果不一致则软件过期;步骤S300:读取内存注册变量中的注册过期标志;步骤S400:读取内存注册变量中的安装时间戳和注册文件的最后修改日期时间戳做比较,如果时间差值在设定时长以上认为该注册文件已过期,请重新申请生成;步骤S500:软件使用剩余时间检测:首先用本机当前时间戳大于内存注册变量中设置的过期时间戳则认为软件过期;再判断剩余时间戳变量是否为零;步骤S600:判断如果软件的安装时间戳大于本机当前时间戳并且在设定时长以上,认为用户存在非法操作:安装前有意将本机时间向前调整;步骤S700:判断如果软件检测时间戳大于本机当前时间戳并且在设定时长以上,认为用户存在非法操作:在软件运行过程中有意将本机时间向前调整;步骤S800:判断如果软件已过期,立即启动进程延迟退出服务一段时间后软件主进程自动退出;步骤S900:检测结束后更新内存注册变量中的检测时间戳为本机当前时间;剩余时间戳减去一定时间;并调用注册文件写入流程更新注册文件。作为本专利技术的进一步改进:还包括对异常情况对文件完整性的保存流程,即在文件的整个写入过程中通过生成首次备份文件临时文件、强制刷盘及注册JVM关机钩子以保护注册文件的完整性。作为本专利技术的进一步改进:还包括整体代码保护流程,即通过proguard工具混淆,License注册文件内容采用3DES方式加密,加密后的字节流再使用Base64做编本文档来自技高网
...

【技术保护点】
1.一种基于license文件对JAVA类软件实现授权控制的方法,其特征在于,步骤包括:/n步骤S1:上层用户软件首次启动时生成本机安装序列号;/n步骤S2:通过页面提交软件注册信息;/n步骤S3:通过文件监听器生成.lcf2注册文件,并检测文件是否有效;如果有效进行步骤S4,否则跳到步骤S6;/n步骤S4:与用户软件之间建立管道文件.pipe1,向管道中发送授权参数;/n步骤S5:用户软件读取授权控制参数,立即拆除管道文件;用户软件被控制只能在授权模式下运行;/n步骤S6:执行用户软件主进程的kil-9操作,用户软件主进程被操作系统强制杀死,注册控制进程主动退出,至此整个软件的生命周期结束。/n

【技术特征摘要】
1.一种基于license文件对JAVA类软件实现授权控制的方法,其特征在于,步骤包括:
步骤S1:上层用户软件首次启动时生成本机安装序列号;
步骤S2:通过页面提交软件注册信息;
步骤S3:通过文件监听器生成.lcf2注册文件,并检测文件是否有效;如果有效进行步骤S4,否则跳到步骤S6;
步骤S4:与用户软件之间建立管道文件.pipe1,向管道中发送授权参数;
步骤S5:用户软件读取授权控制参数,立即拆除管道文件;用户软件被控制只能在授权模式下运行;
步骤S6:执行用户软件主进程的kil-9操作,用户软件主进程被操作系统强制杀死,注册控制进程主动退出,至此整个软件的生命周期结束。


2.根据权利要求1所述的基于license文件对JAVA类软件实现授权控制的方法,其特征在于,所述步骤S1中,生成软件安装序列号的流程为:取操作系统级的硬件串号,组成一个唯一的软件机器安装序列号;再加上一个本机的时间戳整体采用3DES方式加密显示到软件的首次启动界面上,使每次用户看到的序列号都完全不一样。


3.根据权利要求1所述的基于license文件对JAVA类软件实现授权控制的方法,其特征在于,所述步骤S3中,读取注册文件.lcf2过程为:软件首次启动时通过注册页面上输入的注册文件内容由内部的HkFileLister文件监听器读取到写入本地的.lcf2文件及备份文件.lcf2.first;写入软件过期控制文件.timeOut,第一次尝试读取本地的.lcf2注册文件,如果由于文件内容损坏或被篡改导致文件读取失败则尝试从临时文件.lcf2.tmp中恢复成.lcf2文件并再次读取,如果还失败就从首次生成的备份文件.lcf2.first中恢复成.lcf2文件并再次读取,如果还失败就认为注册文件无效,读取过程结束;读取成功后调用有效性验证方法判断注册文件是否有效,如果有效删除.timeOut文件,读取的文件内容存储在内存注册变量中,读取过程结束并启动超时过期判断服务。


4.根据权利要求1所述的基于license文件对JAVA类软件实现授权控制的方法,其特征在于,所述步骤S3中写入注册文件.lcf2过程为:将实时的内存注册变量中内容先经过3DES加密后再通用Base64Ex工具编码后先写入到临时文件.lcf2.tmp;成功后再拷贝到注册文件.lcf2中,并及时调用fd.sync()执行强制刷盘操作来保证每次都能真正写入磁盘物理文件后再返回。


5.根据权利要求1-4中任意一项所述的基于license文件对JAVA类软件实现授权控制的方法,其特征在于,还包括对超时过期判断服务流程:
步骤S100:检测如果注册文件.lcf2或者内存注册变量为空或不存在返回软件过期,写入控制参数到软件过期控制文件.timeOut;
步骤S200:读取内存注册...

【专利技术属性】
技术研发人员:陈琳崔岭峰黄杰
申请(专利权)人:湖南省星岳天璇科技有限公司
类型:发明
国别省市:湖南;43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1