是否可以在运行时修改可执行文件(我问的是Windows XP/Vista/7/Server)?我刚刚评估了SmartUtils Portable Storage application。它可以创建所谓的“托管可执行存储文件”,在运行时自行修改它们...这种存储文件类似于标准的自解压归档文件(数据被附加到一个可执行模块),但主要的区别在于,您可以在没有主程序的情况下查看和修改其内容。这怎么可能呢?我需要在我的项目(C++)中使用类似的功能:我希望能够创建可以修改附加到它的数据的可执行文件。
发布于 2011-12-09 23:18:00
如果你真正想问的是SmartUtils可移植存储是如何实现它的魔力的,那么我建议它是一个自动执行的压缩存档。归档文件EXE (就像WinZip或7-Zip create一样)自动从临时文件夹中提取并执行您的应用程序exe,并为您提供了一种可归结为提取、操作和修改原始的自动执行归档文件的方法。
因此,Windows永远不会试图修改正在运行的.exe。相反,您的.exe (提取并运行临时文件)是正在执行的(以及绑定到它的库),它操作源.exe (实际上是一个自动执行的归档-可能是.zip)。
下次用户“运行”修改后的"exe“时,您的.exe将再次被提取并运行,并且它可以再次操作自解压的.exe。
我希望这对你有意义。
这只是一个最好的猜测!
发布于 2011-12-09 06:27:57
是-一种常见的技术是将数据文件附加到可执行文件的末尾。
典型的方案是在可执行文件的末尾写入一个0x00000000整数,然后附加每个文件,后跟其大小(以字节为单位)。
然后,当可执行文件需要读取数据时,它检查自己文件中的最后4个字节,将其作为文件长度,并从它自己的文件中复制该字节数,然后检查下4个字节作为另一个长度,并将其复制为文件,直到长度为0000。如果您还需要对文件名进行编码-这会增加一些复杂性,但基本上是相同的想法。
发布于 2011-12-09 06:31:58
您可以将TOC指针附加到EXE (也可能是魔术ID cookie),以便验证它是否为TOC指针,然后使用该指针备份到每个附加记录的开头。
只要你没有弄乱文件的头和主要内容,它应该仍然可以被操作系统加载。
然而,你牺牲了你的EXE的任何签名-而且你可能有各种各样的权限问题要处理……
我已经为我的开发环境编写了工具,可以打开Windows EXE,推断其中的资源,修改各种资源,并重新打包整个过程。我们使用它将测试版标记为发行版(因此它会修改版本记录)。
如果你知道EXE文件的结构并正确地重建它,你可以对它做任何你想做的事情。
https://stackoverflow.com/questions/8438085
复制相似问题