Personaly我是服务器端检查的粉丝。 它可以像应用程序或用户每次运行时的身份验证一样简单。然而,这很容易破解。或者将一些代码部分放到服务器端,这会占用更多的工作量。
但是,您的程序将根据需要重新连接互联网连接,您将获得服务器的费用。但这是让它受到相对良好保护的唯一途径。任何独立的应用程序都会相对快速地破解。
更多的逻辑,你将移动到服务器端更难以破解它将得到。但它会值得的。即使像Blizzrd这样的大公司也无法阻止他们的服务器端被逆向设计。
的 放弃 强> :我为一家软件保护工具供应商工作( WIBU-系统 )。
停止破解就是我们所做的一切以及我们自1989年以来所做的一切。因此,我们彻底了解了SW如何破解以及如何避免破解。底线:只有安全的硬件加密狗,正确实施,才能保证不会破解。
最强大的反破解依赖于加密(对称或公钥)。加密可能非常强大,但除非密钥存储/生成同样强大,否则可能会受到攻击。除非你知道自己在做什么,否则很多其他方法也是可能的,即使加密也很好。纯软件解决方案必须将密钥存储在易于访问的位置,容易找到或容易受到中间人攻击。存储在Web服务器上的密钥也是如此。即使有良好的加密和安全密钥存储,除非你能检测到调试器,否则破解者只需获取内存快照并从中构建exe。因此,您需要在任何时候都不要在内存中完全解密,并且需要一些代码来进行调试器检测。混淆,死代码等不会长时间放慢它们的速度,因为它们不会在开始时通过代码开始破解。他们比那更聪明。只需看看网上的一些如何破解视频,看看如何从那里找到安全检测代码和破解。
简单无耻的推广:我们的硬件系统从未被破解过。我们有一个主要客户将其仅用于反逆向工程。所以我们知道可以做到。
我有一个非常受欢迎的应用程序(我不会在这里指定,当然为了避免破解者的好奇心)并且在过去曾经遭遇破解版本,这真的让我感到很头疼。
经过几个月的大量抗裂技术挣扎,自2009年以来,我可以建立一种被证明有效的方法,至少在我的情况下:我的应用程序从那时起就没有被破解。
我的方法包括使用三种实现的组合:
1 - 源代码中的大量检查(大小,CRC,日期等:使用你的创造力。例如,如果我的应用程序检测到执行OllyDbg等工具,它将强制机器关闭)
2 - 源代码中敏感函数中的CodeVirtualizer虚拟化
3 - EXE加密
这些都不是真正有效的:检查可以通过调试器传递,虚拟化可以反转,EXE加密可以解密。
但是当你完全使用时,它们会给任何饼干带来巨大的痛苦。
虽然它并不完美:如此多的检查会使应用程序变慢,而EXE加密会导致某些防病毒软件出现误报。
即便如此,也没有什么比不被破解;)
祝好运。
我的目的如下:
在家中创建一个名为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内容检查。
两者都可以检查是否正在调试。
两者都可以在执行期间加密代码部分。
你觉得这个方法怎么样?
像Java和C#这样的语言太高级了,并没有提供任何有效的结构来防止破解。你可以通过模糊处理使脚本小子变得困难,但是如果你的产品是值得的,那么无论如何它都会被打破。
我会稍微转过头来思考:
(1)采取简单(ish)措施,使你的计划 不是微不足道的 破解,所以例如在Java中:
但是,你去的努力越多,越严重的黑客就会将其视为“挑战”。你真的只是想确保一个普通的第一年计算机科学学位的学生不能在几个小时内破解你的程序。
(2)放置更微妙的版权/作者标记(例如图像中的元数据,可能巧妙地嵌入一个弹出窗口,该弹出窗口将在1年内出现在所有未连接并与您的服务器进行身份验证的副本中......)黑客可能不会打扰寻找/禁用,因为他们的黑客程序“按原样”工作。
(3)只是在你没有实际利用它的机会中将你的程序带走,并且不要太担心 - 如果有的话,它是一种病毒式营销形式。请记住,在许多国家,我们在英国/美国看到的我们珍贵物品的“盗版”被政府/执法部门公开容忍;不要将您的商业模式建立在不存在的版权执法基础之上。