如何用ptrace阻止tracee捕获SIGTRAP

如何用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

当我想检查tracee系统调用时,我使用
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抑制该信号的要点是,您可以不必取消设置,就可以阻止其信号处理程序运行。