我正在编写一个软件应用程序,用户需要为它购买许可证并激活它。我需要关于如何开始编写一个强大的代码生成算法,当然还有代码检查的建议。我知道人们可以反向设计代码并制造一个密钥,但是,我的问题有两个部分:
PS:也许值得一提的是,我正在使用Java作为我的开发语言。谢谢
发布于 2010-08-01 20:47:20
- A. Have you read [this thread here on SO?](https://stackoverflow.com/questions/1473143/methods-to-stop-software-piracy) It might give you some breadth on the issue.
- B. As @Jaka said, it's not a great challenge (from what I've read) to produce human readable code from Java byte code. You can run your code through [an obfuscator](http://www.google.com/search?client=safari&rls=en&q=java+obfuscator&ie=UTF-8&oe=UTF-8) to make it more difficult for someone to produce human readable code from it, but if someone really wants to read your code, they'll almost always find a way. The best approach to combat this is to take the advice in the SO thread I linked to: make it easier for someone to buy your app than for someone to steal it.
(在声明他使用Java后编辑)
发布于 2010-08-01 21:04:47
对于许可证密钥,您可以使用公共私钥加密。通过这种方式,您可以将私钥嵌入到软件中,并加密一个字符串,这对您的软件来说意味着什么(比如您的软件的哪些特性获得了许可)。或者你可以嵌入公开,给软件一个具有特殊意义的字符串,然后用你的私钥签名。然后,软件可以检查签名是否有效。
编辑:使用公钥-私钥答案 labratmatt更快:)
显然,您的保护的第二部分将需要处理使您的软件难以分解和调试的问题(这就是破解者如何检查您的软件,并试图通过补丁绕过保护,或者他们试图找出他们如何制作keygen)。这个部分实际上要困难得多,涉及的技术包括对整个可执行文件进行加密,并将其封装在加载器中,加载器在运行时对其进行解密。加载程序还可以使用各种技术来检测调试器的存在。
编辑:,因为您提到应用程序是用JAVA编写的,那么这个加密和打包步骤就更重要了,因为JAVA可以很容易地分解成一种非常可读的形式。有些“混淆器”程序会处理类,这样反编译器就不能生成可读的代码,但是破解它仍然比破解编译成机器代码的代码容易得多。
如果你不想花时间开发自己的保护,你也可以使用商业保护软件之一。他们中有相当多的人可以选择,他们提供了许多保护计划(软线,基于时间的许可证,.)
许多商业软件都使用FlexNet、HASP、Wibu-key等软件包。
发布于 2010-08-01 21:02:18
建议:加密应用程序中提供许可功能的部分。用户需要在购买时提供一个密钥,以便使用代码的这一部分。
如果您曾经让用户在购买之前运行您想要保护的代码,则没有非常安全的脱机解决方案。充其量,你可以阻止最随意的盗版。
https://stackoverflow.com/questions/3383608
复制相似问题