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

问题描述 投票:0回答:1

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

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

file byte executable exe
1个回答
6
投票

这个问题不可能用肯定或否定来回答。

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

您的平台上可能存在的任何代码签名机制都会对此类技巧大喊大叫。仅当可执行文件没有发生重大更改时,签名才有效。 (至少,在我帮助实现的代码签名机制中,加密签名是根据可执行文件的整个内容计算的——签名本身除外——而不仅仅是标记为可执行文件的段或程序头中的数据.)

您的平台上可能存在的任何防病毒机制都会对此类技巧大喊大叫。 自修改代码肯定与试图保持隐藏或模糊的程序有关,而写入自身的代码将在行为防病毒工具中触发警报。

诸如 tripwire

mtree
之类的工具总是会抱怨你的程序。
rpm -qa
debsums
将始终报告可执行文件的问题。很难将该程序从一个站点可靠地传输到另一个站点。

大多数环境中标准可执行文件的权限会完全禁止这种行为。用户帐户没有权限修改系统上的大多数可执行文件 - 只有将运行可执行文件的用户“拥有”的可执行文件也可以写入。 (即便如此,如果配置正确,诸如AppArmorSELinuxTOMOYOSMACK之类的强制访问控制系统也可以禁止进程写入程序文件。并且几乎所有合理的安全性配置文件会禁止它。) 没有系统管理员会让

两个

用户执行并且写入可执行文件。 您还面临

首先找到可执行文件

的务实问题。至少Linux提供了/proc/self/exe,但是(a)系统管理员可能没有安装它(b)系统管理员可能不允许大多数进程

使用
它(c)如果在程序执行时找到正确的可执行文件被替换修改文件可能很困难。 您必须在更新可执行文件的两种方法之间做出选择:要么

修改

现有文件(ftell(3)

fseek(3)
),或者将更改的内容写入新文件并
替换
可执行文件。这两种方法都很麻烦:如果修改文件,可能会同时执行多个副本,试图将冲突的编辑写入文件。聪明的编程可以避免巨大的问题,但整个可执行文件可能不会处于“一致”状态。如果替换该文件,则可能会同时执行多个副本,并且可执行文件的磁盘副本可能不会“释放”并且实际上可删除,直到系统重新启动为止。您可能有十几个可执行程序文件的副本,无形中占用了磁盘空间。它们都无法在执行时共享内存,从而增加了内存压力。 是的,可以将配置数据保留在程序可执行文件中,甚至可以使其在某些环境中运行。但这不是生产质量。 如果是编译器链接器,则与源代码一起使用来生成 最终的 .exe 文件是“健康的”并且安装正确,然后 所有的二进制命令和它们之间的链接都位于 该 .exe 的第一个点和最后一个点之间的空格 文件。 因此,任何非 exe.文件可以安全地“附加”到.exe 文件位于该 .exe 文件的尾部。

© www.soinside.com 2019 - 2024. All rights reserved.