在每次启动时,都可以使用md5散列更改程序
It is possible to make the program with md5 hash the change every start?
简单的程序,可以自动改变他自己的md5哈希每次你打开它?有一个像"WinMD5"这样的程序可以扫描程序的md5散列。我的问题是,我们是否可以在每次打开程序时更改它。我知道,如果我们添加一些简单的东西/或删除一些。我们可以重新编译,把程序堆起来,然后我们就得到了一个新的md5哈希值。但如果我们只用几行就能做到,程序就会自动改变。那会很棒的!
这是可以做到的,但不是微不足道的。您需要打开程序的可执行文件,了解文件的内部结构(可移植可执行文件,PE),并在其中更改一些不会影响程序执行的内容。ELF二进制格式(在Linux中使用)支持所有类型的注释和符号以及不会直接影响程序执行的额外字段,可能PE文件也有您可以使用的注释和符号。您还可以使用您在程序中专门为此目的创建的一些静态全局变量,因为这些变量的初始值存储在可执行文件中,在程序的数据段中。
微小的改变足以完全改变MD5哈希值(MD5就是这样设计的)。因此,每次执行程序时,在.exe文件中增加一些4字节的计数器就足够了(重复散列需要执行2³²次)。用8个字节使人类无法重复存在的时间。
正如我所说的,这不是微不足道的,但也不是所有的困难或不可能的一些人可能认为。请注意,运行程序的用户必须具有修改二进制可执行文件的权限(也许Windows会要求管理权限?我不知道,我又不是Windows用户。
好运。
打开或执行文件对其内容没有影响。在Windows(但不是Unix)下,可以获得可执行文件的全名。如果你知道哪里有无关紧要的字节,您可以打开文件并修改它们。(例如,COFF格式有一个四字节的时间戳你几乎可以设置成任何东西。或者你可以创建在构建程序时使用了一些无用的符号修改他们的名字
当然,这假定用户没有写保护可执行文件。我想那很少是但是,在开发环境中除外。
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 自动格式化程序> >更改为>>
- 如何在不破坏现有应用程序的情况下更改 API 中 stl 容器的数据类型?
- 什么是"undetectable means",它们如何更改 C/C++ 程序的对象?
- 我需要如何更改我的程序以使用打开/关闭原则?
- 更改已在运行的程序的变量值
- 更改用于部署的凭据提供程序 GUID 的过程
- 更改应用程序数据的路径
- 我们如何重新制作程序以打开xml文件并在价格单词之后读取百分比值并更改此值
- C++ - 从 MFC 应用程序启动记事本,并将其默认标题从 "Untitled - Notepad" 更改为其他内容
- 我的fahrenheit-celcius程序会忽略我的if-else语句,并在每次运行该程序时将值更改为0
- 字符串更改程序输出随机字符
- 为什么i和j的值只有一个更改程序而有所不同
- 当我们在另一个程序中调用该程序时,更改程序中常量参数的值
- 更改程序 C++ 中的随机种子
- 如何以编程方式更改程序图标
- Win32:更改程序图标
- 在每次启动时,都可以使用md5散列更改程序
- 动态更改程序图标
- VarBstrFromI4更改程序中某些其他BSTR的值