【问题标题】:How would a python program check its own md5sum?python 程序如何检查自己的 md5sum?
【发布时间】:2011-02-16 00:27:09
【问题描述】:

大约一年前我在玩一个游戏。为了加快速度,我编辑了主 .py 文件,并在开头添加了 psyco。游戏运行得更快更好,但它不让我发送我的分数。我进入文件,它正在检查自己的 md5sum。让我困惑的部分是他们在文件中有它的 md5。我的问题是,如何获得文件的 md5 以及文件的总和,包括我还没有的 md5。对我来说似乎是第 22 个问题,但他们做到了。

希望我解释得足够好。 示例:

文件:Example.example

check md5 of Example.example
If md5 I just obtained == "###################################"
allow send score.

【问题讨论】:

  • 您确定它是在检查自己的 md5 而不是其他文件吗?贴一些实际代码。
  • 据我所知,您必须生成“随机”MD5 哈希值,然后看看将它们放在那个位置是否有效。你可以让电脑试试,但它仍然可能很慢。
  • 你确定高分服务器没有验证 md5sum 吗?那会更有意义。
  • @Falmarri 你可能是对的。正如我所说,我一年前玩这个游戏,现在实际上不记得名字了。我想找到实际的代码,但找不到。今天才想起来。
  • @nakedfanatic 你说得对,这样会更有意义。不过,我很确定 md5 已嵌入文件中。

标签: python security md5 md5sum


【解决方案1】:

您不能(轻松)将程序的 MD5 嵌入到它正在计算 MD5 的程序中,因为当您更改正在嵌入的 MD5 时,程序的 MD5 会发生变化。循环一段时间,最终你可能会达到一个稳定点。再说一次,你可能不会。 “一会儿”通常表示 2^128 步,所以这将是一段很长的时间——就像太阳变成红巨星之后一样。

所以有一个技巧。当程序计算自己的 MD5 时,它会专门识别嵌入的 MD5 所在的位置,并使用一个设置值,就像所有 NULL 一样。

为了让黑客更难,不要使用所有 NULL —— 使用 SALT 值。在二进制文件中混淆该值。现在,人们将更难编辑嵌入式 MD5 并在编辑您的程序后“修复”它。

【讨论】:

  • 你仍然需要在程序中的某个地方有那个 SALT,所以这并不比 NULL 更安全
  • 这听起来非常合乎逻辑。这似乎是他们可能这样做的方式。您无法轻松完成的原因是我认为这听起来像是 22 号陷阱的原因。您的解决方案可能就是他们所做的。现在,只要我能找到代码,我就能验证它。
【解决方案2】:

在这些情况下通常会做的是,在计算 MD5 时,实际数字被替换为一些占位符,例如空格或零填充。

这广泛用于 IPSEC 等加密机制。

【讨论】:

    【解决方案3】:

    这将是非常困难的,你需要蛮力它。你确定这不是一个 红鲱鱼和真正的验证在别处完成?

    无论如何,似乎都不是很好的安全性,是什么阻止你像这样修改算法(使用你的伪代码)

    check md5 of Example.example
    If md5 I just obtained != "###################################"
    allow send score.
    

    【讨论】:

    • 如果有问题的代码是用 Python 编写的,很可能很容易绕过任何安全措施。
    • 我同意这将是一个简单的绕过,但我并不担心会破坏它。我只是好奇他们是怎么做到的
    • 只有当你有 2^128 个周期可用时,你才能暴力破解它——即使那样,也可能没有单稳态解决方案。
    • @vy32,这就是为什么我认为它是某种假校验和,如果它确实包含在同一个文件中
    • 不,不是。看我的回答。您计算文件的校验和而不计算嵌入的 MD5。
    猜你喜欢
    • 2016-02-27
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2012-11-28
    • 2010-10-02
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多