如何从反编译/破解中保护.Net exe

时间:2012-07-29 17:39:07

标签: c# .net decompiler cracking

我很伤心,因为几天前我们推出了在.Net 4.0(桌面应用程序)中开发的软件。 3天后,它的裂缝在互联网上可用。我们试图保护软件不受此影响,但不知何故,人们逃脱了它。

以下是该方案: 当应用程序第一次启动时,它会与Web服务器通信并检查用户传递的凭据。如果凭据正确,软件会将值保存在注册表中,将MachineID发送回服务器并将其存储在数据库中。

现在,黑客已经用“return true”替换了Server通信。声明(我用Telrik JustDecompile检查过)。他已经在互联网上上传了破解的软件。

现在,以下是我的问题:
1-如何确保.Net应用程序不会被破解?
2-黑客现在知道我的代码,因为他已完成修改。我应该采取什么措施? 3-我在网上看到 - 混淆器。但是黑客知道我的代码该怎么办? 4-我可以用来避免破解软件的任何其他专业提示吗? 5-我不确定但这些反射器软件是否也能用敏感数据反编译App.Config?

6 个答案:

答案 0 :(得分:15)

  

1-如何确保.Net应用程序不会被破解?

如果计算机可以运行您的代码+黑客可以在比您更高的权限级别运行自己的代码,那么没有任何东西可以100%阻止您的应用程序被破解。即使他们只是可以访问可执行文件而不是目标平台,他们仍然可以逐步完成并模仿目标平台将要执行的操作,并弄清楚保护是如何完成的。

  

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

完全重写身份验证部分,因此他们必须从头开始,但他们会再次获得它,这只是一个问题。

  

3-我在网上看到 - 混淆器。但是黑客知道我的代码该怎么办?

由于他们拥有非混淆代码,因此jinni已经不在瓶子里了。除非你彻底重写软件所以你必须从头开始,否则你无能为力。一个混淆器不会阻止一个坚定的攻击者,他们只能阻止它将二进制文件从他们手中夺走。

  

4-我可以用来避免破解软件的任何其他专业提示吗?

我所看到的唯一一个在任何时间段内远程延迟的版权保护是Ubisoft对刺客信条:兄弟会所做的事情。他们用游戏磁盘加密了它的级别,它必须在需要的时候从互联网上下载解密密钥(这就是保持二进制文件无法接近)。但这并不是永远有效的,最终黑客确实将这些级别解密,并且完全破解了。这种方法正是我认为在没有法律参与的情况下花费最长时间才能到达的方法(见底部的第2点)

  

5-我不确定但这些反射器软件是否也能用敏感数据反编译App.Config?

所有反射器软件需要做的是查找加载App.config的部分并读取默认值。 没有 安全位置可以在您无法完全控制的计算机上存储信息。如果它在计算机上,则可以读取。如果可以读取,则可以进行逆向工程。


我能看到的防止盗版的唯一真正解决方案是两种选择之一。

  1. 这个人永远不会得到你的应用程序,它是从你控制下的服务器流式传输的,他们永远不会看到二进制文件。您发送它们的唯一方法是它们驱动UI所需的信息。这是所有MMO都在努力的方法。人们可以对您发送到用户界面的内容进行逆向工程,并模仿服务器上正在进行的逻辑,但是他们永远无法直接看到它正在做什么,如果您的软件足够复杂,那么攻击者可能无法做到这一点。重新创建服务器端代码。这种方法的缺点是你需要托管服务器供你的用户连接,这将是一个重复出现的成本,你需要一种方法来重新发动。通常这种方法称为“富客户端”#34;或"瘦客户端"取决于客户端处理完成了多少以及服务器端完成了多少处理。请参阅&{34; Chapter 22"的Microsoft Application Architecture Guide, 2nd Edition。具体来说,我正在描述figure 4 and 5

  2. 中显示的内容
  3. 第二种选择是,无论您销售软件的人是谁,都要签署一份不分发软件的合法合同(不是EULA,必须由客户签署的实际合同)。在该合同中,对泄露软件的人员进行大额罚款,然后用购买软件的人独有的指纹来捣乱您的程序,以便在程序泄露时您可以看到是谁做的。 (这是供应商Hex-Rays用于反汇编程序IDA的方法。快速谷歌搜索无法打开任何比6.1更新的破解版本,它们在6.3上。这种方法不会阻止盗版,但它可能会阻止副本首先泄露。这也可以让您恢复与首先泄露的程序相关的一些损失的成本。一个问题是你需要放置大量的指纹并且它们需要是微妙的,如果攻击者可以获得两个程序副本并且可以比较两者之间的文件他将能够分辨出识别信息是什么只要把他们想要的东西放进去,这样他们就无法分辨出他们是从谁那里得到的。实现这一目标的唯一方法就是放入许多红色鲱鱼,这样就不会被剥离或随机化,如果他们没有必要,也可以使识别代码对于运行软件至关重要。努力破解它,他们更有可能留下它。


  4. 更新:在重新审核此答案以链接到另一个问题后,我想到了实施#2解决方案的简单方法。

    您需要做的就是通过混淆器运行您的代码并让它为您销售软件的每个人重命名您的课程(我仍然会让他们签署许可协议,而不是单击EULA以便您可以强制执行下一部分)。然后创建一个混淆映射的数据库,当你在互联网上看到一个泄露的副本时,你只需要在项目的任何地方找到一个类,在数据库中查找它,你就会知道是谁泄露它并知道你需要谁寻求法律赔偿。

答案 1 :(得分:14)

1:你做不到。你可以混淆,但阻止的唯一方法是:不要给任何人exe。看看公司在这方面花了多少钱;他们也没有解决它。

2:混淆会帮助一点,尽管它是混淆器和去混淆器之间的军备竞赛

3:太迟了回去取消它,但是混淆会使他们在将来放慢脚步

5:app.config通常非常易读;你在这里做的不多;如果密钥在你的应用程序中并且因此可以获得

,加密只会减慢它们的速度

答案 2 :(得分:2)

正如其他人所说,如果他们能够访问您的代码,那么对于一个坚定的破解者,你真的无能为力。混淆将提供一些防止懒惰饼干的保护。 Dotfuscator内置于VS中,您可以尝试一下。请记住,混淆会产生实际成本。这将使您(付费)客户发送给您的堆栈跟踪调试问题变得非常困难。

答案 3 :(得分:2)

最好的答案是你必须接受的答案。你不能。只需专注于为用户提供出色的用户体验,并使许可变得非常轻松。您的应用程序可能被破解的可能性并不意味着选择构建桌面应用程序是一个坏主意。海盗将是海盗,诚实的客户将是诚实的客户。

答案 4 :(得分:1)

显然有足够的商业或知识价值破解你的应用程序,有合理技能的人几乎立即尝试。

唯一方式,您将赢得这场战争是使用商业软件保护包。

如果您尝试自己实施复制保护,您将很容易再次入侵。

如果编写业务应用程序,则不会编写存储数据的数据库引擎。您也不应该为您的应用程序编写防破解代码。这不是解决客户问题的方法,而且需要很大的技能才能做到这一点。

答案 5 :(得分:1)

除了代码混淆之外,你可以做的是,添加一个基于hardwareID的代码解密机制,请记住以下场景,将他们的HwID发送到你的服务器,你识别拷贝/所有者/安装号/ etc使用那个HwID,你用一个解释密钥回复基于该特定二进制文件的HwID(前面提到的指纹),所以黑客攻击会更难,因为完全功能他们需要有效访问你的服务器,否则他们不能使用该软件。

干杯,