Bonjour,

j'essaye de mettre en place une méthode d'anti-debugging très connu, la détection du ptrace.

J'arrive à le faire lorsque je n'ai qu'une seule occurrence, mais je n'arrive pas à me détacher, donc lorsque je refais un appel à ptrace, celui-ci me renvoie une erreur.

Un petit bout de code pour montrer ce que j'aimerai faire :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
#include <sys/ptrace.h>
 
int main(void)
{
   pid_t pid;
   pid = getpid();
 
   printf("Process create with PID : %d\n", pid);
   printf("TraceME %d\n", ptrace(PTRACE_TRACEME,0,1,0));
   printf("KILL%d\n", ptrace(PTRACE_KILL,pid,1,0));
   printf("TraceME 2 %d\n", ptrace(PTRACE_TRACEME,0,1,0));
Et la sortie :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
# ./armPtrace
Process create with PID : 450
TraceME 0
KILL-1
TraceME 2 -1
Comme on peut le voir, le premier trace fonctionne (retour 0), mais le kill ne fonctionne pas, tout comme le second traceme, car le processus est déjà sous debug.

Dans un premier temps j'ai pensé à un problème de timer, et j'ai tenté d'ajouter un wait, mais pas plus de résultat.

Quelqu'un aurait-il une idée, mon objectif est juste de savoir si je suis déjà "ptracer" (du verbe ptrace). Et de pouvoir le faire x fois de suite.

Merci