Detectando SoftICE llamando 3h INTERNO
É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
|
|||
|