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

问题描述 投票:2回答:2

对于安全类,我应该为程序编写自修改代码,该程序在磁盘上找到自己的可执行文件,读取二进制数据,并对其中的一部分进行加密,然后再将其写回磁盘。据推测,这就像是一种多态病毒,会自动变为检测已知特征的傻瓜防病毒扫描程序。

我几乎已经准备好所有片段:

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

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

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

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

c security permissions binary self-modifying
2个回答
4
投票

您无法写入当前映射为可执行文件的文件。但是,您可以写入具有same path


0
投票

为了也进行自我修改,我在nasm中编写了一个小代码(可以用作存根),将其自我打开,并在代码的中间(在mmap之后),我们有一个指针指向我们可以修改的可执行文件的字节。

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