Detectando SoftICE llamando 3h INTERNO


  Share  
|


Éste es uno de los trucos más bien conocidos el contra-eliminar errores, y utiliza una puerta trasera en SoftICE sí mismo. Trabaja en todas las versiones de Windows, y se basa en llamar 3h INTERNO con los registros que contienen los valores siguientes: EAX=04h y EBP=4243484Bh. Ésta es realmente la secuencia de "BCHK". Si SoftICE es activo en memoria, el registro de EAX contendrá un valor con excepción de 4.

Este truco se ha utilizado a menudo en el código de la varia compresión y de los programas de codificación, y es bien sabido debido a su uso amplio. Cuando está utilizado bien, puede causar apuro incluso para las galletas más experimentadas.

386 
MODEL PLANO, stdcall 
 
los locals saltan 
UNICODE=0 
incluya w32.inc 
Extrn SetUnhandledExceptionFilter: Detección
del DB anterior del coda del delayESP del data message3 message2 
de PROC "llamando el 3h" INTERNO, 0 DB "found" de SoftICE, found"de 
SoftICE de 0 DB" no, 0 DD 0
el registro del;the se ahorra ESPECIALMENTE aquí.
el registro del;the de la DD 0 ahorrará ESPECIALMENTE la 
dirección del 
servicio;previous de SEH aquí. 
Comienzo: 
;
-;Sets SEH en caso de que de un error 
;
movimientos [ delayESP ], especialmente
 
empuje el error compensado 
llame SetUnhandledExceptionFilter 
movimientos [ anteriores ], eax
 
;
la nueva dirección del;The para la dirección de 
excepción estructurada (SEH) se fija aquí para asegurar eso en caso 
de que de 
el;error, el programa continuará de una etiqueta 
del error y terminará correctamente. Esto es importante 
el;if, por ejemplo, el programa llama una 
interrupción que sea realizada correctamente solamente si SoftICE 
;is activos, pero que causarán un error y 
estrellan el programa si SoftICE no es activo. 
;Finally, se ahorra la dirección anterior del servicio de
SEH. 
; el eax, ebp de 4 movimientos, valores ";"magic los
"del eax interno del empuje 3h de" BCHK a ser el;whether encontrado 
SoftICE es activo
 ;calls los;saves INTERNOS de la interrupción 3h 
el valor de vuelta 
;
servicio anterior de los;Sets SEH 
; empuje la PTR del dword [ anterior ] 
llame SetUnhandledExceptionFilter 
;
;Sets la dirección original del servicio de SEH 
; haga estallar el eax del CMP del eax, 
salto de 4 jnz continúan: ;restores el valor de vuelta
 los;tests para considerar si el eax era;if 
cambiante que fue cambiado, SoftICE son memoria activa del;in
 
llame MessageBoxA, 0, message2 compensado, \ 
message1,0 compensado 
;
el;If que el valor de vuelta es 4 SoftICE no fue 
encontrado y el programa imprime un mensaje de error.
 ; llamada ExitProcess, -1 
programa de los;ends 
salto: 
llame MessageBoxA, 0, message3 compensado, \ message1,0 
compensado 
;
;Displays un mensaje que SoftICE fue encontrado; 
cualquier código puede seguir este punto.
 ; llamada ExitProcess, -1 
programa de los;ends 
error: 
;starts un nuevo servicio de SEH en caso de que de un 
movimiento del error especialmente, [ delayESP ]
 
la compensación del empuje continúa la vuelta 
;
el;If que un error ocurre en el programa, SEH se 
asegurará de que el programa continúe de la etiqueta del;error. 
;-extremos 
comienzo del final	
;end del programa
 
esto es un artículo agregado por Sam Petrone


Share  

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