在 Linux C 程序中写入自己的可执行文件,错误“文本文件繁忙”

Cor*_*oss 2 c security permissions binary self-modifying

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

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

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

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

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

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

小智 5

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