Opsporen SoftICE door te bellen INT 68h


  Share  
|


Hier is een manier om de aanwezigheid van SoftICE sporen in het geheugen door te bellen met de waarde INT 43h bevatten alvorens te bellen INT in de AX register. 68h. De AH register moet 68h. Als SoftICE is actief in het geheugen, de return waarde 0F386h zal

Dit is een bekende methode voor het opsporen van SoftICE die veilig is en vaak gebruikt, maar alleen in Windows 9x. Je ziet het in actie, bijvoorbeeld in SafeDisc:

.386 
. MODEL FLAT, STDCALL locals 
springt 
UNICODE = 0 
omvatten w32.inc 
Extrn SetUnhandledExceptionFilter: Proc. Gegevens message3 message2 delayESP vorige. Code db "Opsporing door te bellen INT 68h", 0 dB "SoftICE gevonden", 0 dB "SoftICE niet gevonden", 0 dd 0
; de ESP-register slaat hier dd 0; de ESP-register zal redden het adres van de; vorige SEH dienst hier 
Start: 
;------------------------------------------------- ------------------------------------------------; Sets SEH in het geval van een fout 
;------------------------------------------------- ------------------------------------------------
mov [delayESP], esp 
push compenseren fout 
oproep SetUnhandledExceptionFilter 
mov [vorige], eax 
;------------------------------------------------- ------------------------------------------------
 
; Het nieuwe adres voor Structured Exception Handling (SEH) hier is ingesteld om te waarborgen dat in geval van een, fout, zal het programma verder uit een fout label en wordt correct einde. Dit is belangrijk, als, bijvoorbeeld, het programma vraagt een interrupt die zal worden uitgevoerd juist alleen als SoftICE; actief is, maar die zal leiden tot een fout en crash van het programma als SoftICE niet actief is. Ten slotte, de vorige SEH service-adres wordt opgeslagen. 
;------------------------------------------------- ------------------------------------------------ ah, 43h int 68h push eax; service nummer; roept de INT 68h onderbreking; slaat de return waarde
 
;------------------------------------------------- ------------------------------------------------; Sets vorige SEH dienst ;---------------------------------------------- -------------------------------------------------- - push dword ptr [vorige] 
oproep SetUnhandledExceptionFilter 
;------------------------------------------------- ------------------------------------------------; Sets de oorspronkelijke SEH service-adres 
;------------------------------------------------- ------------------------------------------------
pop eax; herstelt de return waarde cmp ax, 0f386h; tests om te zien of de return waarde 
, een "magische getal" 
;------------------------------------------------- ------------------------------------------------; Als SoftICE is actief in het geheugen, zal de return waarde F386h in de AX register. ;-------------------------------- -------------------------------------------------- ---------------
JZ springen, zo ja, het programma springt omdat SoftICE is 
, actief in het geheugen 
verder: 
oproep MessageBoxA, 0, offset message2, \ offset message1, 0 
, indien de return waarde was dan F386h,; SoftICE niet gevonden, en een foutmelding; wordt weergegeven. 
oproep ExitProcess, -1; beëindigt het programma 
jump: 
oproep MessageBoxA, 0, offset message3, \ offset message1, 0 
; drukt een bericht dat SoftICE werd gevonden. Iedere; code kan volgen vanaf dit punt. 
oproep ExitProcess, -1 
; beëindigt het programma fout:; start een nieuwe SEH dienst in geval van een fout. mov esp, [delayESP] 
push compenseren blijven ret 
, als er een fout optreedt in het programma, SEH, zorgt ervoor dat het programma zal blijven van de; fout etiket. 
uiteinden 
einde Start 
; einde van het programma
een artikel afkomstig van Sam Petrone


Share  

© 2005-2010 E-articles.info All Rights Reserved - Terms and conditions