如何防止反编译/破解净EXE(How to protect .Net exe from Decomp

2019-06-26 15:02发布

我真的很伤心,因为前几天,我们推出了在.NET 4.0(桌面应用程序)开发的软件。 3天后,其裂纹是在互联网上公布。 我们试图保护软件从此但不知何故人逃脱咔吧。

下面是这种情况:当应用程序启动第一次与Web服务器进行通信,并检查用户传递的凭据。 如果凭据是正确的,该软件保存在注册表中的值,发送机号返回到数据库的服务器和存储。

现在,黑客已经替换为服务器的通信“返回true;” 声明(我检查与Telrik JustDecompile)。 他上传了在互联网上的破解软件。

现在,下面是我的问题:
1 - 如何确保.NET应用程序也不会被弄裂了?
2-黑客现在知道我的代码,因为他已经做了修改。 我应该采取什么措施?
3-我看了网上关于 - 模糊处理。 但黑客知道我的代码我应该怎么办?
4-任何其他PRO提示,我可以用它来避免使软件破解?
5,我不知道,但可以将这些反射器软件也有敏感数据的反编译App.Config中?

Answer 1:

1 - 如何确保.NET应用程序也不会被弄裂了?

如果一台计算机可以运行你的代码+黑客可以在更高的特权级别比你经营自己的代码,没有什么能够100%阻止你的应用程序被破解。 即使他们只是有机会获得可执行文件,但不是目标平台,他们仍然可以逐步和模仿什么目标平台会做,并找出如何保护正在做。

2-黑客现在知道我的代码,因为他已经做了修改。 我应该采取什么措施?

完全重写认证部分,使他们不得不从头开始,但他们将再次得到它,它仅仅是一个多久的问题。

3-我看了网上关于 - 模糊处理。 但黑客知道我的代码我应该怎么办?

该尤金妮是出了瓶子的,现在他们有非混淆代码。 没有什么可以做,除非让他们不得不从头开始,你大大重新编写软件。 一个obfuscateor不能阻止的攻击者,他们只能够阻止它保持二进制出自其手的东西。

4-任何其他PRO提示,我可以用它来避免使软件破解?

我所看到的远程拖延任何时间段的唯一拷贝保护是什么育碧做了与刺客信条:兄弟会。 他们加密疗法水平与游戏盘,它有从互联网上下载的解密密钥,因为它需要(这是保持二进制脱离他们的手做法)。 但是,这并不会永远工作,最终将黑客确实得到解密的水平,这是完全破解。 这种做法正是我看到时间最长的时间来解决没有法律介入(底部看点2)

5,我不知道,但可以将这些反射器软件也有敏感数据的反编译App.Config中?

所有的反射器软件需要做的是寻找加载的App.config和读取默认值是什么部分。 没有存储在电脑上的信息不完全掌控安全的地方。 如果是在电脑上,就可以读出。 如果可以读,也可以进行反向工程。


唯一真正的解决方案,我可以看到,以防止盗版的两个选项之一。

  1. 此人从来没有得到您的应用程序,它是从一台服务器的控制下,流媒体以及他们从来没有看到二进制文件。 你给他们的唯一的事情是驱动用户界面所需要的信息。 这是所有MMO的工作的办法。 人们可以逆向工程什么要发送到用户界面和模仿是怎么回事你的服务器上的逻辑,但他们将永远无法完全看到它在做什么,如果你的软件是如此复杂,可能不feeseable对于攻击者重新创建服务器端代码。 这样做的缺点的方法是,你需要到主机服务器为您的用户连接到,这将是你需要一种方法来重新政变重新出现的成本。 通常这种方法取决于有多少处理完成客户端和多少处理完成服务器端称为“胖客户端”或“瘦客户端”。 请参见第22章 “的Microsoft应用程序架构指南,第二版 ”。 具体来说我描述什么是示出图4和5中

  2. 该seccond选择是谁你卖你的软件也让他们签署一份法律合同未分发软件(不是EULA,必须由客户在物理签订实际合同)。 在该合同有巨额罚款被应用到谁泄露该软件的人,然后用谜语所独有谁买的软件,使该计划被泄露时,你可以看到谁做的人的指纹程序。 (这是该方法的供应商六角光芒使用他们的反汇编IDA 。快速谷歌搜索也没有露面任何破解版比6.1更新的,他们都在6.3 )。 这种方法不会停止盗版,但它可以阻止拷贝到摆在首位被泄露。 这也可让您恢复与该程序首先被泄露相关的一些丢失的成本。 一个问题是,你将需要投入大量的指纹,他们将需要微妙的,如果一个攻击者可以得到程序的两个副本,并可以将文件比较两者之间,他将能够告诉什么是识别信息而只是把他们想要的,使他们不能告诉他们得到了来自谁。 要做到这一点的唯一方法是投入了大量的在红鲱鱼不能仅仅被剥离出来的或随机的,也使识别码非关键到运行该软件,如果他们没有合作,破解它他们更可能离开进去。


更新 :重新审视这个答案链接到它的另一个问题,我想到了实施#2解决方案的一个简单的方法之后。

所有你需要做的就是通过obfuscateor运行你的代码,让它重命名你的班每次你卖你的软件的人(我还是让他们签署许可协议,而不仅仅是点击EULA这样你就可以执行下一部分) 。 然后,使模糊映射的数据库,当你看到你只需要找到项目中的一个类的任意位置在互联网上泄露的副本,看看它在你的数据库,你就会知道是谁泄露它,知道你需要谁去后的法律赔偿。



Answer 2:

1:你不能。 你可以混淆,但防止这是唯一的方法:不给任何人的exe文件。 看看有多少游戏公司在这个花; 他们没有任何解决它。

2:混淆,将有助于一点 ,虽然这是混淆器和去混淆器之间的军备竞赛

3:来不及回去撤消,但混淆将来有点慢下来

5:的app.config通常是非常可读; 你没有什么可以在这里做的; 加密只会慢下来一点,如果钥匙在你的应用程序,因此获得



Answer 3:

正如其他人所说,真的没有什么可以做,与一个确定的饼干,如果他们有机会获得你的代码。 模糊处理将提供对一个懒惰的饼干一些保护。 Dotfuscator的内置VS你可以试试看。 请记住,有来混淆真正的成本。 从堆栈跟踪你的(支付)的客户送你这将使调试问题是非常困难的。



Answer 4:

最好的答案是一个你必须接受。 你不能。 只关注从而给用户带来出色的用户体验,并授权很容易。 您的应用程序可以被破解的可能性,并不意味着选择建立一个桌面应用程序是一个坏主意。 海盗将海盗和诚实的客户都将诚信客户。



Answer 5:

显然有足够的商业或知识产权价值开裂您的应用程序,有人用合理的技能尝试过几乎马上。

你会赢得这场战争的唯一方式是使用商业软件保护方案。

如果您尝试自己实现复制保护,你将是一个容易的目标再次破解。

如果你写一个业务应用程序,你会不会也写的是存储数据的数据库引擎。 你也应该不编写应用程序防裂代码。 这是不是解决了客户的问题,这需要极大的技能做是正确的。



Answer 6:

你能做什么,除了代码混淆是,加入基于硬件ID码解密的机制,心里有以下情形时,送他们HWID到你的服务器,你识别复制/所有者/安装数的/ etc与这HWID,和你在HWID基于一个能解密密钥的答复是特定的二进制(与前面提到的指纹),那么黑客将更难,因为对于全功能,他们需要你的服务器有效的访问,否则他们不能使用该软件。

干杯,



文章来源: How to protect .Net exe from Decompiling/Cracking