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

msh*_*yem 10 copy-protection dongle

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

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

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

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

mmr*_*mmr 11

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

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

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

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

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


moo*_*dow 6

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

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

基于每次运行创建的每个测试来改变加密狗的内容,或者甚至可能在运行之间保留,以便天真地记录和重放流量不起作用,将使后一种方法更难.

但是,使用所描述的系统,模拟加密狗仍然是直截了当的,所以迟早有人会这样做.

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