在每次启动时,都可以使用md5散列更改程序

It is possible to make the program with md5 hash the change every start?

本文关键字:md5 更改程序 可以使 启动      更新时间:2023-10-16

简单的程序,可以自动改变他自己的md5哈希每次你打开它?有一个像"WinMD5"这样的程序可以扫描程序的md5散列。我的问题是,我们是否可以在每次打开程序时更改它。我知道,如果我们添加一些简单的东西/或删除一些。我们可以重新编译,把程序堆起来,然后我们就得到了一个新的md5哈希值。但如果我们只用几行就能做到,程序就会自动改变。那会很棒的!

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

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

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

好运。

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

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