给你的应用加入简易Licence限制
????? 有的时候,客户会提出这样的需求,他们的应用能不能当产品一样的出售呀,如果能够保证每一个买家有一个唯一的限制的话,这将是一个不错的想法.
为了能够达到这个目的,我就想了一个很弱智的实现方案.就是在应用启动时加入一些参数,并做一个检验,如果检验失败后就启动失败,这样的话,这个应用就不能正常使用.
好了.就按照这个思路来做一个实现,然后再做扩展.因为我们使用Spring的MVC框架,我就想把它加载到Spring的启动配置文件当中.实现如下,一共有三个个文件,一个JAVA文件,一个是加入到Spring配置文件当中的片段.另外是一个Licence.properites文件.
Java文件:
? 另外Licence.properites示例如下:
<licenses> <license> <product>Product Name</product> <option></option> <version>1.0</version> <notices>Copyright 2005-2007</notices> <licensee>UserName</licensee> <street></street> <city></city> <state></state> <postalCode></postalCode> <country></country> <start>19.07.2007</start> <expiration>19.09.2010</expiration> <usercount>20</usercount> <digest>tRJB36DajfOr0Kesgpo28NnrBCw=</digest> <signature>RszB27jpYrSVJL0VG6FmgYsVpwbEo5xvmFxbyZz6RX1fHUi9Z0JJEagD1Irw==</signature> </license></licenses>
然后配置一个启动类,读这个文件,如果这个文件没有,或者要读的信息没有就报错。读这个license文件之后,就把信息放在一个静态类里。既然题目是简单解决方案,这样就挺简单的。其实就是防君子不防小人。如果要实现的更好一点就把所有重要类都加密,然后用一个classloader使用dll来解密相应类。这样如果做得好的话,一般class比较难反编译。但是我们没有这样做,只是简单的混淆了一下。 10 楼 whaosoft 2009-06-01 没有看出来怎么做的licence限制。
11 楼 kjj 2009-06-01 java上保持lience比较难吧,反编译太容易了!! 12 楼 hocus 2009-06-02 1 必须通过license中的加密信息 来作为key,启动应用,否则失败。
2 加密信息由固定机器的硬件,比如mac和ip地址来唯一确定。并且进行单向加密
3 代码使用混淆器混淆
4 服务器端对客户端的信息进行管理,对验证过的签发令牌。否则不予响应。
13 楼 ajf8 2009-06-02 新一代java敏捷开发平台ajf3.0有Licence限制的,供参考
对jar包混肴了 Licence为ajf.lic
一个时间一个key md5过地 改下代码可支持MAC的
要破解还是得费点力气的哦
demo下载
http://hi.baidu.com/ajf8/blog/item/d8861435117ff23d5ab5f5fc.html
只是供大家耍耍玩玩哦 14 楼 zhaomingzm_23 2009-06-02 不错,通过validate()校验。isValid()提供依据。
ps:删除配置? 呵呵,对于拿到了程序源码,再来讨论有什么意思。破解和版权本来就是小偷和法律的关系。 15 楼 lnaigg 2009-06-02 license管理类也要注入?开玩笑了。
做共享软件的人的经验是:把验证的那段代码随机嵌入到程序各个模块中,注意不是调用一个函数或类来判断是否合法,而是整个判断的流程都一起粘贴。
不管你的算法写得多复杂,只要调用了个函数“checkLicence()”什么的来判断,那意味着所有的算法都是个空壳子。 16 楼 zhongli 2009-06-02 不谈破解。我觉得最重要的是要防copy,然后包含模块时间之类的。 17 楼 iaimstar 2009-06-02 代码写的烂,你反编译了也看不懂 18 楼 chenhua_1984 2009-06-02 设置一个环境变量,指定一个值,一个客户一个,这样就可以了,我们的项目就是这么做的。假若是windows系统,
那么采用set name=value,假如是linux 则用export name=value
19 楼 chenhua_1984 2009-06-02 chenhua_1984 写道 设置一个环境变量,指定一个值,一个客户一个,这样就可以了,我们的项目就是这么做的。假若是windows系统,
那么采用set name=value,假如是linux 则用export name=value,系统在启动的时候就读这个值,假如值设置的部队或则没有,就启动不起来!
20 楼 xyh 2009-06-02 反编译不用怕的,我们有部分CLASS文件是用混淆器进行混淆的,经过混淆的类名、变量名和方法名为O00O0O00O这样的名字(字母O和数字0的组合),就算用jad反编译也看不到源码 21 楼 steeven 2009-06-03 我觉得精华在签名那里.别的就不要多想了. 防君子不防小人的. 22 楼 supercode 2009-06-04 要想从技术上解决这个问题是比较困难的。可能的办法有
1. 让客户觉得仅得到软件意义不大,这个软件需要一定的部署,调优,培训,实施这些后期服务,这取决于软件的类型。
2. 做成服务,某些关键环节在自己的服务器,或是全在服务器上,这种SAAS目前来说,还有待于进一步发展,这取决于业务类型 23 楼 yimlin 2009-06-05 supercode 写道要想从技术上解决这个问题是比较困难的。可能的办法有
1. 让客户觉得仅得到软件意义不大,这个软件需要一定的部署,调优,培训,实施这些后期服务,这取决于软件的类型。
2. 做成服务,某些关键环节在自己的服务器,或是全在服务器上,这种SAAS目前来说,还有待于进一步发展,这取决于业务类型
这个是体制外同学的话,听着都正确,就是当下没有帮助。
若对于银行/保险等金融企业的业务系统本身就是定制化的,就算把源代码拿到别的企业也不敢用。
从产品到服务本身是一个很大的跨越,是组织层面的。 24 楼 linginfanta 2009-06-06 省省吧,有些应用,源代码都要把人看疯,还用得着混淆? 25 楼 zhaomingzm_23 2009-06-08 个人觉得,技术中加入了licence或者copyright是对开发者的尊重。和对劳动成果的肯定。
但一些基于这些劳动成果的二次开发也加上诸多的混淆或者限制,就好比拿了别人的东西,但写上自己的名字一样令人唾弃。
就像李开复说的技术之有开源才有生命力。
open everyThing!
26 楼 goodfifa08 2009-06-08 主要为了测试