GJDuck/e9patch

GitHub: GJDuck/e9patch

E9Patch 是一款无需源码和控制流恢复的 x86_64 Linux ELF 二进制静态重写工具,可在秒级完成对大型复杂程序的指令级插桩与补丁。

Stars: 1096 | Forks: 68

  E9Patch - A Powerful Static Binary Rewriter

E9Patch 是一个强大的 `x86_64` Linux ELF 二进制文件静态重写工具。 E9Patch 具有: * *可扩展*:E9Patch 可以可靠地重写大型/复杂的二进制文件,包括网页浏览器(大小超过 100MB)。 * *兼容性好*:重写后的二进制文件是原始文件的直接替代品,无需额外的依赖项。 * *速度快*:E9Patch 可以在几秒钟内重写大多数二进制文件。 * *低开销*:性能和内存开销都很低。 * *可编程*:E9Patch 的设计使其可以轻松集成到其他项目中。 有关更多信息,请参阅 [E9Tool 用户指南](https://github.com/GJDuck/e9patch/blob/master/doc/e9tool-user-guide.md)和 [E9Patch 程序员指南](https://github.com/GJDuck/e9patch/blob/master/doc/e9patch-programming-guide.md)。 *静态二进制重写* 接受一个输入二进制文件(ELF 可执行文件或共享对象),并生成一个应用了某些补丁/修改的输出二进制文件。 打补丁后的二进制文件可以作为原始文件的直接替代品使用。 ## 发布 预构建的 E9Patch 二进制文件可以在此处下载: * [https://github.com/GJDuck/e9patch/releases](https://github.com/GJDuck/e9patch/releases) ## 构建 构建 E9Patch 非常简单:只需运行 `build.sh` 脚本。 这将自动构建两个工具: 1. `e9patch`:二进制重写器后端;以及 2. `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 的项目包括: * [RedFat](https://github.com/GJDuck/RedFat):基于[低脂指针 (low-fat pointers)](https://github.com/GJDuck/LowFat)的二进制加固系统。 * [E9AFL](https://github.com/GJDuck/e9afl):自动将 [AFL](https://github.com/google/AFL) 插桩插入二进制文件中。 * [E9Syscall](https://github.com/GJDuck/e9syscall):通过对 `libc.so` 进行静态二进制重写来实现系统调用拦截。 * [Hopper](https://github.com/FuzzAnything/hopper):自动为库生成模糊测试用例。 * [EnvFuzz](https://github.com/GJDuck/EnvFuzz):程序环境模糊测试。 * [RFF](https://github.com/dylanjwolff/RFF):用于并发测试的灰盒模糊测试。 * [AutoTrace](https://github.com/GJDuck/AutoTrace):简单的基于源代码行的追踪。 ## 文档 E9Patch 是一个底层工具,旨在可集成到其他项目中。 欲了解更多信息,请参阅以下文档: * [E9Patch 程序员指南](https://github.com/GJDuck/e9patch/blob/master/doc/e9patch-programming-guide.md) * [E9Tool 用户指南](https://github.com/GJDuck/e9patch/blob/master/doc/e9tool-user-guide.md) ## 错误 可以在此处报告错误: * [https://github.com/GJDuck/e9patch/issues](https://github.com/GJDuck/e9patch/issues) ## 版本 与 PLDI'2020 论文中评估的原始原型相比,当前版本的 E9Patch 有了显著改进。 具体来说: * 当前版本实现了多项新的优化,可以生成速度显著更快的二进制文件,有时可提高 2 倍。 要启用新的优化,请向 E9Tool 传递 `-O2` 选项。 * *物理页面分组 (Physical Page Grouping)* 空间优化的实现也已得到改进。 * 补丁覆盖率也略有提高。 * 实现了许多新功能(请参阅文档)。 ## 许可证 本软件已根据 GNU 公共许可证 (GPL) 第 3 版发布。 某些特定文件根据 MIT 许可证发布(请查看文件前言)。 ## 出版物 有关更多信息,请参阅我们的 PLDI'2020 论文: * Gregory J. Duck, Xiang Gao, Abhik Roychoudhury, [Binary Rewriting without Control Flow Recovery](https://comp.nus.edu.sg/~gregory/papers/e9patch.pdf), Programming Language Design and Implementation (PLDI), 2020. * [PLDI'2020 Youtube 演讲视频](https://www.youtube.com/watch?v=qK2ZCEStoG0) 请按如下方式引用我们的论文:

    @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)}

    }

## 致谢

这项工作部分得到了可信赖软件系统国家卓越研究中心的支持,该中心由国家研究基金会 在国家网络安全研发 计划下资助。
标签:E9Patch, Linux ELF, TLS配置检查, x86_64, 二进制修改, 二进制分析, 二进制安全, 二进制插桩, 云安全监控, 云安全运维, 云资产清单, 代码修补, 可配置连接, 客户端加密, 客户端加密, 底层安全, 插桩工具, 无源码修改, 程序分析, 逆向工程, 静态二进制重写, 静态分析