`
eagletony
  • 浏览: 42008 次
  • 来自: ...
社区版块
存档分类
最新评论

用License机制保护java软件产品的安全

阅读更多
中国是个盗版软件横行泛滥的国度,也许这里面有我们社会主义初级阶段这个国情的因素,我们确实离不开盗版软件。但要发展壮大本国的软件产业,知识产权保护亟需重视起来。除了寄希望于大环境方面的改善,我们自己也可以做些力所能及的事情,保护好自己的软件产品,以免自己的辛勤劳动成果被他人轻松窃取。

     通常可以通过license机制来保护软件产品的安全,我们可以限定只有购买了license的用户在特定的机器上使用我们的软件。

     我设想的license机制有以下的主要功能点:

Ø         应用程序可以创建以及验证绑定给用户、系统等实体的license。

Ø         防止用户随意拷贝软件和license。

Ø         licenses可以是永久性的或者临时性的(在某个特定时期内有效)

Ø         licenses的验证由JAVA Security API提供的数字签名机制来实现。

Ø         license安装模块需要用特殊机制对其进行保护,以防被反编译轻易破解。


1、  定义license的文件格式

License文件采用普通java properties文件的定义格式。

文件中定义了产品、版本、Mac地址、license类型、license有效期等信息。如下所示:

Product.name=cpu

Product.version=3.2

License.type=Commercial

License.expiry=2010-05-12

Server.macaddress=00-1B-77-2C-9D-8F

signature=302d0215008b4ef2390e11d28f5ea7b86f71ba5168bfeaa6b402146c77706b985be68cc515

c6079b31ad50e3f17552


   其中最下面一串数据为根据上面几项基本信息签名产生的注册号。

2、  创建以及验证license

以下是部分实现代码(篇幅问题,只好只粘方法说明):

    /** 生成公钥、私钥对。公钥公开,注意保管好私钥(如果泄露,则有可能被hacker随意创建license) */

    public static void generateKey() throws Exception;

    /** 用私钥对license进行数据签名*/

public static synchronized void sign(License license) throws Exception ;

    /**

     * 验证license是否合法。

     * 首先验证Mac地址是否有改变,有的话则非法。(防止用户自由拷贝软件)。

     * 然后根据公钥验证签名是否合法。*/

  boolean validate(License license) throws Exception ;


然后通过以下三步可以完成整个license的创建以及验证:

// 第一步:生成公钥、私钥对。公钥公开,注意保管好私钥(如果泄露,则有可能被随意创建license)。

        LicenseFactory.generateKey();       

// 第二步:根据产品、版本、Mac地址、有效期等信息,签名产生注册号,并将该注册号复制到license中。

        License license = License.fromConfigFile("cpu.license");

        LicenseFactory.sign(license);

          FileHelper.writeFile(new File(LicenseFactory.LICENSE_DIR + "/cpu.license"), license.toString());     

// 第三步:利用公钥对license进行合法性验证。可以在软件代码的重要模块中加入下面的验证,比如登录模块

        LicenseManager.getInstance().validate (license);


3、  加强license机制实现模块的安全性

基于Java软件产品一般都是由编译文件.class组成的发布包,源代码很容易被诸如JAD之类的工具反编译出来,据此hacker们可以很轻松的重新实现部分代码来跳过license验证。

签于此,我们可以在编译或者类装载环节下些功夫,尽量增加被破解的难度。目前有多种工具可以帮助我们在编译JAVA文件的时候进行混淆,使得反编译出来的代码可读性很差,难以理解。至于类装载环节,可以对编译生成的class文件进行加密,然后通过自己定制的类装载器classLoader来装载。但这样的实现也并非无懈可击,类装载器本身也是Java文件,破解了类装载器也就破解了解密的过程,hacker还是能够反编译出源代码。所以说,这些做法只是尽可能的增加被破解难度,还是无法真正杜绝被破解。

另外Mac地址部分的实现也存在漏洞,据说现在有不少软件可以修改Windows、Unix下的机器的Mac地址(也许不是真正的修改,只是干扰我们调用ipconfig /all 或者 ifconfig等命令读取Mac地址的时候,读取的是这些软件设定的Mac地址)。对这方面还不是很了解。

以上是我的一些实现思路和方法,权当抛砖引玉,欢迎大家拍转。
分享到:
评论
1 楼 0dragon 2012-06-29  

相关推荐

    可在线激活的软件license java实现源码

    本程序还可以用定时器或job机制启动周期性检查,避免软件超过保护期运行。有效包含您的软件资产。 本软件既提供了保护源码的license控制端源代码,还包括了用户在线激活的运营端源代码,运营端代码还包括一个基于...

    Java实现的license生成器

    在IT行业中,软件许可(License)是保护知识产权和控制软件使用的重要手段。本文将深入探讨如何使用Java语言来实现一个自定义的License生成器,并结合图形化用户界面(GUI)来提升用户体验。以下是对该主题的详细...

    javaEE防盗版-License开发

    开发的软件产品在交付使用的时候,往往会授权一段时间的试用期,这个时候license就派上用场了。不同于在代码中直接加上时间约束,需要重新授权的时候使用license可以避免修改源码,改动部署,授权方直接生成一个新的...

    license 生成license文件demo

    - 软件产品信息:产品名称、版本等。 - 用户信息:用户名、公司名、许可证ID等。 - 授权范围:比如允许的机器数、使用期限、功能限制等。 - 数字签名:使用私钥对文件进行签名,确保其未被篡改。 标签中的"demo...

    license生成步骤和demo

    `License`证书是一种数字凭证,由软件开发者颁发给用户,表明用户有权使用特定的软件产品。在Java中,我们通常通过生成和验证密钥对来实现这一功能,这涉及到公钥加密和数字签名技术。 1. **生成密钥对**: 使用...

    SpringBoot 整合 TrueLicense 实现 License 的授权与服务器许可1

    在本文中,我们将探讨如何使用SpringBoot与TrueLicense框架进行整合,以便实现软件的授权和服务器许可管理。TrueLicense是一个强大的许可管理系统,可以帮助开发者保护他们的应用程序免受非法使用。 首先,我们需要...

    java授权框架

    通过使用此框架,可以轻松地实施许可证策略,确保软件产品只能在符合特定条件的情况下运行。特别是对于那些希望采用浮动许可(或称并发许可)模式的开发者来说,LICENSE4J提供了全面的支持。 #### 浮动许可简介 ...

    License管理_流程和页面设计

    从提供的文件信息中我们可以提炼出以下知识点: ...对于密钥仓库的管理、公钥和私钥的正确生成与存储、License文件的加密和解密、以及密钥对的正确使用和验证机制都是构建安全有效的License管理系统的重要组成部分。

    Sentinel LDK Envelope保护Java程序的说明.zip_Sentinel envelope_dollsgo_l

    Sentinel LDK(License Development Kit)是Safenet的授权管理工具套件,而Envelope是其中一种保护机制。它允许开发者将加密的代码和敏感数据封装在"信封"中,确保只有合法用户能够访问和执行。这种保护方式有助于...

    true-license源码+中文注释

    总结来说,`TrueLicense`是一个强大的工具,通过其源码和中文注释,开发者不仅可以了解软件授权的基本原理,还能深入学习Java加密技术和软件安全策略。无论是对于个人项目还是商业软件,集成`TrueLicense`都是保护...

    weblogic9.2 MP3 license文件源码

    对于源码部分,虽然这里没有提供具体的源码内容,但在WebLogic 9.2 MP3这样的产品中,源码通常涉及到服务器的运行机制、管理工具、JVM配置优化、安全性设置等多个方面。开发者可能会对源码进行定制,以适应特定的...

    JAVA程序员必须了解的7大开源协议.pdf

    此外,使用GPL许可证的软件产品必须同样采用GPL许可证,即必须开源和免费。这就是所谓的“传染性”。这意味着如果一个软件项目中包含了GPL授权的组件,那么整个项目必须也采用GPL许可证。 #### 5. LGPL (Lesser ...

    weblogic9.2_full_license.rar

    WebLogic Server 9.2 是 Oracle 公司的旗舰级应用服务器产品,它是一个功能强大的 Java EE 平台,用于构建、部署和管理企业级 Web 应用程序。"weblogic9.2_full_license.rar" 文件很可能是包含了 WebLogic Server ...

    Java编程语言外文翻译、英汉互译、中英对照.doc

    Java是一系列由Sun Microsystems(现在已合并到Oracle Corporation)提供的计算机软件产品和规范,它们共同构成了一个跨平台计算环境中的应用软件开发和部署系统。Java广泛应用于各种计算平台,从低端的嵌入式设备和...

    IBM RATIONAL V7.0的LICENSE 10多万搞的 全套 版本V7

    IBM Rational 是一家专注...其高昂的LICENSE费用反映了其专业性和全面的功能,而nodelock许可机制则确保了软件使用的合法性。对于大型企业和组织来说,这样的投资可以有效提升开发效率,保证软件质量,并促进团队协作。

    [信息办公]简易java开源订销管理系统_javainfo.zip

    4. **安全机制**:可能包括身份验证和授权功能,使用Spring Security或Apache Shiro等框架保护系统免受未授权访问。 5. **RESTful API**:为了与其他系统集成,系统可能提供RESTful服务接口,允许通过HTTP协议进行...

    bertramoon-dgut-requests-master_java_

    5. **安全与认证**:实现身份验证和授权机制,确保只有授权的Anodoo实例可以与Java服务通信。 6. **并发与性能优化**:处理并发请求,确保服务的高效性和可扩展性,可能涉及到线程管理和缓存策略。 7. **测试与调试*...

    kmip4j-src-1.0

    在kmip4j项目中,"LICENSE.txt"文件通常包含了该项目的开源许可协议,可能是Apache License、MIT License或GPL等,这决定了用户可以如何使用、修改和分发这个软件。阅读并理解许可证内容对于合法合规地使用开源项目...

    mysql-connector-java-gpl-5.1.31.zip_The Count

    3. **GPL (GNU General Public License)**:MySQL Connector/J的GPL版本遵循开源软件许可证,这意味着源代码是公开的,可以自由使用、修改和分发,但通常需要在修改后的产品中保持相同的开源许可。 4. **Readme-...

Global site tag (gtag.js) - Google Analytics