在EXE文件末尾写入字节是否安全?

时间:2011-06-14 03:27:13

标签: file byte executable exe

我听说如果我们在EXE文件的末尾附加一些字节,它仍然可以正常工作。在所有情况下都是如此吗?这是一种安全的方式吗?

我打算使用程序执行文件中的数据编写演示,因此它可以是安全的(至少对于普通用户而言)并且我不必在其他地方存储数据。

1 个答案:

答案 0 :(得分:5)

如果回答“是”或“否”,则无法回答。

我假设您将数据存储在可执行文件的末尾,而不是将程序状态存储在配置文件中。我进一步假设你这样做是为了好玩,最终结果不一定是完美的。

平台上可能存在的任何code signing mechanism都会因为这些诡计而犯规。只有在可执行文件没有实质性更改时,签名才有效。 (至少在code signing mechanism I helped implement中,加密签名是在可执行文件的整个内容上计算的 - 签名本身除外 - 不仅仅是标记为可执行文件的段或程序头中的数据。)< / p>

您的平台上可能存在的任何防病毒机制都会因这些伎俩而惹恼。 Self-modifying code肯定与试图保持隐藏或模糊的程序有关,而写入自身的代码将触发行为反病毒工具中的警报。

tripwiremtree等工具会一直抱怨您的计划。 rpm -qadebsums将始终报告您的可执行文件存在问题。将该程序可靠地从一个站点转移到另一个站点将很困难。

大多数环境中标准可执行文件的权限都将完全禁止此行为。用户帐户没有权限修改系统上的大多数可执行文件 - 只能编写将运行可执行文件的用户拥有的可执行文件。 (即使这样,mandatory access controlAppArmorSELinuxTOMOYOSMACK系统也可以禁止进程写入程序文件,如果正确配置。几乎所有合理的安全配置文件都会禁止它。)

没有系统管理员会让两个用户执行写入可执行文件。

您还有首先找到可执行文件的实用问题。至少Linux提供/proc/self/exe,但是(a)系统管理员可能没有安装它(b)系统管理员可能不会让大多数进程使用它(c)如果更换可执行文件程序正在执行找到正确的文件进行修改可能很困难。

您必须在两种更新可执行文件的方法之间做出决定:您修改现有文件(ftell(3)fseek(3)),或者将更改后的内容写入新文件文件和替换可执行文件。这两种方法都很麻烦:如果修​​改文件,可能会同时执行多个副本,尝试对文件进行冲突编辑。聪明的编程可以避免出现大问题,但整个可执行文件可能不会处于一致状态。如果替换文件,则可能同时执行多个副本,并且可执行文件的磁盘副本可能不会释放并且实际上可以移除,直到系统重新启动。您可能有十几个可执行程序文件副本无形占用磁盘空间。执行时,他们都不能共享内存,增加内存压力。

是的,可以在程序可执行文件中保留配置数据,甚至可以在某些环境中使用它。但它不是生产质量。