这会让 Decompiling/Cracking 更难吗?
Does this make Decompiling/Cracking harder?
我目前正在开发一个商业 Java 应用程序,我正在尽最大努力防止它被破解。
我有一些想法,希望在该领域更有经验的人可以帮助我解决这些问题。
我正在使用 Server/Client 许可系统保护我的软件。
许可证如何工作的简单说明:
- 用户在线购买软件,并收到包含 hist 许可证哈希的电子邮件。
- 用户下载软件,并输入邮件中提供的许可证哈希值
- 软件会在线检查许可证是否曾被使用过,如果没有,则将其标记为已使用,并且 link 在数据库中将用户的硬件 ID 标记为已使用。下次用户登录时,服务器会根据提供的许可证检查他的 HWID,如果无效则将用户踢出软件。
- 成功验证后,软件从服务器下载并加载软件无法 运行 没有的变量。
- 我的软件不断检查服务器的变量(第 4 步)并且从不一次加载它们。
Server/Client 之间的通信使用安全的 SSL REST API。
我的软件 Obfuscated/protected 使用 Proguard。
此方法是否足以防止破解,如果不够好,您能否提供一些额外的提示来改进此方法?
非常感谢。
唯一的100%破解破解的方法就是将整个业务逻辑移动到云端。如果应用程序 运行ning 在客户端的计算机上,那么它就可以被破解。唯一的问题是您的软件是否足够有趣以至于黑客会花时间研究它。
听起来您已经在使用混淆器,将一些数据移动到云端并按需获取。我会说您已经受到保护,免受入门级黑客和一些 "IT specialists" 的攻击。我不会花更多的精力在上面,如果更高级别 "hackers" 想要破解它,他们会的。无论您使用何种加密方式,密钥(以及使用的算法)都将保存在您的应用程序内存中,因此可以获取这些密钥。
现代 DRM 工具的工作原理是从已发布的二进制文件中剥离代码的重要部分(不仅仅是变量),然后根据需要从服务器获取它们。他们试图为特定客户的机器上只会 运行 的差距提供此类代码(例如,通过为市场上的每个不同处理器编译代码,确保代码不会 运行 在其他模型上),因此为每个可能的硬件收集所有缺失的部分是不切实际的(或者至少需要很长时间)。但这很难使用 Java.
来实现
您还应该考虑一件事:更改每个版本的许可算法,并经常更新。通过这种方式,真正的客户可以无缝地获得新功能和错误修复,但是使用破解版的人要么每次都必须搜索新的破解版,要么坚持使用旧版本。最终他们中的一些人可能会决定购买该软件以避免不便。
我目前正在开发一个商业 Java 应用程序,我正在尽最大努力防止它被破解。
我有一些想法,希望在该领域更有经验的人可以帮助我解决这些问题。
我正在使用 Server/Client 许可系统保护我的软件。
许可证如何工作的简单说明:
- 用户在线购买软件,并收到包含 hist 许可证哈希的电子邮件。
- 用户下载软件,并输入邮件中提供的许可证哈希值
- 软件会在线检查许可证是否曾被使用过,如果没有,则将其标记为已使用,并且 link 在数据库中将用户的硬件 ID 标记为已使用。下次用户登录时,服务器会根据提供的许可证检查他的 HWID,如果无效则将用户踢出软件。
- 成功验证后,软件从服务器下载并加载软件无法 运行 没有的变量。
- 我的软件不断检查服务器的变量(第 4 步)并且从不一次加载它们。
Server/Client 之间的通信使用安全的 SSL REST API。
我的软件 Obfuscated/protected 使用 Proguard。
此方法是否足以防止破解,如果不够好,您能否提供一些额外的提示来改进此方法?
非常感谢。
唯一的100%破解破解的方法就是将整个业务逻辑移动到云端。如果应用程序 运行ning 在客户端的计算机上,那么它就可以被破解。唯一的问题是您的软件是否足够有趣以至于黑客会花时间研究它。
听起来您已经在使用混淆器,将一些数据移动到云端并按需获取。我会说您已经受到保护,免受入门级黑客和一些 "IT specialists" 的攻击。我不会花更多的精力在上面,如果更高级别 "hackers" 想要破解它,他们会的。无论您使用何种加密方式,密钥(以及使用的算法)都将保存在您的应用程序内存中,因此可以获取这些密钥。
现代 DRM 工具的工作原理是从已发布的二进制文件中剥离代码的重要部分(不仅仅是变量),然后根据需要从服务器获取它们。他们试图为特定客户的机器上只会 运行 的差距提供此类代码(例如,通过为市场上的每个不同处理器编译代码,确保代码不会 运行 在其他模型上),因此为每个可能的硬件收集所有缺失的部分是不切实际的(或者至少需要很长时间)。但这很难使用 Java.
来实现您还应该考虑一件事:更改每个版本的许可算法,并经常更新。通过这种方式,真正的客户可以无缝地获得新功能和错误修复,但是使用破解版的人要么每次都必须搜索新的破解版,要么坚持使用旧版本。最终他们中的一些人可能会决定购买该软件以避免不便。