中国是个盗版软件横行泛滥的国度,也许这里面有我们社会主义初级阶段这个国情的因素,我们确实离不开盗版软件。但要发展壮大本国的软件产业,知识产权保护亟需重视起来。除了寄希望于大环境方面的改善,我们自己也可以做些力所能及的事情,保护好自己的软件产品,以免自己的辛勤劳动成果被他人轻松窃取。
通常可以通过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地址)。对这方面还不是很了解。
以上是我的一些实现思路和方法,权当抛砖引玉,欢迎大家拍转。
分享到:
相关推荐
本程序还可以用定时器或job机制启动周期性检查,避免软件超过保护期运行。有效包含您的软件资产。 本软件既提供了保护源码的license控制端源代码,还包括了用户在线激活的运营端源代码,运营端代码还包括一个基于...
在IT行业中,软件许可(License)是保护知识产权和控制软件使用的重要手段。本文将深入探讨如何使用Java语言来实现一个自定义的License生成器,并结合图形化用户界面(GUI)来提升用户体验。以下是对该主题的详细...
开发的软件产品在交付使用的时候,往往会授权一段时间的试用期,这个时候license就派上用场了。不同于在代码中直接加上时间约束,需要重新授权的时候使用license可以避免修改源码,改动部署,授权方直接生成一个新的...
- 软件产品信息:产品名称、版本等。 - 用户信息:用户名、公司名、许可证ID等。 - 授权范围:比如允许的机器数、使用期限、功能限制等。 - 数字签名:使用私钥对文件进行签名,确保其未被篡改。 标签中的"demo...
`License`证书是一种数字凭证,由软件开发者颁发给用户,表明用户有权使用特定的软件产品。在Java中,我们通常通过生成和验证密钥对来实现这一功能,这涉及到公钥加密和数字签名技术。 1. **生成密钥对**: 使用...
在本文中,我们将探讨如何使用SpringBoot与TrueLicense框架进行整合,以便实现软件的授权和服务器许可管理。TrueLicense是一个强大的许可管理系统,可以帮助开发者保护他们的应用程序免受非法使用。 首先,我们需要...
通过使用此框架,可以轻松地实施许可证策略,确保软件产品只能在符合特定条件的情况下运行。特别是对于那些希望采用浮动许可(或称并发许可)模式的开发者来说,LICENSE4J提供了全面的支持。 #### 浮动许可简介 ...
从提供的文件信息中我们可以提炼出以下知识点: ...对于密钥仓库的管理、公钥和私钥的正确生成与存储、License文件的加密和解密、以及密钥对的正确使用和验证机制都是构建安全有效的License管理系统的重要组成部分。
Sentinel LDK(License Development Kit)是Safenet的授权管理工具套件,而Envelope是其中一种保护机制。它允许开发者将加密的代码和敏感数据封装在"信封"中,确保只有合法用户能够访问和执行。这种保护方式有助于...
总结来说,`TrueLicense`是一个强大的工具,通过其源码和中文注释,开发者不仅可以了解软件授权的基本原理,还能深入学习Java加密技术和软件安全策略。无论是对于个人项目还是商业软件,集成`TrueLicense`都是保护...
对于源码部分,虽然这里没有提供具体的源码内容,但在WebLogic 9.2 MP3这样的产品中,源码通常涉及到服务器的运行机制、管理工具、JVM配置优化、安全性设置等多个方面。开发者可能会对源码进行定制,以适应特定的...
此外,使用GPL许可证的软件产品必须同样采用GPL许可证,即必须开源和免费。这就是所谓的“传染性”。这意味着如果一个软件项目中包含了GPL授权的组件,那么整个项目必须也采用GPL许可证。 #### 5. LGPL (Lesser ...
WebLogic Server 9.2 是 Oracle 公司的旗舰级应用服务器产品,它是一个功能强大的 Java EE 平台,用于构建、部署和管理企业级 Web 应用程序。"weblogic9.2_full_license.rar" 文件很可能是包含了 WebLogic Server ...
Java是一系列由Sun Microsystems(现在已合并到Oracle Corporation)提供的计算机软件产品和规范,它们共同构成了一个跨平台计算环境中的应用软件开发和部署系统。Java广泛应用于各种计算平台,从低端的嵌入式设备和...
IBM Rational 是一家专注...其高昂的LICENSE费用反映了其专业性和全面的功能,而nodelock许可机制则确保了软件使用的合法性。对于大型企业和组织来说,这样的投资可以有效提升开发效率,保证软件质量,并促进团队协作。
4. **安全机制**:可能包括身份验证和授权功能,使用Spring Security或Apache Shiro等框架保护系统免受未授权访问。 5. **RESTful API**:为了与其他系统集成,系统可能提供RESTful服务接口,允许通过HTTP协议进行...
5. **安全与认证**:实现身份验证和授权机制,确保只有授权的Anodoo实例可以与Java服务通信。 6. **并发与性能优化**:处理并发请求,确保服务的高效性和可扩展性,可能涉及到线程管理和缓存策略。 7. **测试与调试*...
在kmip4j项目中,"LICENSE.txt"文件通常包含了该项目的开源许可协议,可能是Apache License、MIT License或GPL等,这决定了用户可以如何使用、修改和分发这个软件。阅读并理解许可证内容对于合法合规地使用开源项目...
3. **GPL (GNU General Public License)**:MySQL Connector/J的GPL版本遵循开源软件许可证,这意味着源代码是公开的,可以自由使用、修改和分发,但通常需要在修改后的产品中保持相同的开源许可。 4. **Readme-...