要为加密狗附加系统编写哪些代码以提供更好的安全性?

时间:2009-08-25 16:39:55

标签: copy-protection dongle

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

  • 检查加密狗的存在
  • 检查适当的加密狗
  • 写入加密狗的内存位置
  • 从加密狗等的内存位置读取(我觉得休息不是那么好......)

我可以在源代码中做些什么,以便它变得更难破解。 Dongle提供商建议,我应该在循环或事件之后检查正确的加密狗存在,或者我应该以高效方式使用加密狗存储器。但是怎么样?我不知道破解者是如何破解的。请说清楚。提前谢谢。

P.S:请不要建议混淆。我已经做到了。

8 个答案:

答案 0 :(得分:11)

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

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

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

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

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

答案 1 :(得分:6)

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

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

基于每次运行创建的一些随机随机数或每次运行之间甚至保留的随机随机数来改变加密狗的内容,以便天真地记录和重放流量不起作用,将使后一种方法更难。

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

如果你有能力在加密狗中执行代码,你可以移动执行对你的应用程序至关重要的功能的代码,这意味着破解者必须重新启动代码或打破加密狗的物理安全 - 更昂贵提案(尽管仍然可行;意识到没有完美的安全性)。

答案 2 :(得分:4)

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

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

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

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

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

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

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

Maximizing Protection with a Simple Dongle for your Software

答案 3 :(得分:0)

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

我不知道您是否使用HASP,但不幸的是,dongles can be emulated

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:0)

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

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

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

如果你对你的加密狗进行了很多不同的调用,那么也许黑客只会模仿你的加密狗 - 或者发现单点故障(很常见的是改变一两个字节而你的所有电话都没用)。这是一个不赢的局面。

作为PECompact的作者,我总是告诉客户他们不能依赖任何东西来保护他们的软件 - 因为如果一个专门的破解者追随它,它就会被破解。你做得越难,对他们来说就越有挑战(好玩)。

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

答案 6 :(得分:0)

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

答案 7 :(得分:-1)

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

加密狗可能会阻止普通用户复制您的软件 - 所以从这个意义上说它已经足够了。但任何感到需要并且能够绕过加密狗的人都可能能够超越你工程师的任何其他方案。