每次打开都能自动更改他自己的md5哈希的简单程序?有一个像“WinMD5”这样的程序可以扫描程序的 md5 哈希。我的问题是我们是否可以在每次打开程序时更改它。我知道如果我们添加一些简单的东西/或删除一些。我们可以重新合作,堆放程序,然后我们得到一个新的 md5 哈希。但是如果我们只用几行代码就能做到这一点,程序就会自动改变。这将会非常棒 !有什么改变吗?
2 回答
它可以做到,但不是微不足道的。您需要打开程序的可执行文件,了解文件的内部结构(Portable Executable,PE),并在其中更改一些不会影响程序执行的内容。ELF 二进制格式(在 Linux 中使用)支持所有类型的注释和符号以及不直接影响程序执行的额外字段,可能 PE 文件也有它们可以使用。您还可以使用您在程序中专门为此目的创建的一些静态全局变量,因为该变量的初始值存储在可执行文件中,位于程序的数据段上。
微小的变化足以完全改变 MD5 哈希值(MD5 就是这样设计的)。因此,每次执行程序时在 .exe 文件中增加一些 4 字节计数器就足够了(重复执行哈希需要 2³² 次)。使用 8 个字节使得在人类生存期内不可能重复。
正如我所说,这并非微不足道,但也不是某些人可能认为的那么困难或不可能。注意运行程序的用户必须有修改二进制可执行文件的权限(也许Windows会要求管理员权限?我不知道,我不是Windows人)。
祝你好运。
打开文件或执行文件对其内容没有影响。在 Windows 下(但不是在 Unix 下),可以获得可执行文件的全名。如果您知道有无意义字节的地方,您可以打开文件并修改它们。(例如,COFF 格式有一个四字节的时间戳,您可以将其设置为几乎任何东西。或者您可以在构建程序时创建许多无用的符号,并修改它们的名称。)
当然,这假设用户没有写保护可执行文件。但是,我认为这种情况很少发生,除非在开发环境中。