保护可执行文件不被修补

时间:2009-08-26 09:14:07

标签: security executable md5 exec patch

我的APT(反剥离技术)的逻辑如下......

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

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

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

以上所有这些都在它最终被缓存之前!

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

编辑:我想到了其他一些事情。

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

6 个答案:

答案 0 :(得分:5)

事情就是破解者会在第2步中精确修补应用程序,删除哈希检查代码。

所以我不会称这对严肃的破解者非常有效。

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

  • 要求身份验证:通过加密密钥验证用户,并需要密钥检查才能接收/发送数据。
  • 混淆:这使得破解者更加困难。
  • 继续检查:除了检查谁在发送数据外,每次发送请求时都要验证应用程序。

这些都可以被规避,但如果你的应用程序对他们的价值不高,他们会让事情变得更加困难并且可能会劝阻他们。

答案 1 :(得分:2)

你不能。一旦其他人拥有你的文件,他们可以用它们做他们喜欢的事情 - 首先要修补你的反补丁代码。

答案 2 :(得分:2)

修补后的应用程序意味着'cracker'可以完全控制代码运行的机器(至少足以控制可执行文件的补丁)。因此,补丁预防无论多么聪明,都可能会对抗控制流程。

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

答案 3 :(得分:1)

如果应用程序在其他人的计算机上运行,​​则无法阻止它们进行修补。你可以让它变得更难,但这是一场贝壳游戏:你无法获胜。无论你做多么复杂,某个人都会认为这是一个有趣的挑战,打破你的保护,他会成功。然后,其他人只需要下载他的版本。今天最极端的补丁保护形式是Skype(我知道)。这是非常复杂的,但它已被打破。

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

例如,如果它是一个游戏并且你想阻止玩家攻击游戏以了解其他玩家的位置:更改服务器以便它只发送你已经看到的玩家的坐标信息。

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

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

答案 4 :(得分:0)

现在的破解者不打扰修补你的可执行文件;他们只是在内存中更改程序的变量,使其行为更符合他们的要求。防范这种情况非常困难,而且毫无意义;大多数游戏的破解保护只能通过搜索已知破解程序的签名(如AV引擎)来实现。

答案 5 :(得分:0)

每个人都坚持下去,你不能阻止别人,但你可以让他们更难,你甚至可以走出深层,并制作一些内存验证的东西,如World Of Warcrafts Warden系统。

如果您告诉我们您正在撰写的语言,我们可能会建议一些简单的混淆方法。