Que fait anti-debugging-techniques ?
Playbook de détection et contournement anti-débogage. À utiliser lors du reverse engineering de binaires protégés qui détectent les débogueurs via ptrace, les flags PEB, les vérifications de timing ou les gestionnaires de signaux/exceptions sous Linux et Windows.
Techniques courantes
1. Vérification ptrace (Linux)
- Détection : Appel à
ptrace(PTRACE_TRACEME, ...)échoue si déjà tracé. - Contournement : Patcher l'appel à ptrace (remplacer par NOP) ou intercepter avec
LD_PRELOADen remplaçant ptrace.
# Exemple avec LD_PRELOAD
echo 'int ptrace(int request, ...) { return 0; }' > fake_ptrace.c
gcc -shared -fPIC -o fake_ptrace.so fake_ptrace.c
export LD_PRELOAD=./fake_ptrace.so
./binary
2. Flags PEB (Windows)
- Détection : Lecture de
BeingDebugged(offset 0x2 du PEB) ouNtGlobalFlag. - Contournement : Mettre à zéro ces flags dans le débogueur.
# Sous x64dbg
SetBPX 0x77...
# Modifier BeingDebugged à 0 via Memory Map
3. Vérifications de timing
- Détection : Utilisation de
rdtsc(Linux/Windows) ouGetTickCount(Windows) pour mesurer le temps entre deux instructions. - Contournement : NOPer ou ignorer les instructions de timing dans le débogueur.
# Exemple de rdtsc
rdtsc
mov [temp], eax
...
rdtsc
sub eax, [temp]
cmp eax, THRESHOLD
jge debugger_detected
4. Gestionnaires de signaux/exceptions
- Détection : Installation de gestionnaires pour SIGTRAP (Linux) ou
SetUnhandledExceptionFilter(Windows). - Contournement : Désactiver ou patcher les gestionnaires.
Outils supportés
- Linux : GDB, strace, LD_PRELOAD
- Windows : x64dbg, IDA Pro, WinDbg