`
xiangxingchina
  • 浏览: 523552 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

权限 授权之 - License

阅读更多

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

     通常可以通过 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 地址)。对这方面还不是很了解。

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

分享到:
评论

相关推荐

    base-license.zip

    标题“base-license.zip”暗示了这是一个包含许可信息的压缩文件,通常用于软件或者框架的授权。在IT领域,特别是开源项目中,许可证是非常关键的部分,它们定义了软件的使用、分发和修改规则。这里提到的标签是...

    ehcache-core-ee-2.4.1 license 授权 注册 算号 keygen

    "license-public-key.x509" 文件则可能是一个X.509公钥证书,用于验证许可证密钥的合法性。X.509是一种标准格式,用于表示公开密钥证书,它通常用于加密通信、数字签名等安全应用。在这个上下文中,这个证书可能用于...

    KingBase-license-标准版.zip

    本文将深入探讨与KingBase相关的许可证文件——KingBase-license-标准版.zip,分析其对用户使用权限的影响,以及企业用户在使用该数据库时需遵守的条款和义务。 首先,要明确的是,KingBase-license-标准版.zip是一...

    tribon-m3-license

    标题中的“tribon-m3-license”指的是TRIBON M3软件的许可证系统。TRIBON M3是一款由Aker Solutions开发的船舶与海洋工程设计软件,广泛应用于船舶建造、海洋平台和其他海工结构的设计和详细工程阶段。这个许可证...

    Dash 4 系列许可 license.dash-license . Dash 4.1.2 亲测可用

    它包含了软件的授权信息,规定了用户可以如何使用、分发和修改软件。对于商业项目而言,正确理解和遵循许可证条款至关重要,以免触犯版权法,导致法律纠纷。Dash 4.1.2的许可证可能包括对免费试用期、功能限制、商业...

    .qt license下载

    `.qt-license` 文件是Qt商业版授权文件,它包含了使用Qt商业版所必需的法律条款和许可信息。在进行Qt商业版转换时,这个文件至关重要,因为它确保了用户对Qt库的合法使用权限。 首先,我们要理解Qt的开源与商业版的...

    Dash 4 系列许可 license.dash-license . Dash 4.2.0 亲测可用

    在 Dash 的背景下,这个文件可能包含了关于部署和运行基于 Dash 的应用的授权信息,以及对软件的使用限制。 Dash 的许可证可能涵盖了以下关键点: 1. **非商业与商业使用**:许可证可能区分了个人或非商业使用和...

    Intouch2014R2-Demo-License-to-2099.zip

    而“Intouch2014R2-License-to-2099”则很可能是包含授权信息的文件,需要在安装过程中输入以激活软件的试用权限。 在实际应用中,Intouch 2014 R2 提供了丰富的图形组件库,包括各种控件、图表、报警和事件管理等...

    parallel-studio-a-b-c-License

    在标签中,"parallel_License"和"License.lic"表明了主题与Parallel Studio的许可文件相关,"License.lic"是许可证文件的通用格式,通常包含软件的授权信息,如许可类型、有效期、使用限制等。在压缩包内,我们找到...

    dev-license-CD5L3-5K9OO-U7UXV-06HLC-9RQN.zip

    标题中的"dev-license-CD5L3-5K9OO-U7UXV-06HLC-9RQN.zip"似乎是一个开发环境相关的授权文件压缩包。通常,这样的命名方式暗示了它包含了一些软件开发工具或者框架的许可证信息。"CD5L3-5K9OO-U7UXV-06HLC-9RQN"可能...

    H3C CAS云计算平台-License申请指南.pptx

    License作为平台运行的核心组成部分,用于控制和验证软件功能的使用权限,确保用户按照购买的许可范围合法使用软件。 2. **H3C CAS License介绍** - **企业版 License** 企业版License提供了全面的功能,包括CVM...

    parallel-studio-a-b-c-d-e-License

    许可证文件是软件授权的关键,它们包含了软件的使用权限、功能限制和有效期等信息。对于Parallel Studio这样的专业工具,许可证文件通常是*.lic格式,用于验证用户是否拥有合法使用权,以及使用哪些功能。 在提供的...

    Citrix桌面虚拟化项目手册-License服务器安装和部署.pdf

    3. **导入授权文件**:将从Citrix获取的授权文件导入到License Server,确保授权文件中的主机名与计算机名完全匹配,且大小写正确。 4. **环境确认检查**:在部署后,要验证License Server的功能,检查所有必要的...

    license-V8R3-企业版-90天.zip

    "license-V8R3-企业版-90天.zip" 是一个包含90天试用许可证的压缩文件,它允许用户在90天内免费体验Kingbase V8R3企业版的所有功能。 在数据库管理领域,许可证(License)是软件供应商授予用户使用其产品的一种...

    LR-超级license

    在LR中,许可证(License)是控制工具使用权限的一种机制。不同的许可证类型对应不同的功能,例如基础版可能仅支持创建和执行测试,而更高级的许可证,如"超级license",则可能包含额外的功能,如并发用户模拟数量无...

    ACS 5.6 license(授权)

    在本案例中,我们关注的是"ACS 5.6 license(授权)",这是一个针对ACS(Access Control System)5.6版本的授权文件。ACS是由Axxys Technologies开发的一款强大的网络访问控制和身份验证解决方案,广泛应用于企业...

    华为路由器 使用License查询工具查看License项 操作指导

    系统会根据输入的条件搜索数据库,查找与之匹配的License信息。 5. **查看结果**:查询完成后,工具将显示与编码相关的License详细信息,这可能包括该License允许的功能、有效期、是否激活以及其他相关说明。 请...

    NVIDIA-ls-linux-2018.06.0.24304595 NVIDIA M60配套Linux版License服务器安装包

    2. `grid-license-server-user-guide.pdf`:这是License服务器用户指南,提供了详细的步骤和说明,帮助用户理解如何安装、配置和管理License服务器。 3. `grid-software-quick-start-guide.pdf`:快速启动指南,为...

    LICENSE-2.0.txt

    将LICENSE-2.0.txt文件放入ADT目录可能有助于解决依赖问题,因为它可能包含了必要的许可信息,允许Eclipse Classic 3.6.1正确识别并安装ADT。 综上所述,Apache License 2.0提供了一个明确的框架来定义和管理开源...

Global site tag (gtag.js) - Google Analytics