java - VMId 上 Java RCP 应用程序的许可证 key

标签 java licensing virtual-machine rcp

我有一个基于 Java 1.6 构建的 RCP 应用程序。我在计算机上使用虚拟机唯一 ID 作为数字来唯一标识计算机并根据该数字生成许可证 key 。

我已经完成了基本测试,看起来效果不错。我能够唯一地标识每台计算机,并且 VMId 对于多个 session (重新启动、注销等)保持不变。此外,如果我将软件安装复制到另一台计算机上,它也不起作用。

我唯一担心的是,这是否是为 RCP 应用程序构建许可算法的完美方法。他们的边界边缘场景是否会失败?我非常担心如果有人更新他们的java软件,是否会改变VMId。

等待专家意见,

纳文

最佳答案

如果您看到java.rmi.dgc.VMID的默认构造函数

public VMID() 
{
    addr = localAddr;
    uid = new UID();
}

然后您会发现它取决于 IP 地址的哈希(对于使用 localhost127.0.0.1 的所有计算机来说,该哈希值都是相同的)。但是(这是一个但是),它还取决于java.rmi.server.UID

现在按照 javadoc:

An independently generated UID instance is unique over time with respect to the host it is generated on as long as the host requires more than one millisecond to reboot and its system clock is never set backward.

现在没有可用的机器可以在不到一毫秒的时间内重新启动。我见过的最快的是 MS-DOS(不确定启动时间)和 Google OS(根据他们的宣传,需要 3-4 秒)。

因此,如果这是唯一的因素,我会感到安全,但我仍然会测试向后设置系统时钟因素。

<小时/> 如果我必须在多台机器上使用您的产品,但只为一台机器付费,那么我会将其安装在运行于 VMPlayer 或 VirtualBox 上的操作系统上。这样我就可以分发你的工具的多个副本。您检查过这个场景吗。

此外,在我的开发计算机上,我通常有两个不同的 JDK(最新的一个用于测试,第二个用于客户端特定的开发)。众所周知,VMID 和 UID 类早期在多个 JVM 中存在一些问题。检查这个:http://www.velocityreviews.com/forums/t131825-can-we-generate-unique-id-from-java.html .

另外,看看这个 javadoc:http://fuseyism.com/classpath/doc/java/rmi/dgc/VMID.html

通常,我见过的许可策略涉及的内容要多得多。就像(在 Windows 机器上)创建/使用一些注册表项值一样,由一些 Web 服务支持进行一次性注册,询问用户一些盐值(例如他/她的姓名、年龄),然后从中生成许可证 key 。

所以,最后,如果您确定您的产品用户不会使用任何虚拟化技术(如 vmplayer 等),那么不存在与多个 JVM 相关的问题,并且他们可能没有可用于一次性激活的互联网,那么就使用它吧。

但请记住,对于坚定的攻击者来说,没有什么软件是很难破解的,市场上盗版/破解的游戏和软件的数量就证明了这一点。

关于java - VMId 上 Java RCP 应用程序的许可证 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7293645/

相关文章:

java - 包含 XML 内容的 CXF Web 服务响应

javascript - Cordova 捕捉向上、向下、向左、向右按钮

dll - MS-RL 商业应用

ubuntu - 在 Vagrant 中创建一个 docker swarm 集群

java - 如何将 XML 中的函数式语言转换为 Java?

使用 GPL 代码和非 GPL 许可证的许可软件

node.js - 开源 Node.js 项目(MEAN 堆栈)能否在 GPLv3 下获得许可?

python - Azure是否允许应用程序需要OpenGL,有什么办法可以解决吗?

android - 为什么 Android 模拟器比 Windows 虚拟机慢得多?

java - 使用 java spring MVC 的 angularjs 登录应用程序