Developpez.com

Plus de 2 000 forums
et jusqu'à 5 000 nouveaux messages par jour

Developpez.com - WinDev
X

Choisissez d'abord la catégorieensuite la rubrique :


Exemples en WLangage (issus du site de l'éditeur)

Classe WinDev anti Debugging

Date de publication : 23 Mai 2010 , Date de mise à jour : 23/05/2010

Par Emmanuel Lecoester
 

Ensemble d'exemples WinDev pertmettant de vérifier la coloration syntaxique

       Version PDF (Miroir)   Version hors-ligne (Miroir)
Viadeo Twitter Facebook Share on Google+        



0. Fonction « IsDebuggerPresent »
0-A. Concept
0-B. Code
I. Fonction « Find Window »
I-A. Concept
I-B. Code
II. « NTGlobalFlag »
II-A. Concept
II-B. Code
III. « ProcessHeap »
III-A. Concept
III-B. Code
IV. « CheckRemoteDebuggerPresent »
IV-A. Concept
IV-B. Code
V. « Registry OllyDbg Detected »
V-A. Concept
V-B. Code
VI. « OutputDebugString »
VI-A. Concept
VI-B. Code
VII. Complément :
VII-A. Fonction GET_Adresse_PEB
VII-B. Fonction GET_Adresse_TEB


0. Fonction « IsDebuggerPresent »


0-A. Concept


0-B. Code

PROCEDURE Protect_IsDebuggerPresent(type)
SELON type
	CAS 1
		RENVOYER API ("KERNEL32","IsDebuggerPresent")
	CAS 2
		hMod est un entier = API ("KERNEL32","GetModuleHandleA","KERNEL32.dll")
		Adr est un entier = API ("KERNEL32","GetProcAddress",hMod,"IsDebuggerPresent")
		ByteRead est un entier sans signe sur 1 octets
		Transfert (&ByteRead,Adr,1)
		SI (ByteRead)<>0x64 ALORS
			RENVOYER Vrai
		SINON
			RENVOYER Faux
		FIN
	CAS 3
		AdrPEB est un entier sans signe sur 4 octets = :GET_Adresse_PEB ()
		adrRet est un entier sans signe sur 1 octet = 0x0
		Transfert (&adrRet,AdrPEB+0x2,1)
		RENVOYER adrRet
	AUTRE CAS
FIN

I. Fonction « Find Window »


I-A. Concept


I-B. Code

PROCEDURE Protect_FindWindow()
OllyFindWindow est une chaîne = "OLLYDBG"
RENVOYER API ("USER32.DLL","FindWindowA",OllyFindWindow,0)

II. « NTGlobalFlag »


II-A. Concept


II-B. Code

PROCEDURE Protect_NTGlobalFlag()
PEB est un entier sans signe sur 4 octets = :GET_Adresse_PEB ()
AdrTmp  est un entier sans signe sur 1 octet = 0x0
PEB = PEB+0x68
Transfert (&AdrTmp,PEB,4)
SI AdrTmp = 0x70 ALORS
	RENVOYER Vrai
SINON
	RENVOYER Faux
FIN

III. « ProcessHeap »


III-A. Concept


III-B. Code

PROCEDURE Protect_ProcessHeap()

AdrTmp  est un entier sans signe sur 4 octet = 0x00000000
AdrTmp2  est un entier sans signe sur 1 octet = 0x00
PEBest un entier sans signe sur 4 octets = :GET_Adresse_PEB ()
AdrTmp = (PEB+0x18)
Transfert (&AdrTmp,AdrTmp,4)
Transfert (&AdrTmp2,AdrTmp+0x10,1)
SI AdrTmp2<>0x0 ALORS
	RENVOYER Vrai
SINON
	RENVOYER Faux
FIN

IV. « CheckRemoteDebuggerPresent »


IV-A. Concept


IV-B. Code

PROCEDURE Protect_CheckRemoteDebuggerPresent()
SI SysVersionWindows(sysVersionPlateForme)="NT" ALORS
	hMod est un entier = API ("KERNEL32","GetModuleHandleA","KERNEL32.dll")
	adrCRDP est un entier sans signe sur 4 octets = API ("KERNEL32","GetProcAddress",hMod,"CheckRemoteDebuggerPresent")
	val_param est un tableau fixe de 2 entiers sur 4 octets
	val_param[1] = -1
	val_param[1] = 0x0
	:Emulate_Call_Function (adrCRDP,val_param)
	RENVOYER 0
SINON
	RENVOYER 0
FIN

V. « Registry OllyDbg Detected »


V-A. Concept


V-B. Code

PROCEDURE Protect_Registry(type)
SELON type
	CAS 1
		SI RegistreLit ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug","Debugger")<> "" ALORS
			RENVOYER Vrai
		SINON
			RENVOYER Faux
		FIN
	CAS 2
		SI RegistreExiste( "HKEY_CLASSES_ROOT\exefile\shell\Open with Olly&Dbg\command") ALORS
			RENVOYER Vrai
		SINON
			RENVOYER Faux
		FIN
	CAS 3
		SI RegistreExiste( "HKEY_CLASSES_ROOT\dllfile\shell\Open with Olly&Dbg\command") ALORS
			RENVOYER Vrai
		SINON
			RENVOYER Faux
		FIN
	AUTRE CAS
FIN

VI. « OutputDebugString »


VI-A. Concept


VI-B. Code

PROCEDURE Protect_OutputDebugString()
QUAND EXCEPTION DANS API ("KERNEL32","OutputDebugStringA","%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s")
	RENVOYER Faux
FAIRE
	RENVOYER Vrai
FIN

VII. Complément :


VII-A. Fonction GET_Adresse_PEB

PROCEDURE PRIVÉE GET_Adresse_PEB()
AdrTEB est un entier = :Get_Adresse_TEB ()
AdrPEB est un entier sans signe sur 4 octets
Transfert (&AdrPEB,AdrTEB+0x30,4)
RENVOYER AdrPEB

VII-B. Fonction GET_Adresse_TEB

PROCEDURE PRIVÉE Get_Adresse_TEB()
RENVOYER API ("NTDLL.DLL","NtCurrentTeb")


               Version PDF (Miroir)   Version hors-ligne (Miroir)

Valid XHTML 1.0 TransitionalValid CSS!