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

本文探讨了如何利用license机制保护Java软件产品安全,防止盗版。介绍了两种方法:一是自定义license机制,包括创建公钥私钥、签名验证等步骤;二是使用开源工具truelicense进行license生成和验证。文章详细阐述了每种方法的实施过程和技术要点,以增强软件安全性。
摘要由CSDN通过智能技术生成

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

(方法一 )自己实现思路

通常可以通过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文件的时候进行混淆,使得反编译出来的代 码可读性很差&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值