我希望能够直接从可执行格式(而不是在编译时)重写或重组 ELF 二进制程序。
我所知道的唯一能做到这一点的库是elfPriority(在Miasm 中使用)。但是,一定还有其他人。那么,用于静态修改 ELF 可执行文件的库或框架是什么?
我希望能够直接从可执行格式(而不是在编译时)重写或重组 ELF 二进制程序。
我所知道的唯一能做到这一点的库是elfPriority(在Miasm 中使用)。但是,一定还有其他人。那么,用于静态修改 ELF 可执行文件的库或框架是什么?
我只是偶然发现了这个项目ERESI。该项目本身看起来非常雄心勃勃,主要支持 Intel 和 Sparc 处理器,同时也支持其他一些处理器。还有很多工具可能会派上用场。它确实有一个特定的工具,听起来好像完全符合要求,还有很多其他相关的工具:
Evarista:一个完全用 ERESI 语言实现的开发中的静态二进制程序转换器。
Patchelf 可能会在修改 elf 中指定的链接器或 rpath 时派上用场:
PatchELF是一个小实用程序,用于修改 ELF 可执行文件的动态链接器和 RPATH
还有一个关于injectso的演示,它似乎与精灵二进制文件的静态和动态补丁主题有关。诚然,静态二进制文件的覆盖范围是有限的,但这是可以预料的,因为它比仅仅作为一个库插入器更复杂。
如果您正在寻找专门的库,那么 ERESI 项目确实使用了很多库,因此您可能可以将 Evarista 作为指南,并使用这些库编写更符合您目标的内容。
libelfsh:ELFsh、Kernsh、E2dbg 和 Etrace 使用的二进制操作库。
libe2dbg:在debuggee程序中运行的嵌入式调试器库。
libasm:智能反汇编引擎(x86、sparc、mips、arm),为指令及其操作数提供句法和语义属性。
libmjollnir:控制流分析和指纹库。
librevm:运行时 ERESI 虚拟机,包含框架的中央运行时环境实现。
libstderesi:包含超过 100 个内置分析命令的标准 ERESI 库。
libaspect:方面库带来其 API 以反映 ERESI 语言中的代码和数据结构。
libedfmt : ERESI 调试格式库,可以将 dwarf 和 stabs 调试格式转换为 ERESI 调试格式。
libetrace : ERESI 跟踪器库,Etrace 基于它。
libkernsh:内核 shell 库是 Kernsh 所基于的内核可访问性库。
libgdbwrap:GDB 串行协议库,用于 ERESI 和 GDB/VMware/Bochs/Qemu/OpenOCD 之间的兼容性。
我认为你最好的选择是采用低级 ELF 库并编写一个小程序来做你想做的事。我喜欢ELF 工具链项目。我发现团队整合的测试和文档非常好。不管你最终使用什么工具,你肯定想阅读关于为 Linux 创建真正青少年 ELF 可执行文件的旋风教程,其中讨论了如何将 ELF 可执行文件修改为尽可能小(你的目的可能不同,但有很多的一般课程)。
E9Patch 与其他工具的不同之处在于它可以静态重写 x86_64 Linux ELF 二进制文件,而无需修改跳转目标集。为此,E9Patch 使用了一组新颖的低级二进制重写技术,例如指令双关、填充和驱逐,它们可以插入或替换二进制代码,而无需移动现有指令。由于不移动现有指令,因此跳转目标集保持不变,这意味着不需要更正调用/跳转(包括交叉二进制调用/跳转)。