问题 如何做好防裂保护?


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

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

所以问题是:

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

8294
2018-04-05 11:23


起源

“我怎样才能学到它?” - 首先寻找类似的问题。 - Henk Holterman
即使是DEA也无法做到有效的防裂保护。是什么让你觉得你可以? :-) - Stephen C
这是一个非常广泛,非常模糊的问题。你试图保护你的软件怎么样? - Dan Puzey
这不是一个重复 - 你可以做很多防卡,甚至没有涉及使应用程序更难反编译。 - Erik
@Erik:仍然有很多傻瓜,这里每周都要问几次。我刚刚在“相关”列表中选择了我能找到的最接近的。 - Henk Holterman


答案:


放弃:我为一家软件保护工具供应商工作(WIBU-系统)。

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

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

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


6
2018-04-05 23:06



你可以在这里找到WIBU加密狗模拟器 nodongle.biz/backup-tools/wibu-key-dongle-free-dumper - Bartosz Wójcik
“底线:只有安全的硬件加密狗,正确实施,才能保证不会破解。”检查加密狗和密钥的代码必须最终在if / then / else中,可以轻易绕过的测试不是吗? - Patrick from NDepend team
您好@JohnBrowne感谢您的深刻回答。请问他们用有效的许可证代码解密一个必要的DLL怎么样? - BKSpurgeon


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


3
2018-04-05 11:29





我会稍微转过头来考虑一下:

(1)采取简单(ish)措施,使你的计划 不是微不足道的 破解,例如在Java中:

  • 混淆你的代码,所以至少让你的敌人不得不去寻找混淆代码反编译的温和麻烦
  • 也许写一个自定义类加载器来加载一些以自定义格式加密的类
  • 看看你的类需要公开哪些信息(例如,子类/接口信息不能被混淆)并思考
  • 把一些小的关键功能放在DLL /格式中不太容易拆解

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

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

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


2
2018-04-05 11:47





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

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

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


0
2018-04-05 11:47





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

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

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

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

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

3 - EXE加密

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

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

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

即便如此,也没有什么比不被破解的了;)

祝你好运。


0
2018-03-21 17:26



你好@delphirules - 谢谢你的回答。你能详细说明第1点和第3点,因为我不确定你的意思。 - BKSpurgeon
@BKSpurgeon在第1点,我的意思是你在项目的敏感区域创建代码,以检查EXE是否一致。例如,你可以检查它的exe大小是否大于预期值,如果是,它可能是一些破解者解压缩它。或者,如果有任何破解工具正在运行,您可以检查正在运行的进程列表,它会强制关闭应用程序。在第2点,我的意思是使用一些EXE加密工具,如AsProtect。顺便说一下,到目前为止我一直保持未破解:) - delphirules
非常感谢你帮助了许多人。我打算做你的建议。加密是否有用,为什么不使用混淆器呢? - BKSpurgeon
@BKSpurgeon什么使防裂保护有效是多种方法的结合。实际上你不可能真的让你无法破解你的软件,但你可以让它变得如此艰难和痛苦,以至于破解者会选择其他软件;) - delphirules


我的目的如下:

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

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

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

  • 安装程序请求“Licese_number”以及名称和姓氏,然后它将这些数据发送到服务器并下载名为“KEY3”的密钥(如果这些数据对应于有效销售)。

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

  • 安装程序使用16位的“哈希”检查KEY1。应用程序使用KEY1密钥加密。然后用密钥解密应用程序并准备就绪。

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

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

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

你觉得这个方法怎么样?


0
2018-01-15 23:30



这只是加密软件吗? 1)有人可以购买该软件,然后在线发布。或者2)如果加密不够强硬,有人可以强制它。 - Michael Ozeryansky