如何用ptrace阻止tracee捕获SIGTRAP
当我想检查tracee系统调用时,我使用如何用ptrace阻止tracee捕获SIGTRAP,c,linux,signals,ptrace,C,Linux,Signals,Ptrace,当我想检查tracee系统调用时,我使用PTRACE\u-ATTACH,然后在循环中使用PTRACE\u-syscall,最后使用PTRACE\u-DETACH 问题是,如果tracee注册到SIGTRAP或SIGCONT,它可以在我使用PTRACE_SYSCALL或PTRACE_DETACH时改变他的行为,我不想这样做 当我用PTRACE\u attachtracee获得SIGSTOP连接到tracee时,它无法注册/响应此信号,因此可以正常工作 当我使用PTRACE\u SYSCALL时,t
PTRACE\u-ATTACH
,然后在循环中使用PTRACE\u-syscall
,最后使用PTRACE\u-DETACH
问题是,如果tracee注册到SIGTRAP或SIGCONT,它可以在我使用PTRACE_SYSCALL或PTRACE_DETACH时改变他的行为,我不想这样做
当我用PTRACE\u attach
tracee获得SIGSTOP
连接到tracee时,它无法注册/响应此信号,因此可以正常工作
当我使用
PTRACE\u SYSCALL
时,tracee无法捕获SIGTRAP,或者当我使用PTRACE\u CONT
时,tracer无法捕获SIGCONT的解决方案是什么。您唯一需要担心的是,如果tracee使用sigprocmask
或对pselect
的阻塞调用来阻塞信号,并使用sigpending
或signafd
来查找信号,您可以通过修改或模拟相关系统调用来修复
要抑制信号,在信号发送停止后恢复时,只需通过0表示sig
。发件人:
信号注入与抑制
跟踪器观察到信号传递停止后,跟踪器应通过调用重新启动tracee
ptrace(PTRACE_restart, pid, 0, sig)
其中,PTRACE\u restart
是重启PTRACE请求之一。如果sig
为0,则不发送信号。否则,将发送信号sig
。此操作在本手册页面中称为信号注入,以区别于信号发送停止
请看我最近的评论:@CraigEstey这听起来与此完全相反。在这个问题上,询问者扮演的是恶意软件作者的角色,他想知道如何防止安全研究人员使用
ptrace
分析他们的恶意软件。在这个问题中,询问者扮演的是安全研究员的角色,他想知道如何使用ptrace
来分析(可能有断点)恶意软件。@JosephSible:防止tracee做tracer不想做的事情的技术是相同的。如果从PTRACE\u TRACEME
开始,tracer可以在任何tracee系统调用发生之前修改/抑制它想要的任何tracee系统调用。如果从PTRACE\u ATTACH
,跟踪器可能必须注入代码来撤销tracee已经做过的事情(例如signal(SIGTRAP,SIG\u IGN)
。@Catig,跟踪器如何撤销信号(SIGTRAP,…)
例如,如果tracee在跟踪器连接到tracee之前注册到此信号?@Keystone抑制该信号的要点是,您可以不必取消设置,就可以阻止其信号处理程序运行。