Ich muss Debugger Detektionstechnik unter Linux implementieren. Die Hauptidee ist, mein Code erzeugt einen zweiten Thread via syscall clone. Danach soll der erzeugte Thread überprüfen, ob der Debugger in der while-Schleife vorhanden ist und für einige Sekunden schläft. Meine Frage ist, wie Debugger-Erkennung über Ptrace in Multi-Thread-Umgebung innerhalb der Endlosschleife zu implementieren. Mein Problem ist, dass nach dem zweiten Aufruf von ptrace (PTRACE_TRACEME, 0, 1, 0) der Debugger erkannt wird (das ist natürlich sinnvoll und korrekt). Muss ich also den Tracer irgendwie am Ende der Schleife lösen oder ptrace auf andere Weise benutzen? Hier ist ein Stück Code:Linux Debugger Erkennung in Anwendung Multi-Thread unter Verwendung ptrace
new_thread:
; PTRACE
xor rdi, rdi
xor rsi, rsi
xor rdx, rdx
inc rdx
xor r10, r10
mov rax, 101 ; ptrace syscall
syscall
cmp rax, 0
jge __nondbg
call _dbg
db 'debugged!', 0xa, 0
_dbg:
mov rdi, 1
pop rsi
mov rdx, 10
mov rax, 1 ; syscall write
syscall
; exit_group call
mov rdi, 127
mov rax, 231 ; exit_group syscall
syscall
__nondbg:
call _nondbg
db 'non-debugged!', 0xa, 0
_nondbg:
mov rdi, 1
pop rsi
mov rdx, 14
mov rax, 1 ; syscall write
syscall
; ==========
; SLEEP.....
; ==========
push 0 ; value should be a parameter
push 5 ; value should be a parameter
mov rdi, rsp
xor rsi, rsi
mov rax, 35 ; syscall nanosleep
syscall ; syscall
pop rax
pop rax
jmp new_thread
Soweit ich vorher gesagt habe, muss ich Debugger-Erkennung in Multi-Thread-Umgebung zu implementieren, also im Grunde bin ich gefragt, wie es mit einem Ptrace zu tun. Ich habe nicht angegeben, dass meine Lösung mit PTRACE_TRACEME korrekt ist, weil sie falsch ist. – arl