`

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

阅读更多

      有的时候,客户会提出这样的需求,他们的应用能不能当产品一样的出售呀,如果能够保证每一个买家有一个唯一的限制的话,这将是一个不错的想法.

  为了能够达到这个目的,我就想了一个很弱智的实现方案.就是在应用启动时加入一些参数,并做一个检验,如果检验失败后就启动失败,这样的话,这个应用就不能正常使用.

  好了.就按照这个思路来做一个实现,然后再做扩展.因为我们使用Spring的MVC框架,我就想把它加载到Spring的启动配置文件当中.实现如下,一共有三个个文件,一个JAVA文件,一个是加入到Spring配置文件当中的片段.另外是一个Licence.properites文件.

  Java文件:

public class LicenceManager {
    private final int MAX_USER = 10;

    private String username = "";//用户名
    private String organization = "";//公司名
    private String licence;//生成的md5码
    private boolean valid;
  /**
     * 当然,如果你有严格的限制的话,你可以加入网卡的唯一码,
   * 或者更牛B的限制手段!
     **/
    @Resource
    private UserDAO userDAO;
    //注入完成之后需要执行的方法上,以执行任何初始化
    @PostConstruct
    public void validate() {
        String calcLicence = DigestUtils.md5Hex(username + organization);
        if (calcLicence.equals(licence))
            valid = true;
    }

    public LicenceManager() {
    }
    //当然也可以加入对最多用户的限制
    public boolean checkLicence() {
        if (valid || userDAO.getCountAll() < MAX_USER)
            return true;
        return false;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setOrganization(String organization) {
        this.organization = organization;
    }

    public void setLicence(String licence) {
        this.licence = licence;
    }

    public boolean isValid() {
        return valid;
    }
}

  Spring的配置文件:

 <bean id="licenceManager" class="com.corticon.dialogs.designer.licence.LicenceManager">
        <property name="username" value="${licence.username}"/>
        <property name="organization" value="${licence.organization}"/>
        <property name="licence" value="${licence.licence}"/>
    </bean>
 <context:property-placeholder location="classpath:Licence.properties" />

  另外Licence.properites示例如下:

licence.username=foobar
licence.organization=foobar.com
licence.licence=401303938298f18f397e6b0125159927
分享到:
评论
26 楼 goodfifa08 2009-06-08  
主要为了测试
25 楼 zhaomingzm_23 2009-06-08  
个人觉得,技术中加入了licence或者copyright是对开发者的尊重。和对劳动成果的肯定。
但一些基于这些劳动成果的二次开发也加上诸多的混淆或者限制,就好比拿了别人的东西,但写上自己的名字一样令人唾弃。
就像李开复说的技术之有开源才有生命力。
open everyThing!
24 楼 linginfanta 2009-06-06  
省省吧,有些应用,源代码都要把人看疯,还用得着混淆?
23 楼 yimlin 2009-06-05  
supercode 写道
要想从技术上解决这个问题是比较困难的。可能的办法有
1. 让客户觉得仅得到软件意义不大,这个软件需要一定的部署,调优,培训,实施这些后期服务,这取决于软件的类型。
2. 做成服务,某些关键环节在自己的服务器,或是全在服务器上,这种SAAS目前来说,还有待于进一步发展,这取决于业务类型


这个是体制外同学的话,听着都正确,就是当下没有帮助。
若对于银行/保险等金融企业的业务系统本身就是定制化的,就算把源代码拿到别的企业也不敢用。
从产品到服务本身是一个很大的跨越,是组织层面的。
22 楼 supercode 2009-06-04  
要想从技术上解决这个问题是比较困难的。可能的办法有
1. 让客户觉得仅得到软件意义不大,这个软件需要一定的部署,调优,培训,实施这些后期服务,这取决于软件的类型。
2. 做成服务,某些关键环节在自己的服务器,或是全在服务器上,这种SAAS目前来说,还有待于进一步发展,这取决于业务类型
21 楼 steeven 2009-06-03  
我觉得精华在签名那里.别的就不要多想了. 防君子不防小人的.
20 楼 xyh 2009-06-02  
反编译不用怕的,我们有部分CLASS文件是用混淆器进行混淆的,经过混淆的类名、变量名和方法名为O00O0O00O这样的名字(字母O和数字0的组合),就算用jad反编译也看不到源码
19 楼 chenhua_1984 2009-06-02  
chenhua_1984 写道
    设置一个环境变量,指定一个值,一个客户一个,这样就可以了,我们的项目就是这么做的。假若是windows系统,
那么采用set name=value,假如是linux 则用export name=value,系统在启动的时候就读这个值,假如值设置的部队或则没有,就启动不起来!

18 楼 chenhua_1984 2009-06-02  
    设置一个环境变量,指定一个值,一个客户一个,这样就可以了,我们的项目就是这么做的。假若是windows系统,
那么采用set name=value,假如是linux 则用export name=value
17 楼 iaimstar 2009-06-02  
代码写的烂,你反编译了也看不懂
16 楼 zhongli 2009-06-02  
不谈破解。我觉得最重要的是要防copy,然后包含模块时间之类的。
15 楼 lnaigg 2009-06-02  
license管理类也要注入?开玩笑了。

做共享软件的人的经验是:把验证的那段代码随机嵌入到程序各个模块中,注意不是调用一个函数或类来判断是否合法,而是整个判断的流程都一起粘贴。

不管你的算法写得多复杂,只要调用了个函数“checkLicence()”什么的来判断,那意味着所有的算法都是个空壳子。
14 楼 zhaomingzm_23 2009-06-02  
不错,通过validate()校验。isValid()提供依据。

ps:删除配置? 呵呵,对于拿到了程序源码,再来讨论有什么意思。破解和版权本来就是小偷和法律的关系。
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

只是供大家耍耍玩玩哦
12 楼 hocus 2009-06-02  
1 必须通过license中的加密信息 来作为key,启动应用,否则失败。
2 加密信息由固定机器的硬件,比如mac和ip地址来唯一确定。并且进行单向加密
3 代码使用混淆器混淆
4 服务器端对客户端的信息进行管理,对验证过的签发令牌。否则不予响应。

11 楼 kjj 2009-06-01  
java上保持lience比较难吧,反编译太容易了!!
10 楼 whaosoft 2009-06-01  
没有看出来怎么做的licence限制。
9 楼 grandboy 2009-06-01  
我的license文件格式如下:
<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比较难反编译。但是我们没有这样做,只是简单的混淆了一下。
8 楼 josen 2009-06-01  
地球上有专门做这个的厂家,如safeNet  or  wibu
7 楼 kunee 2009-06-01  
这个只能防君子。。。。。

要是我直接编译一个CLASS覆盖

相关推荐

    licence 限制

    请确保JAVA_HOME设置正确,如C:\Program Files\Java\JDK(注意最后没有\) 请按以下步骤运行此演示程序 第一步,运行run.bat部署演示环境 第二步,执行命令"java -jar 50194.jar"运行此演示程序,效果如附图1,2所示 ...

    C#软件Licence应用实例

    软件Licence应用实例,主要实现软件客户端授权使用,使用期限限制等。 开发语言:C# 开发工具:.NET6.0 涉及技术:电脑硬件信息获取,非对称加密,文件读写等。 具体可参考相关博文

    .NET软件Licence应用实例,Licence生成工具,Licence验证

    .NET软件Licence应用实例 实例说明 开发技术:C# 开发工具:Visual Studio 2022 开发环境:.Net 6.0 使用说明 客户端测试工具,获取电脑信息 发送到管理员,用Licence生成工具,生成Licence 验证成功,正常使用;...

    Quartus最全licence

    Quartus最全licence,支持quartus所有功能。测试可以支持17.1。

    C#3种软件licence开发源代码

    C#3种软件licence开发源代码

    ADS1.2licence绝对可用

    ADS1.2 licence 绝对可用

    vivado15.4之licence

    vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4licence,测试可用vivado15.4...

    开源和Licence徽章图标

    开源和Licence徽章图标

    Seapine Licence Server Admin配置

    Seapine Licence Server Admin配置以及TestTrack Pro Server Admin配置

    微信硬件Access_token Licence获取

    微信硬件平台设备信息获取软件,输入AppID/Appsecret/产品编码,点击获取信息即可获取Access_token Deviceid Licence信息。 本软件不会获取个人任何信息,不会有任何广告。 使用后再文件夹中会产生Licence.dat,用于...

    arcgis9.1 sde licence.ecp

    arcgis9.1 sde licence.ecp是arcgis9.1 sde的许可文件

    ISE13.2 lICENCE

    亲自测试可用的XILINX_ISE13.2 licence,欢迎下载!

    source insight4.0破解licence

    sourceinsight4.exe覆盖安装目录向相同名字的文件. 打开source insight 选择import a new license file,选取licence文件si4.pediy.lic。 enjoy.

    sublime text 3 licence

    Sublime Text 是一个代码编辑器(Sublime Text 2是收费软件,但可以无限期试用),也是HTML和散文先进的文本编辑器。

    Intel Fortran Licence File

    Licence file for Intel Visual Fortran 9 and Intel Visual Fortran 11.1

    TI德州仪器最新开发工具CCSv6 licence许可破解文件

    ti 德州仪器 ccs6.0 licence 破解文件,没有该文件可以使用ccs,但是有组件限制和调试限制,使用license可以正常调试和开发

    halcon12 licence 6月

    halcon 12 6月份的licence ,新鲜出炉!!!祝大家学习顺利!!

    QuartusII 8.1 Licence(full)

    QuartusII 8.1的Licence文件,支持所有IP核和所有器件,一般的Licence文件支持的IP有限。下载后仍然需要把网卡MAC填入,相信需要它的人应该都会改。

    ArcGIS 9.3破解licence

    ArcGIS 9.3破解licence,安装manager时,打开Arc_Info9.lic, 将SERVER后的电脑名改外本机电脑名保存。

    pango vivado licence pango vivado licence

    pango vivado licence

Global site tag (gtag.js) - Google Analytics