E9Patch - 一个强大的静态二进制重写器
E9Patch 是一个针对 x86_64 Linux ELF 二进制文件的强大静态二进制重写工具。
E9Patch 的特点:
静态二进制重写 接收一个输入二进制文件(ELF 可执行文件或共享对象),并生成一个经过修补/修改的输出二进制文件。修补后的二进制文件可以作为原始文件的直接替代品。
预构建的 E9Patch 二进制文件可通过以下链接下载:
构建 E9Patch 非常简单:只需运行 build.sh 脚本。
这将自动构建两个工具:
e9patch:二进制重写器后端;e9tool:E9Patch 的线性反汇编前端。E9Patch 可以通过 E9Tool 前端使用。
例如,要向 xterm 中的所有 xor 指令添加指令打印插桩,我们可以使用以下命令:
$ ./e9tool -M 'asm=/xor.*/' -P print xterm
这将生成一个修改后的 xterm 版本,并写入 a.out 文件。
修改后的 xterm 可以正常运行,但会将每条执行的 xor 指令的汇编字符串打印到 stderr:
$ ./a.out
xorl %ebp, %ebp
xorl %ebx, %ebx
xorl %eax, %eax
xorl %edx, %edx
xorl %edi, %edi
...
有关支持的选项和模式的完整列表,请参见:
$ ./e9tool --help
其他使用 E9Patch 的项目包括:
libc.so 的静态二进制重写进行系统调用拦截。E9Patch 是一个低级工具,设计为可集成到其他项目中。要了解更多信息,请参阅以下文档:
错误报告请提交至:
当前版本的 E9Patch 相较于 PLDI'2020 论文中评估的原始原型有显著改进。具体来说:
-O2 选项。本软件已根据 GNU 公共许可证 (GPL) 第三版发布。
某些特定文件根据 MIT 许可证发布(请查看文件开头部分)。
更多信息,请参阅我们的 PLDI'2020 论文:
请按如下方式引用我们的论文:
@inproceedings{e9patch,
author = {Duck, Gregory J. and Gao, Xiang and Roychoudhury, Abhik},
title = {Binary rewriting without control flow recovery},
year = {2020},
publisher = {Association for Computing Machinery},
url = {https://doi.org/10.1145/3385412.3385972},
doi = {10.1145/3385412.3385972},
booktitle = {Programming Language Design and Implementation (PLDI)}
}
本工作部分得到新加坡国家研究基金会(NRF)在国家网络安全研发(NCR)计划下资助的值得信赖软件系统国家卓越卫星的支持。