如何在运行时编辑Exe文件

时间:2014-03-16 07:52:06

标签: c++ c windows winapi

我想更改我的源文件中运行的.exe文件的某个字节以销毁它(NOT DELETE)而不是下次运行。我怎么能这样做?

假设我的源文件是Test.C,我想在此源文件中编写一个代码,在退出之前更改我的Tese.exe文件的某个字节。我可以完全删除这个exe文件,并退出http://www.catch22.net/tuts/self-deleting-executables [^] 我可以使用像test2.exe这样的第二个可执行文件在运行时写入test1.exe吗?如果可能,怎么样?

2 个答案:

答案 0 :(得分:3)

从技术上讲,.exe文件可以像任何其他文件一样读取或写入,只要您具有适当的访问权限并知道自己在做什么。

然而,非常做坏事。

如果您想在下次启动时更改程序的行为,我建议您将该信息存储在程序的私有配置文件中。

答案 1 :(得分:2)

大概你想要这个,因为你只希望程序只运行一次。这些技术中的一些是在80年代早期的DOS程序中使用的。它不会阻止用户在第一次执行它之前复制(这就是我所做的 - 这就是我所知道的这些技术)。

  1. 执行此操作的常规方法是将某些内容写入注册表。你使用的密钥可能完全神秘。
  2. 您的程序可以启动第二个程序来完成工作以及何时完成
    • 将内容写入隐藏的配置文件
    • 将0写入前n个字节,然后保存
    • 重命名文件,使得相同的文件名包含3个退格和附加的exe - 这在资源管理器中不明显 - 一切看起来都一样但不再是可执行文件
    • 用西里尔文e替换exe中的最后一个 e 。这种技术在90年代初使用。
  3. 告诉用户不要这样做。
  4. 在使用第二个程序的情况下,它会检查argc [1]。这必须是一组控制字符,无法在键盘上键入,可以从启动程序传入。另外,在启动之前,请检查是否可以写入或重命名。用户可能已保护目录,因此您无法写入该文件。或者,他们可能将文件放在CD上。