Devo implementare la tecnica di rilevamento del debugger sotto linux. Quindi l'idea principale è che il mio pezzo di codice crea il secondo thread tramite il clone di syscall. Dopodiché, il thread creato dovrebbe controllare se il debugger è presente nel ciclo while, dormendo per alcuni secondi. La mia domanda è come implementare il rilevamento del debugger tramite ptrace in ambiente multi-thread all'interno di loop infinito. Il mio problema è che dopo aver chiamato ptrace (PTRACE_TRACEME, 0, 1, 0) per un secondo debugger viene rilevato (che è ragionevole e corretto, ovviamente). Quindi devo staccare il tracer in qualche modo alla fine del ciclo o usare ptrace in un altro modo? Ecco un codice:Rilevamento debugger Linux nell'applicazione multi-thread usando 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
Per quanto ho detto prima devo implementare il rilevamento del debugger in ambiente multi-thread, quindi in pratica sto chiedendo come farlo usando un ptrace. Non ho dichiarato che la mia soluzione con PTRACE_TRACEME sia corretta, perché non è corretta. – arl