【问题标题】:How to protect .Net exe from Decompiling/Cracking如何保护 .Net exe 免受反编译/破解
【发布时间】:2012-07-27 12:39:42
【问题描述】:

我真的很难过,因为几天前我们推出了使用 .Net 4.0(桌面应用程序)开发的软件。 3天后,它的破解在互联网上可用。我们试图保护软件不受此影响,但人们以某种​​方式破解了它。

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

现在,黑客已将服务器通信替换为“return true;”。声明(我使用 Telrik JustDecompile 进行了检查)。并且他已经把破解的软件上传到网上了。

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

【问题讨论】:

  • 找律师....
  • 你使用C#这个事实也无济于事,反正你不能做太多这件事,只需要处理业务逻辑和算法并改进它们。
  • 这一切都有光明的一面。显然您的应用程序值得破解,您应该认为这是一种恭维。
  • 好吧,我们花了很多时间来制作它,而且目标市场也很大。伙计,我从来没有看到这个重新编译的东西来了:@
  • 需要思考的一件事:非法使用它的人——他们曾经不会为此付费吗?这些实际上是“销售损失”吗?在很多情况下,我敢打赌:不会。当然,这并没有减少它的烦恼。

标签: c# .net decompiler cracking


【解决方案1】:

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

如果计算机可以运行您的代码 + 黑客可以以比您更高的权限级别运行自己的代码,那么没有什么可以 100% 防止您的应用被破解。即使他们只能访问可执行文件但不能访问目标平台,他们仍然可以逐步完成并模仿目标平台会做什么,并弄清楚保护是如何完成的。

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

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

3- 我在互联网上阅读了有关 - 混淆器的信息。但是黑客知道我的代码我该怎么办?

现在 jinni 已经有了非混淆代码。除非您彻底重新编写软件,否则您无能为力,因此他们必须从头开始。混淆器不会阻止坚定的攻击者,他们唯一可以阻止它的就是将二进制文件置于他们手中。

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

我见过的唯一可以远程延迟任何时间的复制保护是育碧对刺客信条:兄弟会所做的。他们用游戏磁盘加密了关卡,并且必须根据需要从互联网下载解密密钥(这是将二进制文件放在他们手中的方法)。但这并没有永远奏效,最终黑客确实将这些级别解密并完全破解。这种方法正是我所看到的在没有法律参与的情况下花费最长的时间来解决的问题(见底部的第 2 点)

5- 我不确定,但是这些反射器软件也可以反编译带有敏感数据的 App.Config 吗?

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


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

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

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


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

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

【讨论】:

  • 如果应用程序从服务器流式传输到客户端,它仍然在客户端上。黑客拥有可以开始破解的二进制映像。
  • @EricJ。不流式传输二进制文件,仅流式传输 3 层程序中的表示层,业务逻辑层和数据库层将是服务器端。
  • “这个人永远不会得到你的应用程序,它是从你控制的服务器流式传输的,他们永远不会看到二进制文件。”
  • @user1470127 这将是“瘦客户端”或“富客户端”,具体取决于您想要在客户端进行多少处理。请参阅“Microsoft 应用程序体系结构指南,第 2 版”的 Chapter 22。具体来说,我正在描述figure 4 and 5 中显示的内容
【解决方案2】:

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

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

3:返回并撤消该操作为时已晚,但未来的混淆会减慢它们的速度

5:app.config 通常可读性很强;你在这里无能为力;如果密钥在您的应用程序中并且因此可以获得,加密只会减慢它们的速度

【讨论】:

  • @1:他们已经解决了,看看蒸汽和阀门。至少对于不完全正确的在线游戏而言。
  • @MareInfinitus 至少存在一个用于 Steam 游戏的通用启动器和一些模拟器,所有这些都绕过了它们的所有安全性。甚至在线也可能被破坏(育碧始终在线的服务器模拟器存在)。马克是正确的,这是无法解决的。
  • 天哪。这是一个糟糕的新消息:@。因此,制作桌面应用程序可能是一个错误的决定。
  • 好吧,如果我对此无能为力的话。在启动桌面应用程序之前,您能告诉我一个“必做之事”清单吗?
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      显然,破解您的应用程序具有足够的商业或智力价值,以至于具有合理技能的人几乎立即尝试了它。

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

      如果您尝试自己实施复制保护,您将很容易再次成为黑客攻击的目标。

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

      【讨论】:

      • @tremendous Skill set:你只需要比那些在某些情况下非常熟练的饼干更聪明。
      • The only way you will win that war is to use commercial software protection packages. 可能会在一段时间内为您带来一点优势,但即使您使用商业保护包,您仍然处于一场失败的战斗中。
      • 不同意 Lie Ryan 的观点——市面上有很多非常强大的反复制工具——寻找我已经发布的类似问题的答案。试试我们的(CodeMeter)或其他的(SafeNet 或 KeyLoc)。尽管很多人都相信,但您不必被破解。
      • @LieRyan:您可以在商业意义上获胜。如果世界排名第一的黑客对破坏您的应用程序感兴趣,他可以这样做。使用强大的商业软件保护往往会确保您的绝大多数真实用户群(真正愿意为应用程序付费的用户)购买许可证。毕竟,世界排名第一的黑客可能还会在被黑版本中插入垃圾邮件机器人。
      【解决方案6】:

      除了代码混淆之外,您可以做的是,添加基于hardwareID的代码解密机制,请记住以下场景,将其HwID发送到您的服务器,您识别副本/所有者/安装号/etc 使用该 HwID,并且您使用基于该 HwID 的特定二进制文件(使用前面提到的指纹)的解密密钥进行回复,因此黑客攻击会更加困难,因为要获得完整的功能,他们需要有效访问您的服务器,否则他们无法使用该软件。

      干杯,

      【讨论】:

        猜你喜欢
        • 2011-01-29
        • 2012-06-17
        • 2012-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-25
        相关资源
        最近更新 更多