7

我正在编写一个用户需要购买许可证并激活它的软件应用程序。我需要关于如何开始编写强大的代码生成算法的建议,当然还有代码检查。我知道人们可以对代码进行逆向工程并制作密钥生成器,但是,我的问题是两个部分:

  1. 一般来说,不管应用程序以这种方式被破解,我怎样才能开始编写一个算法来接受某个 Serial 或 String 或组合。(例如,这是正确的吗?例如:第一个数字是 3-9 第二个应该是第一个 - 3,而第三个数字应该是第二个 * + ....whatever...??)

  2. 在不处理互联网的情况下保护桌面应用程序免受盗版的最佳方法是什么?是算法(使逆向工程更难),在应用程序安装到某处后保护源代码不被看到?...??

PS:也许值得一提的是,我使用 Java 作为我的开发语言。谢谢

4

6 回答 6

2
  1. 听起来您可能会从公钥加密方法中受益。

  2. 这可以分为两个子点:

    • A. 你在 SO 上读过这个帖子吗?它可能会给你一些关于这个问题的广度。
    • B. 正如@Jaka 所说,从 Java 字节码生成人类可读的代码并不是一个很大的挑战(根据我的阅读)。您可以通过混淆器运行您的代码,以使某人更难从中生成人类可读的代码,但如果有人真的想阅读您的代码,他们几乎总能找到方法。解决这个问题的最佳方法是采纳我链接到的 SO 线程中的建议:让某人购买您的应用程序比让某人窃取它更容易。

(在声明他使用 Java 后编辑)

于 2010-08-01T20:47:20.577 回答
1

对于许可证密钥,您可以使用公私钥加密。通过这种方式,您可以将私钥嵌入软件并加密一个对您的软件有意义的字符串(例如您的软件的哪些功能已获得许可)。或者您可以嵌入公共并给软件一个具有特殊含义的字符串并用您的私钥对其进行签名。然后软件可以检查签名是否有效。

编辑: labratmatt 使用公私钥答案更快:)

显然,您的保护的第二部分需要处理使您的软件难以反汇编和调试(这就是破解者如何检查您的软件并试图通过补丁绕过保护,或者他们试图弄清楚如何制作密钥生成器)。这部分实际上要困难得多,并且涉及诸如加密整个可执行文件并将其包装在加载程序中之类的技术,该加载程序在运行时对其进行解密。加载程序还可以使用各种技术来检测调试器的存在。

编辑:既然你提到应用程序是用 JAVA 编写的,那么这个加密和打包步骤就更加重要了,因为 JAVA 可以很容易地被反编译成人类可读的形式。有一些“混淆器”程序会弄乱这些类,因此反编译器无法生成可读代码,但破解它仍然比破解编译成机器代码的东西容易得多。

如果您不想花时间开发自己的保护,您也可以使用其中一种商业保护软件。它们中有很多可供选择,它们提供了许多保护方案(加密狗、基于时间的许可证……)

许多商业软件使用 FlexNet、HASP、Wibu-key 等软件包

于 2010-08-01T21:04:47.280 回答
0

您是否也编写了自己的 JRE?构建一个安全、功能强大的激活系统,可以顺利处理您将遇到的各种用户场景(没有网络连接的人、防火墙、代理服务器等),并且已经在该领域进行了全面测试,这需要大量的领域专业知识和时间。

作为此类系统的供应商,我们确实需要声明自身利益,但我们也有数据 - 我们看到许多公司信任开发人员,他们说他们可以建立一个许可系统,然后他们又回到我们这里因为它从来没有做他们需要的。这篇文章(我的)扩展了这些问题: http: //knol.google.com/k/dominic-haigh/issues-to-consider-before-building-your/2zijsseqiutxo/6#

于 2010-08-02T21:23:50.043 回答
0

https://superuser.com/questions/14224/how-to-explain-drm-cannot-work/14254#14254

即使您确实对您的软件进行了非常强大的锁定,盗版者仍然会找到破解它并将其放到洪流站点的方法。(例如:孢子)

您正在谈论 DRM,并且没有简单的方法(如果有的话)可以阻止盗版者盗版您的软件。此外,您正在与可以完成您的软件功能的免费产品竞争(总是如此),因此您应该更多地关注使您的软件易于安装和使用,而不是难以安装和使用超出您的预期。

于 2010-08-02T22:19:17.253 回答
0

您还应该以一个密钥不能在两台不同的计算机上使用的方式来做这件事。只是为了防止公司购买一把钥匙并将其用于许多安装。

于 2010-08-01T21:20:21.673 回答
0

建议:加密提供仅许可功能的应用程序部分。用户需要您在购买时提供的密钥才能使用该部分代码。

如果您让用户在他们购买之前运行您想要保护的代码,那么就没有非常安全的离线解决方案。充其量,您可以阻止最随意的盗版。

于 2010-08-01T21:02:18.503 回答