Debugging 旁路ptrace反调试技巧

Debugging 旁路ptrace反调试技巧,debugging,gdb,ptrace,reversing,Debugging,Gdb,Ptrace,Reversing,调试32位Linux可执行文件时,绕过对ptrace的调用时遇到一些问题。 我有一个二进制文件:ELF 32位LSB可执行文件,Intel 80386,版本1(SYSV),动态链接,解释器/lib/ld linux.so.2,对于GNU/linux 2.6.26,BuildID[sha1]=B1579D4C55E90110491DA7633C9A158B77A5729,stripped 我一直在试着调试它。由于它是一个剥离的二进制文件,所以我使用gdb定位了入口点 gef➤ info file

调试32位Linux可执行文件时,绕过对ptrace的调用时遇到一些问题。
我有一个二进制文件:
ELF 32位LSB可执行文件,Intel 80386,版本1(SYSV),动态链接,解释器/lib/ld linux.so.2,对于GNU/linux 2.6.26,BuildID[sha1]=B1579D4C55E90110491DA7633C9A158B77A5729,stripped

我一直在试着调试它。由于它是一个剥离的二进制文件,所以我使用gdb定位了入口点

gef➤  info file
Entry point: 0x804849c
.
.
.
other stuff
当我到达入口点时,我打印了下面的说明:

   gef➤  x/15i 0x804849c
   0x804849c:   xor    ebp,ebp
   0x804849e:   pop    esi
   0x804849f:   mov    ecx,esp
   0x80484a1:   and    esp,0xfffffff0
   0x80484a4:   push   eax
   0x80484a5:   push   esp
   0x80484a6:   push   edx
   0x80484a7:   push   0x8048580
   0x80484ac:   push   0x8048590
   0x80484b1:   push   ecx
   0x80484b2:   push   esi
   0x80484b3:   push   0x8048480
   0x80484b8:   call   0x8048350 <__libc_start_main@plt>
   0x80484bd:   hlt    
   0x80484be:   nop
为了绕过这个问题,我尝试使用LD_PRELOAD环境变量。
因此,我创建了一个简单的.c文件:

long ptrace(int request, int pid, void *addr, void *data) {
    return 0;
}  
并使用以下命令将其编译为共享库:

gcc -fPIC -shared -m32 ptrace.c -o ptrace.so
这里是命令文件ptrace.so的输出

ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=a9de523da44299f76ad94373a07c9c5f6f3c76db, not stripped
接下来,我首先使用
export LD\u PRELOAD=./ptrace.so
命令在shell中设置环境变量LD\u PRELOAD,然后在gdb
set environment LD\u PRELOAD=./ptrace.so

但这就是结果:

 ERROR: ld.so: object './ptrace.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
如何绕过ptrace调用

多谢各位

为了绕过这个问题,我尝试使用LD_PRELOAD环境变量

如果应用程序采用反调试技巧,则极有可能直接执行
ptrace
系统调用,而不是通过
libc
包装器执行<代码>LD_预加载在这种情况下不起作用

此命令:

gcc-shared ptrace.c-o ptrace.so

在64位系统上构建64位二进制文件。你想要:

gcc -fPIC -shared -m32 ptrace.c -o ptrace.so

对不起,是我打字的错误。我编译了二进制文件gcc-fPIC-shared-m32 ptrace.c-o ptrace.所以,我编辑了这篇文章。它给我带来了以下错误:错误:ld.so:object./ptrace.so“从ld_预加载无法预加载(错误的ELF类:ELFCLASS32):忽略。@Sp00nc3您的评论和问题不一致(
ELFCLASS32
vs.
ELFCLASS64
)。请把你的故事讲清楚。我解决了,反正我解决了
gcc -fPIC -shared -m32 ptrace.c -o ptrace.so