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 系统调用禁用随机化。
假设我有一个 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 系统调用禁用随机化。