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 :
Et la sortie :
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));
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.
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
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
Partager