代码之家  ›  专栏  ›  技术社区  ›  Saher Ahwal

激活密钥安全算法

  •  6
  • Saher Ahwal  · 技术社区  · 14 年前

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

    1. 一般来说,不管应用程序以这种方式被破解,我如何开始编写一个算法来接受某个序列、字符串或组合(e、 g这是对的吗?e、 g:第一个数字是从3到9,第二个应该是第一个-3,而第三个数字应该是第二个*+….随便……??)

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

    谢谢

    6 回复  |  直到 14 年前
        1
  •  2
  •   Community Egal    7 年前
    1. public-key cryptography 接近。

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

      • 答。你读过吗 this thread here on SO? 它可能会让你对这个问题有更广泛的了解。
      • an obfuscator 如果有人真的想读你的代码,他们几乎总能找到办法。对付这种情况的最佳方法是采纳我链接到的SO线程中的建议:让别人更容易购买你的应用程序,而不是让别人窃取它。

        2
  •  1
  •   Jaka    14 年前

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

    labratmatt使用公私密钥的速度更快:)

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

    既然您提到应用程序是用JAVA编写的,那么这个加密和打包步骤就更为重要了,因为JAVA可以很容易地反编译成一种非常易读的形式。有些“模糊器”程序会把类弄得乱七八糟,这样反编译器就不能生成可读的代码,但是破解这个程序仍然比破解编译成机器代码的程序容易得多。

    很多商业软件都使用FlexNet、HASP、wibukey等软件包

        3
  •  0
  •   Borealid    14 年前

    如果您曾经让用户在购买之前运行您想要保护的代码,那么没有明显安全的脱机解决方案。充其量,你可以阻止最随意的盗版。

        4
  •  0
  •   dwich    14 年前

    你也应该考虑这样做的方式,一个键不能在两个不同的计算机上使用。只是为了防止一家公司购买一把钥匙,并将其用于多次安装。

        5
  •  0
  •   Dominic    14 年前

    你也写了你自己的JRE吗?构建一个安全的、功能强大的激活系统,能够顺利地处理您将遇到的一系列用户场景(没有网络连接的人、防火墙、代理服务器等),并在该领域经过彻底测试,这需要相当多的领域专业知识和时间。

    http://knol.google.com/k/dominic-haigh/issues-to-consider-before-building-your/2zijsseqiutxo/6#

        6
  •  0
  •   Community Egal    7 年前

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

    即使你在你的软件上加了一个非常强大的锁,盗版者仍然会找到破解它的方法,把它放到一个torrent网站上(例如:孢子)