ELFsh将编译的C代码注入现有的二进制文件中

时间:2012-03-18 02:54:15

标签: linux

我遇到了使用ELFsh库的问题,特别是在尝试使用示例injecting compiled C code into an existing binary的测试套件中的示例时。

到目前为止我所做的是:

  • 从SVN(svn checkout http://svn.eresi-project.org/svn/trunk/ eresi
  • 结帐ELFsh
  • ./env.sh, ./configure --enable-32-64 --enable-m64, make, sudo make install。还尝试了sudo make install64。安装依赖项后,库已构建并安装正常。

eresi/testsuite/elf/etrel_inject/etrel_original包含我有兴趣运行的测试。在那里,我对Makefile进行了一些小改动,我认为它有一个小错误,-m32没有在all32目标中明确指定all32导致{{1}的结果如果在64位系统上编译,则1}}和all64相同。下一个:

  • 我跑make(构建一切正常)

现在,我对应该发生的事情的理解是,目标host.c被编译为hijackme32hijackme64。这些是分别注入rel.32.orel.64.o的32位和64位二进制文​​件。

此注入可以在测试中以两种方式执行 - 通过ELFsh脚本(relinject32.eshrelinject64.sh)以及通过C API(relinject32relinject64

运行relinject32会导致:

[E] Unable to load object

运行relinject64会导致:

[E] Unable to copy PLT

为了获得有关问题所在位置的细粒度信息,我以交互方式加载ELFsh并逐个执行relinject32/64.esh步骤。两个脚本在加载目标时失败:

(elfsh-0.82-b2-dev@local) load hijackme32



 [E] Cannot load object

(elfsh-0.82-b2-dev@local) load hijackme64


 [*] Sun Mar 18 02:49:04 2012 - New object loaded : hijackme64
Architecture EM_X86_64 : AMDx86-64 architecture not supported. No flowjack available.
 [E] Libmjollnir unsupported architecture

奇怪的是,尝试使用其完整路径加载32位目标会导致不同的错误:

(elfsh-0.82-b2-dev@local) load /home/mike/Desktop/eresi/testsuite/elf/etrel_inject/etrel_original/hijackme32

Architecture EM_X86_64 : AMDx86-64 architecture not supported. No flowjack available.


 [E] Cannot load object

这是令人惊讶的,因为操作系统会产生:

mike@mike-linux:file hijackme32
hijackme32: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
mike@mike-linux:file hijackme64
hijackme64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped

我正在测试的当前系统是x86-64 Ubuntu。

我的问题是如何让这个测试运行?我是在设置环境还是建造不正确?


我尝试使用IRC(首选通信方法),但项目(和频道)现在似乎已经死了。

0 个答案:

没有答案