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