每次启动都可以使用md5哈希的程序进行更改吗?

时间:2013-03-08 14:13:24

标签: c++ winapi md5

每次打开时都可以自动更改自己的md5哈希的简单程序? 有一个像'WinMD5'这样的程序可以扫描程序的md5哈希值。 我的问题是,如果我们每次打开程序都可以更改它。 我知道如果我们添加一些简单的东西/或删除一些。我们可以重新合作,堆积程序和bam我们得到一个新的md5哈希。 但是如果我们只用几行就可以做到这一点,程序会自动改变。这将会非常棒 ! 有什么改变吗?

2 个答案:

答案 0 :(得分:1)

可以做到,但不是琐碎的。您需要打开程序的可执行文件,了解文件的内部结构(Portable Executable,PE),并更改那些不会影响程序执行的内容。 ELF二进制格式(在Linux中使用)支持所有类型的注释和符号以及不直接影响程序执行的额外字段,可能PE文件也具有您可以使用的格式。您还可以使用您在程序中专门为此目的创建的一些静态全局变量,因为此变量的初始值存储在程序的数据段上的可执行文件中。

小的更改足以完全改变MD5哈希值(MD5就是这样设计的)。因此,每次执行程序时,在.exe文件中增加一些4字节计数器就足够了(重复执行哈希需要2 3 2次执行)。使用8个字节使其无法在人类存在的持续时间内重复。

正如我所说,这不是微不足道的,但并非一些人可能认为的困难或不可能。请注意,运行程序的用户必须具有修改二进制可执行文件的权限(可能Windows会要求管理权限吗?我不知道,我不是Windows人员。)

祝你好运。

答案 1 :(得分:0)

打开文件或执行文件对其内容没有影响。 在Windows下(但不是在Unix下),可以获得 可执行文件的全名。如果你知道有的地方 无关紧要的字节,你可以打开文件并修改它们。 (例如,COFF格式具有四字节时间戳,其中 你可以设置几乎任何东西。或者你可以创造 构建程序时有许多无用的符号,和 修改他们的名字。)

当然,这假设用户没有写保护 可执行文件。我认为那很少是 但是,在开发环境中除外。