Pie/pic elf 二进制检测

Pie/pic elf binary instrumentation

假设我有一个 elf 32 或 64 位二进制可执行文件。此二进制文件已使用 pic/pie 选项编译。

这意味着所有函数都映射到内存中的随机地址。

如果需要对这种二进制文件进行检测或逆向工程怎么办?

有没有办法挂钩 linux 二进制加载程序以便始终提供相同的地址?

谢谢

That’s mean all functions are mapped at a random address in memory.

不,不是那个意思。

启用地址随机化后,PIE 二进制文件将从 运行 运行 的随机基地址加载,但 所有 函数和数据将移动一起.

也就是说,如果在一次执行中 &foo == 0x12345600&bar == 0x12345700,那么在后续执行中它们之间的差值将始终为 0x100(直到重新链接二进制文件)。

Is there a way to hook linux binary loader in order to always give the same addresses ?

有几种方法:

  • 可以通过
    echo 0 > /proc/sys/kernel/randomize_va_space
  • 全局禁用地址随机化
  • 使用setarch ... -R a.out
  • 运行 GDB 下的程序,它通过 personality 系统调用禁用随机化。