2012-03-09 18 views
2

我想制定一种方法来防止我的应用程序被盗用,或者至少使其更难。该应用程序将安装在独立的个人电脑中,我想让个人难以简单地复制安装或复制硬盘驱动器,并将其部署到第二台PC上。 正在使用MAC地址的最佳方式?如何使用WMI获取主板ID?将Java应用程序锁定到特定的PC

+6

你已经失去了...... – 2012-03-09 19:26:53

+1

攻击者是否需要击败?他们是否可能拦截并重新解释用于检查这些事情的'java.lang.Runtime'和'java.io. *'用来进行系统调用?你是否需要担心Java应用程序正在安装在报告相同机器标识符的克隆VMWare实例上? – 2012-03-09 19:27:01

+0

你的应用程序真的值得这么多努力吗?如果不是,为什么要麻烦?如果是这样,有人会轻易破解它,这是你的努力浪费。 – biziclop 2012-03-09 19:30:34

回答

1

您可以根据网卡的MAC地址或PC名称(较弱的保护)生成一个机器ID,然后生成一个将机器ID转换为激活密钥的算法。

因此,您可以根据基于PC的唯一标识符激活程序。 然而,没有简单的方法来计算JAva中唯一的机器ID ...如果您只在Windows上运行应用程序,则可以从WMI中读取一些其他硬件值,并混合(例如,您可以混合使用HD Serial + MB serial + CPU Serial + Mac Address)将它们组合成一个密钥,这将强化更好的保护。

请记住,如果你在你的应用程序放在一个保护系统,你也至少应该混淆你的字节码,因为Java字节码是易于反和一个程序员,这将反编译你的应用程序将能够发现和使用algoritm那你整合了验证码...

1

我个人觉得在机器中使用标识符对客户来说不是很友好。当他们购买新机器并想要安装他们在新机器上合法购买的软件时会发生什么?

如果你要实现这样的东西,我相信最好是生成某种安装密钥并将它发送到你管理的web服务。然后,您可以查看某个密钥是否被大量使用并将其停用。

1

正常的java手段根本不存在。例如,通常应该使用MAC地址进行散列的UUID在java实现中并不如此。您可以做的是通过WebStart分发应用程序,提供定期更新机制并执行许可证检查。