Merci pour vos réponses mais... davydavekk, J'ai absolument rien compris..
pas tout mais un peu
Pour t'expliquer un peu plus en français, et une manière de comprendre...
IsDebuggerPresent est une fonction d'une API Windows. Si tu sais pas ce qu'est une API:
=> En recherchant sur google, on trouve qu'une API Windows est un fichier .DLL contenant des fonctions visant a facilité certaines tâche sur un ordinateur tournant sur Windows.
D'après MSDN, IsDebuggerPresent: "Determines whether the calling process is being debugged by a user-mode debugger."
=> Détermine si le processus d'appel est en cours de débogage par un débogueur en mode utilisateur. (Google Trad')
Sur XP x86, cette fonction est construite de cette manière:
Code:
MOV EAX, DWORD PTR FS:[18]
MOV EAX,DWORD PTR DS:[EAX+30]
MOVZX EAX,BYTE PTR DS:[EAX+2]
RETN
C'est de l'ASM (assembleur), c'est un langage compliqué très proche du langage machine.
Sur Windows 8 x64:
Code:
MOV EAX,DWORD PTR FS:[30]
MOVZX EAX,BYTE PTR DS:[EAX+2]
RETN
Les deux code font la même chose, l'autre est l'évolution de l'un.
" cherche le Process Environment Block et met la valeur du byte BeingDebugged dans EAX."
=> En français, ça donne:
=> "Cherche le bloque d'environnement du processus et met la valeur du byte BeingDebugged ( donc celle qui dis si le processus est en mode debogage ou pas ) dans la "variable" EAX."
Cependant, tu remarque que les deux façon d'écrire la fonction sont différente: de ce fait, un bypass de la fonction IsDebuggerPresent qui fonctionne sous XP ne fonctionnera pas sur Windows 8 :')