隐藏调试器的系统调用

时间:2015-11-20 12:50:48

标签: linux gdb reverse-engineering

在Eldad Eilam的书“Reversing”中,在第11章:破坏保护中,有一个名为Defender的裂缝。它是为Windows编写的,在执行开始时,用户模式OS组件通过搜索ntdll.dll被复制到随机存储器地址。之后,通过此复制的代码访问操作系统,使用内核模式切换。这样,在调试时,任何用户模式API上的断点都不会被命中。

我想知道这是否可以在Linux上完成。我有一个简单的Hello World汇编代码:

section .data
    msg db      "hello, world!"

section .text
    global _start
_start:
    mov     rax, 1
    mov     rdi, 1
    mov     rsi, msg 
    mov     rdx, 13
    syscall
    mov    rax, 60
    mov    rdi, 0
    syscall

如果我在gdb中加载相应的可执行文件,发出catch syscall write并运行该程序,则会检测到write系统调用。是否可以以与Windows上使用的方式类似的方式隐藏write gdb操作?

1 个答案:

答案 0 :(得分:2)

不,这是不可能的。实现ptrace捕获系统调用的代码在内核中,而不是在用户空间中,因此没有办法避免它。

相关问题