如何做好防裂保护?

时间:2011-04-05 11:23:22

标签: reverse-engineering cracking

我将开始说我知道,这是不可能阻止您的软件进行逆向工程。

但是,当我看一下crackmes.de时,有一个难度等级为8和9的裂缝(等级为1到10)。这些裂缝正在被天才大脑破解,他们写了一篇如何破解它的教程。有时,这样的教程长达13页! 当我试图制作一个crackme时,他们会在10分钟内破解它。接下来是一个长度为20行的“如何破解”教程。

所以问题是:

  • 如何使相对良好的防裂保护。
  • 我应该使用哪种技术?
  • 我该如何学习?
  • ...

6 个答案:

答案 0 :(得分:7)

免责声明:我为软件保护工具供应商(Wibu-Systems)工作。

我们所做的一切以及我们自1989年以来所做的就是停止破解。因此,我们彻底了解了SW如何破解以及如何避免破解。底线:只有安全的硬件加密狗,正确实施,才能保证不会破解。

最强大的反破解依赖于加密(对称或公钥)。加密可能非常强大,但除非密钥存储/生成同样强大,否则可能会受到攻击。除非你知道自己在做什么,否则很多其他方法也是可能的,即使加密也很好。纯软件解决方案必须将密钥存储在易于访问的位置,容易找到或容易受到中间人攻击。存储在Web服务器上的密钥也是如此。即使有良好的加密和安全密钥存储,除非你能检测到调试器,否则破解者只需获取内存快照并从中构建exe。因此,您需要在任何时候都不要在内存中完全解密,并且需要一些代码来进行调试器检测。混淆,死代码等不会长时间放慢它们的速度,因为它们不会在开始时通过代码开始破解。他们比那更聪明。只需看看网上的一些如何破解视频,看看如何从那里找到安全检测代码和破解。

简短的无耻宣传:我们的硬件系统从未被破解过。我们有一个主要客户将其仅用于反逆向工程。所以我们知道可以做到。

答案 1 :(得分:3)

Java和C#等语言过于高级,并且没有提供任何有效的结构来防止破解。你可以通过模糊处理使脚本小子变得困难,但是如果你的产品是值得的,那么无论如何它都会被打破。

答案 2 :(得分:2)

我会稍微转过头来思考:

(1)采用简单(ish)措施,以便你的程序不是很容易来破解,所以例如在Java中:

  • 模糊你的代码,这样至少让你的敌人不得不去寻找通过反编译代码反编译的轻微麻烦
  • 可能会编写一个自定义类加载器来加载一些以自定义格式加密的类
  • 查看您的类必须公开哪些信息(例如,子类/接口信息不能被混淆)并考虑一些方法
  • 将一些小的关键功能放在DLL /格式中,不易拆解

然而,你去的努力越多,越严重的黑客会将其视为“挑战”。你真的只是想确保一个普通的一年级计算机科学学位学生在几个小时内不能破解你的课程。

(2)将更多微妙的版权/作者标记(例如图像中的元数据,可能巧妙地嵌入一个弹出窗口,将在1年后出现在所有未与您的服务器连接并进行身份验证的副本中),黑客可能不会费心寻找/禁用,因为他们的黑客程序“按原样”工作。

(3)只是在你没有实际获得利润的国家把你的节目带走,不要太担心 - 如果有的话,它是一种病毒式营销的形式。请记住,在许多国家,我们在英国/美国看到的我们珍贵物品的“盗版”被政府/执法部门公开容忍;不要将您的商业模式建立在不存在的版权执法基础之上。

答案 3 :(得分:1)

我有一个非常受欢迎的应用程序(我不会在这里指定,当然要避免破解者和好奇心)并且过去曾经遭遇破解版本,这真的让我感到很头疼。

经过几个月的大量抗裂技术的挣扎,自2009年以来我可以建立一种被证明有效的方法,至少在我的情况下:我的应用程序从那时起就没有破解过。

我的方法包括使用三种实现的组合:

1 - 源代码中的大量检查(大小,CRC,日期等:使用您的创造力。例如,如果我的应用程序检测到执行OllyDbg等工具,则会强制机器关闭)

2 - 源代码中敏感函数中的CodeVirtualizer虚拟化

3 - EXE加密

这些都不是真正有效的:检查可以通过调试器传递,虚拟化可以反转,EXE加密可以解密。

但是当你完全使用时,它们会给任何饼干带来巨大的痛苦。

它并不完美,但是:如此多的检查会使应用程序变慢,而EXE加密会导致某些防病毒软件出现误报。

即便如此,也没有什么可以不被破解;)

祝你好运。

答案 4 :(得分:0)

Personaly我是服务器端检查的粉丝。 它可以像应用程序或用户每次运行时的身份验证一样简单。然而,这很容易破解。或者将一些代码部分放到服务器端,这会耗费更多的工作。

但是,您的程序将按照必要的方式重新连接互联网,并且您将获得服务器的费用。但这是让它受到相对良好保护的唯一途径。任何独立的应用程序都会被相对快速地破解。

更多的逻辑你将转移到服务器端更难以破解它将得到。但它会值得的。即使像Blizzrd这样的大公司也无法阻止他们的服务器端被逆向设计。

答案 5 :(得分:0)

我的目的是:

  • 在家中创建一个名为KEY1的密钥,其中包含N个字节。

  • 向用户出售"许可证编号"与软件。记下他/她的姓名和姓氏,并告诉他/她这些数据是激活软件所必需的,也是一个互联网连接。

  • 在接下来的24小时内将您的服务器上的"许可证号码",以及名称和姓氏,以及KEY3 =(KEY1 XOR hash_N_bytes(License_number,姓名和姓氏))

  • 安装程序要求输入" Licese_number"以及名称和姓氏,然后它将这些数据发送到服务器并下载名为" KEY3"如果这些数据与有效卖出相对应。

  • 然后安装程序使KEY1 = KEY3 XOR hash_N_bytes(License_number,name and surname)

  • 安装程序使用" Hash"检查KEY1。 16位应用程序使用KEY1密钥加密。然后用密钥解密应用程序并准备就绪。

  • 安装程序和应用程序都必须进行CRC内容检查。

  • 两者都可以检查是否正在调试。

  • 两者都可以在执行期间加密代码部分。

您如何看待这种方法?