`
infinite
  • 浏览: 42197 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

利用license机制来保护Java软件产品的安全

阅读更多

关键字:licenseJava、软件产品、数字签名、编译混淆、类装载器

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

     通常可以通过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地址部分的实现也存在漏洞,据说现在有不少软件可以修改WindowsUnix下的机器的Mac地址(也许不是真正的修改,只是干扰我们调用ipconfig /all 或者 ifconfig等命令读取Mac地址的时候,读取的是这些软件设定的Mac地址)。对这方面还不是很了解。

以上是我的一些实现思路和方法,权当抛砖引玉,欢迎大家拍转。个人邮箱 : lovejava@163.com

 

9
3
分享到:
评论
4 楼 yaolifei 2010-10-18  
引用
另外Mac地址部分的实现也存在漏洞,据说现在有不少软件可...
,如果把一段信息放到注册表里是不是好点。

3 楼 jasongreen 2008-09-08  
我以前也思考过这个问题,并且想自己编写ClassLoader
http://jasongreen.iteye.com/blog/60692
希望多交流
2 楼 infinite 2008-09-07  
引用
bearice 4 小时前 删除
我有一位学长说过一句话:用Java就想着开源吧……

这话不假,但用开源不等于我们自己做的就也要开源,没有商业利益的支持,公司和个人都无以存活啊
1 楼 bearice 2008-09-07  
我有一位学长说过一句话:用Java就想着开源吧……

相关推荐

    License管理_流程和页面设计

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

    weblogic9.2_full_license.rar

    WebLogic Server 9.2 是 Oracle 公司的...安装完成后,你可以利用管理控制台来配置和管理你的 WebLogic Server 实例,并部署你的 Java EE 应用程序。记得定期检查官方更新,获取最新的服务包以保持服务器的最佳状态。

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

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

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

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

    acegi-security-resin-0.8.1.jar.zip

    Acegi Security与Resin的集成使得开发者可以在Resin环境中利用Acegi的强大安全特性,保护Web应用免受未授权访问和其他安全威胁。 "acegi-security-resin-0.8.1.jar"是主要的库文件,包含了Acegi Security与Resin...

    [论坛社区]mvnForum v1.27 build 080627_mvnforum-1.27.rar

    9. **安全性和隐私**:作为公开论坛,mvnForum需要考虑用户数据的安全和隐私保护,包括密码加密、防止SQL注入、XSS攻击等安全措施。 10. **扩展性**:开源论坛软件通常允许用户通过插件或模块扩展功能,满足个性化...

    Android系统开发入门[定义].pdf

    由于Linux内核遵循GNU License,要求发布产品时公开源代码,而Android遵循Apache License,不强制公开源代码。因此,将硬件支持逻辑全部放在内核驱动层会导致硬件参数和实现细节的公开,不利于厂商保护商业秘密。...

    软件开发基础知识 v0.6

    通过以上介绍,我们可以看到《软件开发基础知识 v0.6》涵盖了软件开发领域的多个关键方面,从Cygwin的使用到Linux的基本知识,再到Java编程,这些内容都是从事软件开发工作不可或缺的基础。希望这些知识点能够帮助...

    PowerDesigner对象模型手册(英文).pdf

    - **Java平台**:在Java平台上创建Web服务,充分利用Java的强大生态。 - **.NET平台**:同样支持在.NET平台上创建Web服务,满足不同开发需求和技术栈的选择。 #### 七、合规性与限制 - **政府使用条款**:对于政府...

    TongWeb6.1.5.8 试用版

    3. **安全性**:支持SSL/TLS协议,可以进行加密传输,保护用户数据的安全。同时,具备防火墙、DDoS防护等功能,增强网络安全。 4. **动态扩展**:支持热部署,可以在不中断服务的情况下更新应用,便于维护和升级。 ...

    ant-jive-edition.jar.zip

    在我们的"ant-jive-edition.jar.zip"包中,"ant.license.txt"文件可能包含了Ant的许可协议信息,这对于遵循开源软件规范来说是至关重要的。 接下来,我们转向Jive Edition。Jive是一家专注于社交软件和协作平台的...

    atlassian-profiling-1.3.jar.zip

    在实际应用中,开发者会将“atlassian-profiling-1.3.jar”添加到他们的项目构建路径中,通过Java的类加载机制,程序运行时可以自动找到并使用这个库。通过调用库中的API,开发者可以在运行时收集和分析性能数据,...

    osgi spec 5.0

    此外,还提供了一个永久性的、非独占性的全球许可,允许创建并分发实现该文档的软件产品。需要注意的是,这些实现必须完全符合文档中的接口和功能要求,并且不得修改OSGi命名空间。 #### 四、OSGi Core Release 5的...

    OSGI企业技术规范

    对于实现该规范的软件产品,则需要完全遵循规范中规定的接口和功能,不得擅自修改OSGi命名空间。 此外,OSGi参与者(定义见OSGi知识产权政策)已作出承诺,不会对实施该规范所必需的专利权利提出主张,并提供了相应...

    eclipse4.2_part1

    3. `epl-v10.html`:Eclipse Public License v1.0的副本,Eclipse项目使用此许可证来授权软件的使用、复制、修改和分发。 4. `notice.html`:包含了有关软件组件的版权和许可信息,提醒用户注意遵守各个组件的授权...

    Alembik:一个Java(J2EE)应用程序-开源

    J2EE是Java平台上用于构建企业级应用的一个框架,它提供了服务器端组件模型、分布式服务以及管理和安全机制。 Alembik作为J2EE应用程序,意味着它可以部署在任何支持J2EE标准的应用服务器上,如Tomcat、GlassFish、...

    观辰进销存管理软件

    8. **产品文档**:《观辰应用管理中心2.5使用说明书.doc》和《观辰软件产品、应用功能与智能平台.doc》提供了详细的软件操作指南和功能介绍,帮助用户快速上手,充分利用软件的各项功能。 观辰进销存管理软件通过...

    Ibm Portal

    - **安全性**:提供了强大的安全机制,保护企业数据免受未授权访问。 #### 五、案例分析 假设某大型企业需要为其员工提供一个统一的信息访问入口,以提高工作效率和信息共享能力。在这种情况下,可以选择部署IBM ...

    ICE开发文档 Ice-3.4.0.pdf

    文档主要介绍了如何利用ICE进行分布式编程,覆盖了ICE的基本概念、架构设计、通信机制以及各种高级特性,例如安全性、性能优化等。此外,还提供了详细的示例代码和最佳实践指南,帮助开发者快速上手并高效地构建...

    talend手册

    Talend是一款广泛应用于数据集成领域的开源软件,它提供了丰富的数据处理功能和工具,帮助...通过掌握手册中的内容,用户可以有效利用Talend软件进行数据集成工作,从CSV文件中提取、处理数据,并将其加载到数据库中。

Global site tag (gtag.js) - Google Analytics