
drow 是一个命令行工具,用于注入代码并钩取 ELF 可执行文件(构建后)的入口点。它接收未经修改的 ELF 可执行文件作为输入,并输出一个包含用户提供的内嵌 payload 的修改版 ELF,该 payload 在运行时执行。
Drow 执行以下步骤来创建新的修补版 ELF:
sh_size 和程序头 p_memsz/p_filesz 扩展用户提供的 payload 的大小sh_offset 和程序头的 p_offset(向下移动节和段,为 payload 和一个小型“暂存桩”腾出空间)e_shoff、e_phoff 等)e_entry(ELF 入口点偏移量)以指向注入的代码除了注入用户提供的 payload 之外,drow 还会注入一个小型代码桩,该桩被前置到 payload 的起始位置。这个桩的设计目的是调用 payload。如果 payload 编写为返回到调用者,则在 payload 返回后,暂存桩会尾调用到 _start,从而恢复执行,使程序能够按预期运行。
安装 gcc 和 scons。然后在该目录的根目录下运行 scons。
除了构建 drow 之外,该项目还会构建一个名为 rappers_delight.bin 的 Linux x86-64 payload,它简单地打印到 stdout。这可用于测试。目前,drow 仅适用于面向 x86-64 的 ELF64 文件。
在这个领域已经有了许多开源工作。我建议您也查看以下项目和相关的出版物: