对于安全类,我应该为一个程序编写自修改代码,该程序在磁盘上找到自己的可执行文件,读取二进制数据,并对其中的一部分进行加密,然后再将其写回磁盘。据推测,这就像是一种多态病毒,会自动变为检测已知特征的傻瓜防病毒扫描程序。
我已经准备好了所有的东西:
我正在使用/proc/self/exe
查找可执行文件。
我正在使用一个简单的AES实现来加密可执行文件中某些伪代码中的16字节字符串。
我能够读取二进制数据并找到需要加密的部分。
我的问题是,我能够打开可执行文件的唯一方法是在只读模式"rb"
下。如果我尝试打开文件以在"wb"
或"r+b"
模式下进行写入,则会返回错误"Text file busy"
。无论如何,我有没有用C编写进程自己的可执行文件?我可以通过某种方式更改权限来做到这一点吗?
编辑:我要完成的工作是拥有一个可执行文件,该文件每次运行时都会对其自身进行加密,以便每次运行后都具有一个新的校验和。
从可执行二进制文件中读取数据后,如何写回或删除它,并用具有相同文件名的新文件替换?
最佳答案
您无法写入当前映射为可执行文件的文件。但是,您可以写入与当前可执行文件具有相同路径的文件,只要它实际上不是同一文件即可-尝试取消链接正在执行的文件并在其位置创建一个新文件,以便实例。
关于c - 在Linux C程序中写入自己的可执行文件,错误“文本文件忙”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19370842/