2011-09-03 46 views
1

我有一个基于Java 1.6的RCP应用程序。我在机器上使用虚拟机唯一ID作为数字来唯一标识机器,并根据此编号生成许可证密钥。VMId上Java RCP应用程序的许可证密钥

我已经完成了基本测试,它似乎工作得很好。我能够唯一标识每台机器,并且对于多个会话VMId保持不变(重新启动,注销等)。此外,如果我将我的软件安装复制到另一台机器,它不起作用。

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

等待专家的意见,

纳文

+0

你是如何计算的VMID?你在使用java.rmi.dgc.VMID吗? – Favonius

+0

是的,我使用相同的功能。它是否正确 ? – Naveen

回答

1

如果你看到的java.rmi.dgc.VMID

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

默认构造函数,那么你会发现,这取决于对IP的hash地址(对于使用localhost127.0.0.1的所有机器都是相同的)。但是(和它的一个但是),它也取决于java.rmi.server.UID

现在,作为每Javadoc中:

的独立产生的UID实例是 对于它在只要生成的主机随时间独一无二的,因为主机要求 多于一毫秒重新引导和其系统时钟从未设置为 落后。

现在没有可用的重启时间不到1毫秒的机器。我见过的最快的是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服务支持一次性注册,询问用户某些盐值(如他/她的名字,年龄),然后从中生成许可密钥。因此,如果您确定您的产品用户不会使用任何虚拟化技术(如vmplayer等),那么不存在多个与JVM相关的问题,并且他们可能没有可用的互联网一次性激活,然后继续使用它。

但请记住,对于一个坚定的攻击者没有任何软件是太很难打破,因为它是从盗版/破解游戏和在市场上的软件数量可见一斑。

+0

好的,所以对于连接到相同路由器的多台机器以及独立机器,VMId是不同的。在重启之间它也保持相同。我唯一要测试的就是时间旅行。我不关心MS-DOS,它不是我的客户端:)。我只是想知道是否有什么我可能会失踪之前,实际上推到我的prod软件 – Naveen

+0

@Naveen:看到我更新的答案。 – Favonius

+0

感谢您的详细回复。我将检查多个VM副本问题。尽管我的用户在技术上并不幸福,但我不会挑战他们采取我的许可逻辑。我也在考虑集成许可软件狗等,尽管没有解决如何有效地许可它。感谢您的帮助 – Naveen