防止应用程序被复制/生成激活密码

Posted

技术标签:

【中文标题】防止应用程序被复制/生成激活密码【英文标题】:Prevent application from being copied/generate activation password 【发布时间】:2015-12-02 11:34:11 【问题描述】:

我制作了一个 Java(在 IntelliJ IDEA 上)应用程序,我想通过 USB 或 Dropbox 将它提供给某人。

但是我不希望他把它给别人,就像你知道的那样,他下载了文件,所以他可以将它复制/粘贴到他的 USB 并给更多人。

我给他申请后,有什么方法可以防止申请被复制吗?一开始我想做一个登录窗口,但后来我想“嘿,如果他知道登录应用程序的密码,他可以把应用程序交给某人并给他密码”,所以登录窗口不是选项(我认为?)。复制一次后是否可以使用 If 语句禁用复制/剪切功能?

或者我只能通过将我的应用程序与数据库链接并生成唯一密码来激活我的应用程序来防止它?例如,有人要求使用我的应用程序,所以我会给他应用程序,但他将无法运行它。然后我生成一个密码并将密码发送给他。但是,该密码只能使用一次,因此如果他尝试在 2 台不同的 PC 上使用相同的密码,则会给他一个错误。是否有任何在 Java 上制作类似内容的指南/教程/提示?

【问题讨论】:

谷歌“软件复制保护”。 【参考方案1】:

您可以为您的软件创建某种“激活码”,这些“激活码”是根据有关其运行的硬件的一些信息生成的。我见过一些人使用,例如 MAC 地址,您可以在 Java 中以独立于平台的方式获取该地址。

但是,请记住,这些技术仅适用于最基本的用户。任何知道如何使用 Google 的人都可以轻松更改 MAC 地址,即使您使用非常复杂的东西而不是 MAC 地址,Java 程序也很容易反编译,一旦攻击者知道什么功能正在检查程序是否正确激活,他/她可以很容易地更换它。是的,你可以混淆你的字节码,但这只会让任务变得更难,而不是不可能。

您可以按照您的建议执行并使用只能使用一次的密码,但是您的程序需要知道它已被激活,方法是将该信息存储在某处(文件或类似的东西)。一旦用户知道该信息的存储位置,就可以将其复制到其他计算机上。

不幸的是,一旦用户拥有了您的程序,您就无法控制他/她可以做什么。您可以通过根本不给他/她程序来确保用户不会做他/她不应该对您的程序做的事情。例如,您可以通过 Web 公开程序的功能。但是,正如您所说,没有什么能阻止用户与其他人共享登录凭据。是的,您可以检查用户是否从不同的 IP 地址访问该页面,但是合法用户可能会遇到问题,例如,从不同的 wifi 网络访问您的程序。在这种情况下,您的保护不仅无法解决问题,而且还会让诚实的用户感到恼火。

总之,大型软件公司的优秀工程师多年来一直致力于保护他们的软件,我还没有看到只要有足够的时间和精力就无法非法激活的软件。

【讨论】:

以上是关于防止应用程序被复制/生成激活密码的主要内容,如果未能解决你的问题,请参考以下文章

STP——生成树协议

激活设备管理器权限,防止被卸载

激活设备管理器权限,防止被卸载

如何防止(覆盖或格式化或克隆其他任何内容)我的 NFC TAG?

一个简单的监控木马分析

parallels desktop激活密钥