Detectando SoftICE chamando 3h INTERNO


  Share  
|


Este é um dos truques melhor sabidos anti-eliminar erros, e usa uma porta traseira em SoftICE própria. Trabalha em todas as versões de Windows, e é baseado em chamar 3h INTERNO com os registos que contêm os seguintes valores: EAX=04h e EBP=4243484Bh. Esta é realmente a corda de "BCHK". Se SoftICE for ativo na memória, o registo de EAX conterá um valor à excepção de 4.

Este truque foi usado frequentemente no código da vária compressão e de programas codificando, e sabe-se bem por causa de seu uso largo. Quando usado bem, pode causar o problema mesmo para os biscoitos mais experientes.

386 
MODEL LISO, stdcall 
 
os locals saltam 
UNICODE=0 
inclua w32.inc 
Extrn SetUnhandledExceptionFilter: Do DB 
precedente do code do delayESP do data message3 message2 de PROC 
deteção "chamando 3h" INTERNO, 0 DB "found" de SoftICE, 
found"SoftICE de 0 DB de" não, 0 dd 0
o registo do;the é conservado ESP aqui. o 
registo do;the do dd 0 ESP conservará o endereço do 
serviço;previous de SEH aqui. 
Começo: 
;
-;Sets SEH caso que de um erro 
;
movimentos [ delayESP ], esp
 
empurre o erro offset 
chame SetUnhandledExceptionFilter 
movimentos [ precedentes ], eax
 
;
o endereço novo do;The para a manipulação de exceção 
estruturada (SEH) é ajustado aqui para assegurar aquele caso que do 
o;error, o programa continuará de uma etiqueta do
erro e terminará corretamente. Isto é importante 
o;if, para o exemplo, o programa chama uma 
interrupção que seja executada corretamente somente se SoftICE 
;is ativos, mas que causarão um erro e deixam de 
funcionar o programa se SoftICE não for ativo. 
;Finally, o endereço precedente do serviço de SEH é 
conservado. 
; o eax, ebp de 4 movimentos, do eax interno do 
impulso 3h de "BCHK" valores;"magic os" a ser o;whether encontrado 
SoftICE é ativo
 ;calls os;saves INTERNOS do interruption 3h o 
valor do retorno 
;
serviço precedente dos;Sets SEH 
; empurre o ptr do dword [ precedente ] 
chame SetUnhandledExceptionFilter 
;
;Sets o endereço original do serviço de SEH 
; estale o eax do cmp do eax, um salto de 4 
jnz continuam: ;restores o valor do retorno
 os;tests para ver se o eax era;if que mudado foi 
mudado, SoftICE são memória ativa do;in
 
chame MessageBoxA, 0, message2 offset, \ 
message1,0 offset 
;
o;If que o valor do retorno é 4 SoftICE não foi 
encontrado e o programa prints-out uma mensagem de erro.
 ; chamada ExitProcess, -1 
programa dos;ends 
salto: 
chame MessageBoxA, 0, message3 offset, \ message1,0 
offset 
;
;Displays uma mensagem que SoftICE estêve encontrado; 
qualquer código pode seguir este ponto.
 ; chamada ExitProcess, -1 
programa dos;ends 
erro: 
;starts um serviço novo de SEH caso que de um movimento 
do erro esp, [ delayESP ]
 
o offset do impulso continua o retorno 
;
o;If que um erro ocorre no programa, SEH assegurar-se-á 
de que o programa continue da etiqueta do;error. 
;-extremidades 
começo do fim	
;end do programa
 
este é um artigo adicionado por Sam Petrone


Share  

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