java 程序保护 密钥license , 签名证书问题

SimonAt 发布于 2016/10/14 16:33
阅读 1K+
收藏 2

有一个java程序,给客户使用。想限制用户使用时间。就是搞个license的东西。

我想有2个方式:

1.根据下面三个要素生成license

  1. 机器IP
  2. license 到期时间
  3. 生成的license

把到期时间和生成的license写入文件

程序启动时根据IP,到期时间计算license并和文件中的license比较如果相等则验证通过。把到期时间加载到程序中。

程序中应该在多个地方监测这个到期时间,

程序中应该监测license文件的变化,如果变化重新计算license

如果license不对或者时间到期, 1. 程序直接停止  2.程序不停止,但是收到数据后不处理都丢弃

因为解密程序也在jar包中,jar包需要混淆

增加一个监听端口来提供远程控制命令(远程直接更新到期时间为一个历史日期,或者直接停止程序)(可能不提供外网访问)(想了想只应该提供远程停止指令,不能提供更改日期功能,有可能客户发现这个调用,自己任意更新到期日期)


2.借助keystore

直接把到期日期加密有存到一个文件,

通过keystore来解密出真实日期,

通过控制文件内容中的时间来控制程序是否能使用

class依然都要混淆


方案一很明了,方案二其实我还没想通顺,不知道可不可行,是不是比方案一简单? 

方案一不对称加密,方案二日期是加密后的,要对称加密

希望得到大家帮助。

加载中
0
红魔小贝
红魔小贝
我觉得要看你的程序是不是需要持续对外提供服务。时间一直变化,需要一个线程管理过不过期,过期就直接shutdown。能够成功的前提是class不能被反编译,class文件理论上都是可以被反编译的。如果你服务的价值重要到要控制过期时间点的话,想必会很重要,混淆后的class文件被大神反编译不是难事,个人认为混淆是重点
SimonAt
SimonAt
嗯,你说的对,不然其他都白瞎,那么问你一下, 你一帮用那个工具做混淆? 混淆可以做多次吗?,
0
简单代码
简单代码
搞一个服务器,将核心处理业务web化,或者将关键函数,服务端验证客户端license。
返回顶部
顶部