E9Patch 是一个强大的静态二进制重写工具,适用于x86_64
Linux ELF 二进制文件。 E9补丁是:
静态二进制重写采用输入二进制文件(ELF 可执行文件或共享对象)并生成应用了一些补丁/修改的输出二进制文件。修补后的二进制文件可以用作原始二进制文件的直接替代品。
欲了解更多信息,请参阅我们的 PLDI'2020 论文:
预构建的 E9Patch 二进制文件可以在此处下载:
构建 E9Patch 非常简单:只需运行build.sh
脚本即可。
这将自动构建两个工具:
e9patch
:二进制重写器后端;和e9tool
:E9Patch 的线性反汇编前端。 E9Patch 可通过 E9Tool 前端使用。
例如,要为xterm
中的所有xor
指令添加指令打印检测,我们可以使用以下命令:
$ ./e9tool -M 'asm=/xor.*/' -P print xterm
这将生成写入a.out
文件的xterm
的修改版本。
修改后的xterm
可以正常运行,但会将每个执行的xor
指令的汇编字符串打印到stderr
:
$ ./a.out
xorl %ebp, %ebp
xorl %ebx, %ebx
xorl %eax, %eax
xorl %edx, %edx
xorl %edi, %edi
...
有关支持的选项和模式的完整列表,请参阅:
$ ./e9tool --help
用“空”检测修补所有跳转指令:
$ ./e9tool -M 'asm=/j.*/' -P empty xterm
$ ./a.out
使用“打印”工具打印所有跳转指令:
$ ./e9tool -M 'asm=/j.*/' -P print xterm
$ ./a.out
与上面相同,但使用“Intel”语法:
$ ./e9tool -M 'asm=/j.*/' -P print xterm --syntax=intel
$ ./a.out
通过调用空函数来修补所有跳转指令:
$ ./e9compile.sh examples/nop.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry()@nop' xterm
$ ./a.out
使用指令计数检测修补所有跳转指令:
$ ./e9compile.sh examples/counter.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry()@counter' xterm
$ FREQ=10000 ./a.out
使用漂亮的打印工具修补所有跳转指令:
$ ./e9compile.sh examples/print.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry(addr,instr,size,asm)@print' xterm
$ ./a.out
使用“延迟”工具修补所有跳转指令以减慢程序速度:
$ ./e9compile.sh examples/delay.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry()@delay' xterm
$ DELAY=100000 ./a.out
注意事项:
XTerm(322)
使用 E9Patch 的其他一些项目包括:
libc.so
的静态二进制重写来拦截系统调用。E9Patch 是一个低级工具,旨在可集成到其他项目中。要了解更多信息,请参阅以下文档:
可以在此处报告错误:
与 PLDI'2020 论文中评估的原始原型相比,当前版本的 E9Patch 有了显着改进。具体来说:
-O2
选项传递给 E9Tool。该软件已根据 GNU 公共许可证 (GPL) 第 3 版发布。
一些特定文件是在 MIT 许可证下发布的(检查文件前导码)。
这项工作得到了国家可信赖软件系统卓越卫星的部分支持,该卫星由新加坡国家研究基金会 (NRF) 国家网络安全研发 (NCR) 计划资助。