c - 在Linux C程序中写入自己的可执行文件,错误 "Text file busy"

标签 c security permissions binary self-modifying

对于安全类,我应该为一个程序编写自修改代码,该程序在磁盘上找到自己的可执行文件,读取二进制数据,并在将其写回磁盘之前加密部分数据。这应该像一种多态病毒,它会改变自身以欺骗检测已知签名的防病毒扫描程序。

我已经准备好了所有的部分:

  • 我正在使用 /proc/self/exe 查找可执行文件。
  • 我正在使用一个简单的 AES 实现来加密可执行文件中一些伪代码中的 16 字节字符串。
  • 我能够读取二进制数据并找到我需要加密的部分。

我的问题是我能够打开可执行文件的唯一方法是在只读模式下 "rb"。如果我尝试以 "wb""r+b" 模式打开文件进行写入,我会返回错误 "Text file busy"。无论如何我可以用 C 写一个进程自己的可执行文件吗?我可以通过某种方式更改权限来做到这一点吗?

编辑:我想要完成的是拥有一个可执行文件,它会在每次运行时加密自身的一部分,以便在每次运行后都会有一个新的校验和。

从可执行二进制文件读取数据后,如何写回它或删除它并用具有相同文件名的新文件替换它?

最佳答案

您不能写入当前映射为可执行文件的文件。但是,您可以写入与当前可执行文件具有相同路径的文件,只要它实际上不是同一个文件 — 尝试取消链接您正在执行的文件并创建一个例如,新文件就位。

关于c - 在Linux C程序中写入自己的可执行文件,错误 "Text file busy",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19370842/

相关文章:

c - Unix - 将文件中的一行写入 char* var,然后将其保存为整数

c - 如何使我的 MessageBox 弹出在所有表单的顶部?

javascript - 保护客户端逻辑和数据

java - 如何为我的 Java 软件创建许可证?

sql-server - SQL Server : permissions to read database diagrams

mysql - 将主机访问权限重新分配给 MySQL 用户

c - 在 C 中的结构数组中搜索

c - 寻找单文件文件系统或归档文件格式

php - 安全高效地存储/提供网站图像

linux - "sudo: must be setuid root"但已经root并且's'权限