3

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

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

文件:Example.example

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

3 回答 3

5

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

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

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

于 2011-02-16T00:31:06.427 回答
1

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

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

于 2011-02-16T00:31:45.103 回答
0

这将是非常困难的,你需要蛮力它。您确定这不是红鲱鱼,真正的验证是在其他地方完成的吗?

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

check md5 of Example.example
If md5 I just obtained != "###################################"
allow send score.
于 2011-02-16T00:32:10.207 回答