首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

给你的施用加入简易Licence限制

2012-11-04 
给你的应用加入简易Licence限制????? 有的时候,客户会提出这样的需求,他们的应用能不能当产品一样的出售呀

给你的应用加入简易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   主要为了测试

热点排行