Opsporen SoftICE door te zoeken Memory
Deze detectie zoekt in het geheugen in de V86-modus voor de WINICE.BR string. Omdat deze methode zelden gebruikt wordt, is het overwegen waard, maar het kan alleen worden gebruikt in Windows 9x. Deze routine kan gemakkelijk worden verborgen omdat het niet oproepen (noch API noch INT) gebruiken. Dit maakt het onmogelijk op te sporen, en, als je het goed gebruikt, kan het ontdekken een debugging-poging voor een aanvaller om het programma voort te zetten, zal hij aan zijn code of de inhoud van het register te veranderen. Om te ontdekken het debuggen poging, het enige wat je hoeft te doen is controleren na deze truc om te zien of de registers echt de waarden die zij zou moeten bevatten, en u moet een CRC-test uit te voeren om te zien of het programma code is gewijzigd in geheugen. Als SoftICE niet actief is in het geheugen, zal uw routine controle draaien zonder problemen. Deze methode is een nadeel is dat het werkt alleen goed met oudere versies van SoftICE, en een fout optreden als een van de nieuwere versies SoftICE is actief in het geheugen. .386 . MODEL FLAT, STDCALL locals springt UNICODE = 0 omvatten w32.inc Extrn SetUnhandledExceptionFilter: Proc. Message2 gegevens message3 delayESP vorige db "Opsporing door geheugen zoeken", 0 dB "SoftICE niet gevonden", 0 dB "SoftICE gevonden", 0 dd 0; de ESP-register slaat hier dd 0; de ESP-register zal redden het adres van de ; vorige SEH dienst hier. . code Start: ;------------------------------------------------- ------------------------------------------------; Sets SEH in het geval van een fout ;------------------------------------------------- ------------------------------------------------ mov [ delayESP], esp push compenseren fout oproep SetUnhandledExceptionFilter mov [vorige], eax mov al, "W" mov edi, 10000h ecx mov, 400000h - 10000h meer: repnz SCASB jecxz notfound cmp dword ptr [edi], "INIC" jz found1 jmp meer found1: voeg edi, 4 cmp dword ptr [edi], "RB.E" Jnz meer push woord ptr 1 JMP korte gevonden notfound: push woord ptr 0; gezocht naar de string in WINICE.BR; V86 geheugen begint de zoektocht hier ; geeft het aantal bytes om te zoeken ; zoekt naar een "W" string in het geheugen, als de string niet gevonden wordt, het geheugen zoeken; eindigt omdat SoftICE niet actief is in het geheugen.; wanneer er een "W" string gevonden wordt, deze tests om te zien, of de " INIC "string volgt.; eindigt wanneer" INIC "is gevonden , anders is het zoekt alle geheugen ; verplaatsen door 4 karakters (bytes) ; wanneer "WINIC" is gevonden controles om te zien of het ";" E. RB "string volgt , als het niet, het geheugen zoeken eindigt, ga hier als SoftICE actief is in het geheugen en, sla 1 in de stapel te tonen dat SoftICE, werd gevonden. ; Ga hier als SoftICE niet gevonden wordt in het geheugen. gevonden: ;------------------------------------------------- ------------------------------------------------; Sets vorige SEH service ;------------------------------------------------- ------------------------------------------------ push dword ptr [vorige] oproep SetUnhandleExceptionFilter ;------------------------------------------------- ------------------------------------------------ pop ax test ax, ax Jnz springen verder:; herstelt de return waarde; tests om te zien of de return waarde is 1, maar als het is, springt het programma actief omdat SoftICE is;. oproep MessageBoxA, 0, offset message2, \ offset message1, 0 oproep ExitProcess, -1 jump: oproep MessageBoxA, 0, offset message3, \ offset message1, 0 oproep ExitProcess, -1 fout:; SEH start een nieuwe dienst in geval van een fout mov esp, [delayESP] push compenseren blijven ret uiteinden einde Start een artikel afkomstig van Sam Petrone
|
|||
|