【问题标题】:Protecting executable from being patched保护可执行文件不被修补
【发布时间】:2009-08-26 09:14:06
【问题描述】:

我对APT(Anti-Paching Technology)的逻辑如下...

1) 在 MSSQL 服务器上存储可执行文件的 md5 哈希以进行保护。

2) 执行 md5 比较(在我的应用程序启动中)在服务器上找到的哈希与可执行文件本身。

3) 如果比较失败,则静默退出应用程序。

所有这些在它最终被修补之前!

我的意思是保护文件不被修补的最佳方法是什么? 无需使用现成的工具(.net reactor、virtualizer 等)

编辑:我想到了别的东西。

有没有办法在服务器端检查应用程序的完整性? 我的意思是我的应用程序只能在线运行。我可以在服务器(我的域)上执行一些可以检查应用程序完整性的东西吗?

【问题讨论】:

  • 抱歉,我的母语不是英语。你能说得更具体点吗?
  • 除了公认的答案外,重要的是要注意 MD5 是一种死算法,您必须使用 SHA-2(SHA-0 和 SHA-1 同样死)。

标签: security executable md5 exec patch


【解决方案1】:

问题是破解者会在第 2 步精确地修补应用程序,删除哈希检查代码。

所以我不会说这对严重的饼干非常有效。

编辑:我想你最好的选择是深度防御,因为你的应用必须在线我会:

  • 需要身份验证:对用户进行身份验证,希望通过加密密钥进行,并且需要通过密钥检查来接收/发送数据。
  • 混淆:它让饼干变得更难。
  • 继续检查:除了检查谁在发送数据,每次发送请求时验证应用程序。

这些仍然可以被规避,但它们会使事情变得更加困难,并且如果您的应用对他们来说不值钱,它们可能会劝阻他们。

【讨论】:

  • 这就是为什么我在最终修补之前添加了“以及以上所有这些!”你能给我指点更安全的东西吗?
  • @gipap:破解者修改你的程序在运行之前。通过定义,您的程序在运行之前不能做任何事情。修改后它实际上不再是你的程序。
  • @MSalters:我的应用程序使用 Web 服务连接到 MSSQL 服务器。我可以计算尝试连接 Web 服务或其他任何东西的 winforms 应用程序的 md5 吗?
  • @Strakastroukas:本质上没有。如果他们可以修改系统上的程序,他们可以修改任何应该计算 md5 和的内容,以使其返回未修改版本程序的总和。
【解决方案2】:

打补丁的应用程序意味着“破解者”可以完全控制运行代码的机器(至少有足够的控制权来修补可执行文件)。因此,无论补丁预防多么聪明,它都在与控制流对抗。

使您的二进制文件复杂化可能足以阻止修补,因此混淆器可能是您的最佳选择。

【讨论】:

    【解决方案3】:

    你不能。一旦其他人拥有了您的文件,他们就可以对它做自己喜欢的事情 - 首先是修补您的反补​​丁代码。

    【讨论】:

      【解决方案4】:

      如果应用程序在其他人的机器上运行,您不能阻止他们修补它。你可以让它变得更难,但这是一场空壳游戏:你不可能赢。不管你把它做得多么复杂,某个地方的某个人会认为打破你的保护是一个有趣的挑战,他会成功。然后,其他人只需要下载他的版本。当今最极端的补丁保护形式是 Skype(据我所知)。它非常复杂,但它已经被打破了。

      由于您的应用程序显然是在线运行的,您可以问自己为什么首先要阻止补丁(也许是为了防止用户输入一些错误的值?或者是为了防止他们看到程序中存在的一些信息?),然后构建您的程序,以便您想要隐藏或检查的任何内容都发生在服务器上。

      例如,如果这是一款游戏,并且您希望阻止玩家入侵游戏以了解其他玩家的位置:更改服务器,使其仅发送您已经看到的玩家的坐标信息。

      另一个例子:如果它是一家在线商店,并且您想确保用户不会提交价格不正确的采购订单,请检查服务器上的价格。

      唯一的例外是您控制运行程序的硬件。但即使在那里,也很难做到正确(参见:XBox、PS3 以及许多其他试图做到这一点但失败的控制台)。利用客户端/服务器架构可能比押注“可信计算”更好。

      【讨论】:

        【解决方案5】:

        如今的破解者不会费心修补您的可执行文件;他们只是在内存中更改程序的变量,以使其行为更符合他们的要求。对此进行辩护非常困难,而且毫无意义;大多数游戏的破解保护只能通过搜索已知破解程序的签名来起作用(就像 AV 引擎一样)。

        【讨论】:

          【解决方案6】:

          每个人都做到了,你无法阻止某人,但你可以让他们更难,你甚至可以深入研究并制作一些内存验证的东西,比如魔兽世界的守望者系统。

          如果您告诉我们您使用的是什么语言,我们可能会建议一些简单的混淆方法。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-16
            • 1970-01-01
            • 2012-03-04
            • 2013-12-08
            • 1970-01-01
            相关资源
            最近更新 更多