用License机制保护java软件产品

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

     一般能够经过license机制来保护软件产品的安全,咱们能够限定只有购买了license的用户在特定的机器上使用咱们的软件。

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

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

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

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

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

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


一、  定义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


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

二、  建立以及验证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);


三、  增强license机制实现模块的安全性

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

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

另外Mac地址部分的实现也存在漏洞,听说如今有很多软件能够修改Windows、Unix下的机器的Mac地址(也许不是真正的修改,只是干扰咱们调用ipconfig /all 或者 ifconfig等命令读取Mac地址的时候,读取的是这些软件设定的Mac地址)。对这方面还不是很了解
相关文章
相关标签/搜索