C++ 是否可以在运行时修改可执行文件?
是否可以在运行时修改可执行文件(我问的是Windows XP/Vista/7/Server)?我刚刚评估过。它可以创建所谓的“托管可执行存储文件”,在运行时自行修改这些文件。。。这种存储文件类似于标准的自解压归档文件(数据附加到可执行模块),但主要区别在于,您可以在不使用主程序的情况下查看和修改其内容。怎么可能呢?我的项目(C++)中需要类似的功能:我希望能够创建可执行文件来修改附加到它的数据。是-一种常见的技术是在可执行文件的末尾附加数据文件 典型的方案是将0x00000000整数写入可执行文件的末尾,然后追加每个文件,后跟其大小(以字节为单位)C++ 是否可以在运行时修改可执行文件?,c++,windows,runtime,storage,executable,C++,Windows,Runtime,Storage,Executable,是否可以在运行时修改可执行文件(我问的是Windows XP/Vista/7/Server)?我刚刚评估过。它可以创建所谓的“托管可执行存储文件”,在运行时自行修改这些文件。。。这种存储文件类似于标准的自解压归档文件(数据附加到可执行模块),但主要区别在于,您可以在不使用主程序的情况下查看和修改其内容。怎么可能呢?我的项目(C++)中需要类似的功能:我希望能够创建可执行文件来修改附加到它的数据。是-一种常见的技术是在可执行文件的末尾附加数据文件 典型的方案是将0x00000000整数写入可执行文
然后,当可执行文件需要读取数据时,它会检查自己文件中的最后4个字节,将其用作文件长度,并从自己的文件中复制该字节数,然后将接下来的4个字节检查为另一个长度,并将其复制为文件,直到其长度为0000。如果您还需要对文件名进行编码—这增加了一点复杂性,但基本上是相同的想法。是—一种常见的技术是在可执行文件的末尾附加数据文件 典型的方案是将0x00000000整数写入可执行文件的末尾,然后追加每个文件,后跟其大小(以字节为单位)
然后,当可执行文件需要读取数据时,它会检查自己文件中的最后4个字节,将其用作文件长度,并从自己的文件中复制该字节数,然后将接下来的4个字节检查为另一个长度,并将其复制为文件,直到其长度为0000。如果您还需要对文件名进行编码-这增加了一点复杂性,但基本上是相同的想法。您可以将TOC指针附加到EXE(可能还有一个神奇的ID cookie),以便验证它是否是TOC指针,然后使用它备份到每个附加记录的开头 只要不弄乱文件的头和主要内容,操作系统应该仍然可以加载它 然而,您牺牲了您的EXE所拥有的任何签名-并且您可能有各种权限问题需要解决 我已经为我的开发环境编写了一些工具,这些工具可以打开一个Windows EXE,推断其中的资源,修改各种资源,并重新打包整个过程。我们使用它将测试版标记为发行版(因此它会修改版本记录)
如果知道EXE文件的结构并正确重建它,您可以对其执行任何操作。您可以将TOC指针附加到EXE(可能还有一个神奇的ID cookie),以便验证它是否是TOC指针,然后使用它备份到每个附加记录的开头 只要不弄乱文件的头和主要内容,操作系统应该仍然可以加载它 然而,您牺牲了您的EXE所拥有的任何签名-并且您可能有各种权限问题需要解决 我已经为我的开发环境编写了一些工具,这些工具可以打开一个Windows EXE,推断其中的资源,修改各种资源,并重新打包整个过程。我们使用它将测试版标记为发行版(因此它会修改版本记录)
如果你知道它的结构并正确地重建它,你可以做任何你想要的EXE文件。
,因为这被标记为<代码> Windows < /C> >,你也可以考虑“替代数据流”。这使您可以将单个文件几乎视为一个目录。您可以将名为
Program.EXE:ExtraData
的流添加到您的程序中,并使用正常的文件函数写入该流
再次,您的可执行文件很可能将在
,因为这被标记为“代码> Windows < /代码>,您也可以考虑“替代数据流”。这使您可以将单个文件几乎视为一个目录。您可以将名为
Program.EXE:ExtraData
的流添加到您的程序中,并使用正常的文件函数写入该流
同样,您的可执行文件很可能位于
程序文件\
,对于普通(非升级)用户来说,这是不可写的。如果您真正想问的是SmartUtils便携式存储的神奇之处,那么我建议它是一个自动执行的zip存档。归档文件的EXE(与WinZip或7-Zip创建一样)自动从临时文件夹提取并执行应用程序EXE,并提供一个API,该API可归结为提取、操作和修改原始自动执行归档文件的方法
因此Windows从不试图修改正在运行的.exe。相反,您的.exe(temp file extracted&run)是正在执行的(以及绑定到它的库),它操纵着源.exe(实际上是一个自动执行的归档文件,可能是.zip)
下次用户“运行”修改后的“exe”时,将再次提取并运行您的.exe,并且它可以再次操作自解压的.exe
我希望这对你有意义
这只是一个最好的猜测 如果您真正想问的是SmartUtils便携式存储的神奇之处,那么我建议它是一个自动执行的zip存档。归档文件的EXE(与WinZip或7-Zip创建一样)自动从临时文件夹提取并执行应用程序EXE,并提供一个API,该API可归结为提取、操作和修改原始自动执行归档文件的方法 因此Windows从不试图修改正在运行的.exe。相反,您的.exe(temp file extracted&run)是正在执行的(以及绑定到它的库),它操纵着源.exe(实际上是一个自动执行的归档文件,可能是.zip) 下次用户“运行”修改后的“exe”时,将再次提取并运行您的.exe,并且它可以再次操作自解压的.exe 我希望这是有道理的