10

我开发了一个软件(使用 C 和 Python),我想用加密狗保护它,以便复制和逆向工程变得足够困难。我的加密狗设备带有一个提供这些的 api:

  • 检查加密狗是否存在
  • 检查正确的加密狗
  • 写入加密狗中的内存位置
  • 从加密狗等中的内存位置读取。(我认为其余的不是那么好..)

我可以在源代码中做什么,使其变得更难破解。加密狗提供商建议,我应该在循环中或事件之后检查加密狗是否存在,或者我应该以有效的方式使用加密狗内存。但是怎么做?我不知道饼干是怎么裂开的。请阐明一些观点。提前致谢。

PS:请不要建议混淆。我已经这样做了。

4

8 回答 8

11

首先,要意识到加密狗只会提供一点点障碍。知道自己在做什么的人只会删除对加密狗的调用,并为调用的任何结果输入“真”。每个人都会告诉你这个。但是您可以添加一些障碍!

我会找到你的代码的关键部分,一些很难或很难知道的东西,需要领域知识的东西。然后把这些知识放在钥匙上。一个例子是着色器例程。着色器例程是发送到图形卡以实现特定效果的文本文件;一个非常简单的亮度/对比度过滤器只需不到 500 个字符即可实现,您可以将其存储在大多数加密狗的用户空间中。然后你把这些信息放在钥匙上,并且只使用钥匙中的信息来显示图像。这样,如果有人试图简单地移除您的加密狗,您程序中的所有图像都将被涂黑。这将需要某人拥有您的程序的副本,从密钥中获取文本文件,然后修改您的程序以包含该文本文件,然后知道该特定文件将是显示图像的“正确”方式。实施细节取决于您的部署平台。例如,如果您在 WPF 中运行程序,您可能能够将 directx 例程存储到您的密钥上,然后从密钥加载该例程并将效果应用于应用程序中的所有图像。然后破解者必须能够拦截该directx 例程并正确应用它。

另一种可能性是使用密钥的随机数生成例程来开发 UID。一旦有人删除了加密狗功能,所有生成的 UID 都将归零。

不过,最好的办法是将特定领域的功能放在加密狗上(例如整个 UID 生成例程)。不同的制造商在这方面会有不同的能力。

这些聪明才智会给你带来多少障碍?实际上,这取决于您的程序的受欢迎程度。您的程序越受欢迎,就越有可能有人想要破解它,并且会花时间来破解它。在这种情况下,如果您特别擅长加密狗编码,您可能会有几天的时间。如果您的程序不那么受欢迎(比如说只有几百个客户),那么只需一个加密狗就足以威慑,而无需做任何聪明的事情。

于 2009-08-25T16:46:59.587 回答
6

破解者将通过嗅探您的应用程序和加密狗之间的流量并禁用任何测试加密狗是否存在的代码或编写代码来模拟加密狗(例如通过重放记录的流量)来破解,以看起来更容易为准。

测试代码的混淆,以及以不同方式执行测试的许多分散的代码片段,以及在空间和时间上将测试的效果(禁用/降低功能,显示警告等)与测试本身分开使得前者方法更难。

根据每次运行创建的随机随机数或什至可能在运行之间保留的随机数在每次测试中改变加密狗的内容,以便天真地记录和重放流量不起作用,将使后一种方法更难。

但是,使用所描述的系统,模拟加密狗仍然很简单,所以迟早有人会这样做。

如果您有能力在加密狗内部执行代码,您可以将执行对您的应用程序至关重要的功能的代码移动到那里,这意味着破解者必须重新获取代码或破坏加密狗的物理安全性——这是一个更昂贵的提议(尽管仍然可行;意识到没有完美的安全性)。

于 2009-08-25T16:50:30.437 回答
4

如何使用简单的加密狗最大限度地保护?

如果生成的文件格式存在信封器,则将 API 与信封器一起使用。这是一个非常基本的规则。因为我们的信封已经配备了一些反调试和混淆的方法来防止普通的新手黑客放弃破解程序。也不建议只使用信封,因为一旦黑客可以破坏其他程序中的信封保护,他们也可以破坏您的。

在应用程序的很多地方调用加密狗 API。例如,首次启动时、打开文件时、打开对话框时以及处理任何信息之前。即使什么都没做,也可以做一些随机检查。

使用多个功能来保护程序。不要只使用查找功能来查找插入的加密狗。

使用多个 dll/库(如果适用)来调用加密狗功能。如果一个 dll 被黑客入侵,那么软件的其他部分仍然使用另一个 dll 的功能。例如,将 sdx.dll 复制到 print.dll、open.dll 和其他名称,然后从每个 dll 中定义不同名称的函数调用。

如果您使用 dll 文件调用加密狗功能,请将其与可执行文件绑定在一起。有相当多的程序能够做到这一点;例如 PEBundle。3

我在 PRLOG 上找到了这篇文章,发现它在使用简单的加密狗最大限度地保护保护方面非常有用。也许这个链接可以帮助你

使用简单的加密狗为您的软件提供最大程度的保护

于 2010-02-17T02:23:57.400 回答
0

使用智能卡+通过存储在卡中的秘密功能加密/解密工作文件。然后软件可以被盗版,但它无法打开正确加密的工作文件。

于 2010-11-06T03:48:19.290 回答
0

您可以在应用程序中实现许多检查点。

我不知道您是否使用HASP,但不幸的是,可以模拟加密狗

于 2009-08-25T16:52:00.077 回答
0

具有讽刺意味的是,您要阻止的不是用户的盗版,而是供应商的盗窃。互联网已经成为一个无法无天的地方,供应商可以随意窃取和转售您的软件。在某些情况下,您有法律追索权,而在其他情况下则没有。

如前所述,没有什么是万无一失的。此外,您的安全性越复杂,就越有可能给合法用户带来麻烦或问题。

我想说最安全的应用程序始终是最接近服务器的应用程序。可悲的是,用户担心它是间谍软件。

如果你对你的加密狗进行了很多不同的调用,那么破解者可能只会模仿你的加密狗——或者找到一个单点故障(改变一两个字节很常见,你所有的调用都是无用的)。这是一个双赢的局面。

作为 PECompact 的作者,我总是告诉客户,他们不能依靠任何东西来保护他们的软件——因为如果有专门的破解者追踪它,它就可以并且将会被破解。你越努力,对他们来说挑战(乐趣)就越大。

我知道这些事实,我个人在我的软件上使用了非常少的保护技术。

于 2010-09-26T16:54:57.110 回答
0

您可能想考虑使用 Dinkey Dongles 进行复制保护。

这似乎是一个非常安全的系统,文档为您提供了使用该系统提高整体安全性的提示。

http://www.microcosm.co.uk/dongles.php

于 2010-06-25T10:53:11.113 回答
-1

我想说,如果有人想破解您的软件保护,他们会这样做。当您说“足够难”时,应该如何解释“足够”?

加密狗可能会阻止您的普通用户复制您的软件——所以从这个意义上说,它已经“足够”了。但是任何觉得有必要并且能够绕过加密狗的人都可能能够通过您设计的任何其他方案。

于 2009-08-25T16:45:05.067 回答