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

标签 java database passwords activation

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

但是我不想让他把它给别人,就像你知道的那样,他下载了文件,所以他可以将它复制/粘贴到他的 USB 中,然后将它提供给更多人。

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

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

最佳答案

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

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

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

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

总而言之,大型软件公司的优秀工程师多年来一直致力于保护他们的软件,但我还没有看到一款软件在付出足够的时间和努力后无法被非法激活。

关于java - 防止应用程序被复制/生成激活密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32429734/

相关文章:

mysql - 是否可以在已存储现有数据的字段中添加数据?

mysql - Dockerfile 上的错误指令 COPY

复杂密码的 Javascript 验证

java - 如何从azure函数java中的POST请求中提取数据

java - 对于带有继承的 @OneToMany Hibernate 映射,插入失败

sql - 时态数据库设计,有一个转折(实时行与草稿行)

php - 此 php 登录代码始终不返回任何内容

c# - 生成随 secret 码

java - Camel : Bean Proxy to CXF Endpoint

java - 将程序打包为 jar 后文件输出发生变化