Detectando SoftICE procurarando a memória
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
|
|||
|