通过加密保护软件

时间:2008-10-22 20:06:27

标签: .net protection

对于我们的软件,我们使用硬件加密狗来保护软件。没有保护是完美的,但这种商业解决方案是负担得起的,并保持诚实的人诚实(如另一个线程中所述)。优点是128位密钥在硬件加密狗上存储“不可读”。

我们要删除此硬件加密狗并开始使用软件保护。基本上我们可以使用商业产品,但另一方面也不会破坏。我对加密知之甚少,这就是我发布这个的原因。如何在Windows计算机上存储无法使用Reflector或其他内容读取的密钥?但是,我应该能够访问用于测试许可证代码的密钥。

我想要一个简单的解决方案,只需使用Reflector就无法攻击。

或者我问一个非常愚蠢的问题?


感谢大家的快速回复。我不想在互联网上使用许可,因为应用程序并不总是在连接的计算机上运行。然后我会得到更多问题然后解决它们。我们现在很可能会寻求商业解决方案。似乎保护不是那么微不足道。

非常感谢!!

14 个答案:

答案 0 :(得分:17)

无法完全保护密钥。如果您的程序可以读取它,那么它可以被另一个程序读取。

答案 1 :(得分:13)

我经营一家处理这个问题近20年的软件公司。作为开发人员和企业主,我想首先鼓励您稍微扩大您的目标。例如,将您的问题定义为“防止盗版”只是一个错误。您的目标应该是实现收入最大化。

话虽如此,有些人根本不会购买你的软件,但可能会做出相当大的努力来免费获得它。他们获得免费副本并将大量资源投入到防止它的努力中并非“公平”,这在很大程度上是浪费时间。事实上,这些人通常最终“合法”只是为了获得我们的更新列表,获得支持,或者因为他们的业务发展到他们现在可以负担我们的许可证的程度。在这些情况下,最初的盗版最终会增加我们的收入。

那么,我们如何获得许可?

我们为每次新安装生成一个随机许可证号码(10K到99K之间的数字很好)。然后,我们有一个生成匹配数字的算法(任何非平凡的事情都可以)。顺便说一下,我们使用随机数,这样任何在另一台计算机上重新安装的尝试都会产生不同的许可证/匹配号。

接下来,我们要求用户在手机上致电我们以获取其许可证的匹配号码(这很重要)。软件会查看输入的匹配数字,并将其与用户侧生成的匹配值进行比较。如果匹配,则软件完全激活。

我说让他们给我们打电话很重要,因为我们以此为契机与他们讨论他们的设置,回答任何问题,让他们知道他们正在与真人打交道。很少有人有勇气尝试打电话和冒充另一家公司(我们查看并将他们的信息与我们的购买数据库进行比较)。请注意,我们的套餐运行近2千美元,因此电话合理。如果您的包裹成本更低且数量更多,您可以通过电子邮件进行此操作。最后,我们使用call-in告诉用户如何使用新许可证获得升级和技术支持。

最后,我们将密钥存储在应用程序的数据库(本地安装的MSDE / SQL Express数据库)中,这样任何复制应用程序的尝试都将是非常重要的,并且B)带来了大量特定于首先购买合法版本的组织(使他们不太可能分享)。许可密钥被加密并“分割”成两个不同的密钥,这两个密钥保存在两个不同的表中。因此,简单的“找到密钥并将其输入盗版版本”将无效。

底线?当您制作整个软件包而不仅仅是软件,构建一些基本的保护机制,并介绍人为因素时,您应该看到您不需要加密狗的费用和麻烦来最大化收入。

答案 2 :(得分:10)

当然,绝对的答案是,一个坚定而有技巧的攻击者可以打破任何保护,但是,特别是对于没有高要求或名望的软件,熟练和坚定的攻击者是罕见的,所以采取保护措施有道理。

要验证许可证,将密钥发送到中央位置是最安全的方法,因为他们必须破解您的服务器(或协议,注意)以便能够验证。这需要连接才能使用可能或可能不可行的软件。您还可以将“许可证服务器”与软件一起分发,以进行仅需要本地网络访问的大型安装。如果您不能并且必须仅在本地验证,那么您可以在本机代码中编写一个dll,这会使逆向工程变得更难。

为了保护代码本身,并使其保护更难绕过,混淆:

总而言之,您可以从打包的解决方案中获得更好的价值。

答案 3 :(得分:3)

这就是为什么复制保护和'保持诚实用户诚实'是一场失败的战斗。你不需要保持诚实的用户诚实,他们已经是。

目前,大多数有效的版权保护计划都围绕对中央服务器进行偶尔的密钥检查。让应用程序经常检查它对中央服务器的密钥,并且您可以确定软件是否正确许可。显然,我过度简化了很多事情,但这是一种方法。

答案 4 :(得分:3)

我通过有关加密保护软件how skype approaches the task的有趣演示文稿阅读。

答案 5 :(得分:1)

基本上,您需要使用商业解决方案。这里的方法与加密狗不同,你不能指望简单地复制加密狗。

相反,主要的解决方案是使用某种键,该键部分来自运行软件的计算机。做同样事情的Keygens可以由破解者制作,但事实如此。他们可以简单地修补你的软件,而不是寻找加密狗。

答案 6 :(得分:1)

我的建议是,如果它适合居住,请坚持使用加密狗。那些往往是最可行的方法。

如果它不是一个选项,那么一定要去外部提供商。你会寻找一些关键功能(没有双关语):

  • 安全存储密钥
  • 许可证检查
  • 编译时混淆(使您的应用程序更难拆解)

这些都不是肯定的。最重要的是,开发人员长期以来一直在打击盗版,而且当海盗确定不够时,我们总是失败。如果你的主要目标是保持诚实的人诚实,那么一个体面的商业软件保护包可能会为你做到这一点。

答案 7 :(得分:0)

虽然没有什么是完美的,但如果您想自己动手,请查看CryptProtectData API。

老实说,只要购买解决方案,你就可能不那么头疼了。

答案 8 :(得分:0)

这些数据只是商业用途或与工人共享的东西吗?

如果是后者,也许你可以编写一个快速的c ++程序来编写它。基本上,如果密钥长度等于文档的长度,它应该是“牢不可破的”。我在c ++中做的是创建一个文档大小的随机字符缓冲区,然后xor它,然后单独发送文档和密钥文件,然后另一个人将它们放在一起以获取文档。

不知道这对你有帮助。

答案 9 :(得分:0)

如果您将密钥存储在用户本地计算机上,无论您多么努力地阻止此密钥,黑客都可以访问它。

为什么不远程存储复制保护代码的密钥或关键部分,也可以远程处理它?<​​/ p>

答案 10 :(得分:0)

为密钥生成哈希(SHA1,MD5等)并对应用程序中的哈希进行硬编码。将密钥分发给您的用户。在您的可执行文件中,可以针对硬编码哈希检查用户指定密钥的哈希:

bool CheckKey(string keyFromUser) 
   return SHA1(key) == "ABC2983CF293892CD298392FG";
}

这意味着任何能够从您的组织(或其他用户)获取密钥的人都可以运行该应用程序。通过检查可执行文件来确定密钥几乎是非常困难的。

这显然不是一个非常强大的保护。

答案 11 :(得分:0)

通常,可以破解非联网计算机上的软件。如果您的应用程序不够利落,以至于盗版者可以销售它的破解副本,那么您将会看到它。我听说过一个显然成功的解决方案是自我修改代码。

答案 12 :(得分:0)

您可以尝试通常在PC游戏中使用的标准方法,例如:SafeDiscStarForceSecuROM或任何其他copy protection software。这些系统是保护您的应用程序的最先进的软件系统之一。

尽管如此,经验告诉我们不仅没有软件保护系统,而且黑客打破它们所花费的时间与受保护内容的价值成正比。无论一个保护系统如何用于防止流行游戏的盗版副本,这个裂缝等待着几个月。

您已声明许可证服务器对您的系统来说是个麻烦,但我不会马上放弃它。我认为许可服务器至少在第一次程序运行时发出许可证(比如每个安装不同的解密密钥)是减少盗版的最佳威慑措施。不仅受加密方法的强弱,而且主要是因为自动注册系统。如果您让客户知道软件激活密钥对于每个安装/用户是唯一的,并且存储并与用户的配置文件匹配,他们会考虑放弃密钥+软件。

答案 13 :(得分:0)

请允许我为您的问题添加一些想法:

  • 您的软件是否需要任何类型的互联网连接?
    • 如果答案为“是”,您可以监控使用情况。 (告诉客户这个功能!)
    • 如果答案为“否”,您仍然可以在大多数情况下监控使用情况,但是您无法强制建立与服务器的连接以使产品正常工作。
  • 您是否要为您的软件添加版权保护?这不是一个修辞问题,因为
    • 某些软件必须由软件公司或其合作伙伴定制。如果有人制作软件副本,必须由专家定制,那对他来说就没用了。
    • e.g。如果您的客户的员工想要将您的高端电路设计软件用于他在家的私人项目,并且您允许他这样做,那么您的客户网站上有人会在每个人的网站上投票支持您的产品购买决定。
    • 工作副本保护的工作量可能高于未经授权的副本造成的损失。 (请记住,您仍然可以将其包含在下一个版本中。)