Detectando SoftICE procurarando a memória


  Share  
|


Esta deteção procurara a memória na modalidade V86 pela corda de WINICE.BR. Porque este método é usado infrequëntemente, é worth considerar, embora pode somente ser usado em Windows 9x.

Esta rotina pode fàcilmente ser escondida porque não usa chamadas (nem API nem INTERNO). Isto fará impossível detectar, e, se você o usar bem, pode descobrir eliminar erros attempt.for um atacante para fazer o programa continuar, terá que mudar seu código ou os índices do registo.

Para descobrir a tentativa eliminar erros, tudo que você necessita fazer deve verificar depois que este truque para ver se os registos contiverem realmente os valores que devem conter, e você necessitarão executar um teste do CRC para ver se o código do programa for mudado na memória. Se SoftICE não for ativo na memória, sua rotina verificando funcionará sem problemas.

A desvantagem deste método um é que trabalha bem somente com versões mais velhas de SoftICE, e um erro ocorrerá se uma de umas versões mais novas de SoftICE's for ativa na memória.

386 
MODEL LISO, locals do stdcall 
saltos 
UNICODE=0 
inclua w32.inc 
Extrn SetUnhandledExceptionFilter: O DB 
precedente do delayESP do data message2 message3 de PROC "deteção 
pela busca da memória", 0 DB de "found" SoftICE não, found"de 
SoftICE de 0 DB", 0 registos do;the do dd 0 ESP conserva aqui o 
registo do;the do dd 0 ESP conservará o endereço do 
serviço;previous de SEH aqui. 
code 
Começo: 
; ;Sets SEH caso que de um erro 
; movimentos [ delayESP], esp erro offset do
impulso
movimentos de SetUnhandledExceptionFilter da 
chamada [ precedentes ], al dos movimentos do eax, "W"
edi dos movimentos, ecx dos movimentos 10000h, 
400000h - 10000h mais: notfound do jecxz do repnz SCASB
ptr do dword do cmp [ edi ], jmp do jz found1 de 
"INIC" mais found1: adicione o edi, 4
ptr do dword do cmp [ edi ], jnz de "RB.E" mais 
ptr 1 da palavra do impulso
notfound encontrado short do jmp: 
empurre;searches do ptr 0 da palavra para a corda de WINICE.BR 
em;begins da memória;V86 a busca aqui
;specifies o número dos bytes para procurarar
os;searches para uma corda de "W" no;if da 
memória a corda não são encontrados, os;ends da busca da memória 
porque SoftICE não é ativo na memória. ;when uma corda de "W"
é encontrado, isto testa para ver que;whether que a corda de "INIC" 
segue. ;ends quando "INIC" for encontrado
;otherwise procurara toda a memória
;move por 4 caráteres (bytes)
;when "WINIC" está-lhe encontrado verifica para 
ver se que corda do;"e.rb a" siga
;if não , a busca da memória termina o;go aqui 
se SoftICE for ativo na memória e no;save 1 na pilha mostrar que 
os;was de SoftICE encontraram.
;Go aqui se SoftICE não for encontrado na memória. 
encontrado: 
; serviço precedente dos;Sets SEH 
; empurre o ptr do dword [ precedente ] 
chame SetUnhandleExceptionFilter 
 
; estale o machado do teste do machado, 
salto do jnz do machado continuam: os;restores os;tests do 
retorno para ver se o valor do retorno for 1;if que é, o programa do 
valor saltam porque SoftICE é;active.
 
chame MessageBoxA, 0, message2 offset, \ message1,0 
offset 
chame ExitProcess, -1 
salto: 
chame MessageBoxA, 0, message3 offset, \ message1,0 
offset 
chame ExitProcess, -1 
erro: ;starts um serviço novo de SEH caso 
que de um erro
 
os movimentos esp, offset do impulso [ do delayESP
] continuam o retorno 
extremidades 
começo do fim 
 
este é um artigo adicionado por Sam Petrone


Share  

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