Détectant SoftICE en recherchant la mémoire
Cette détection recherche la mémoire en mode V86 la corde de WINICE.BR. Puisque cette méthode est rarement employée, elle est intéressant considérer, bien qu'elle puisse seulement être employée dans Windows 9x. Cette routine peut être facilement cachée parce qu'elle n'emploie pas des appels (ni api ni INTERNE). Ceci le rendra impossible pour détecter, et, si vous l'employez bien, il peut découvrir une correction attempt.for un attaquant pour faire le programme continuer, il devra changer son code ou le contenu du registre. Pour découvrir la tentative de correction, tout que vous devez faire doit vérifier après que ce tour pour voir si les registres contiennent vraiment les valeurs qu'ils devraient contenir, et vous deviez réaliser un essai de CRC pour voir si le code de programme a été changé dans la mémoire. Si SoftICE n'est pas en activité dans la mémoire, votre routine de vérification fonctionnera sans problèmes. L'inconvénient de cette méthode une est que cela fonctionne bien seulement avec des versions plus anciennes de SoftICE, et une erreur se produira si une de plus nouvelles versions de SoftICE's est en activité dans la mémoire. 386 MODEL PLAT, gens du pays de stdcall sauts UNICODE=0 incluez w32.inc Extrn SetUnhandledExceptionFilter : Le DB précédent de delayESP du data message2 message3 de PROC "détection par recherche de mémoire", 0 DBS "found" de SoftICE pas, found"de SoftICE de 0 DBS", 0 registres de ;the de la densité double 0 EN PARTICULIER sauve ici le registre de ;the de la densité double 0 EN PARTICULIER sauvera l'adresse du service ;previous de SEH ici. code Début : ; ;Sets SEH en cas d'erreur ; mouvements [ delayESP], en particulier erreur excentrée de poussée mouvements de SetUnhandledExceptionFilter d'appel [ précédents ], Al de mouvements d'eax, "W" edi de mouvements, ecx des mouvements 10000h, 400000h - 10000h davantage : notfound de jecxz du repnz SCASB PTR de dword de CMP [ edi ], jmp du jz found1 d'"INIC" plus de found1 : ajoutez l'edi, 4 PTR de dword de CMP [ edi ], jnz d'"RB.E" plus PTR 1 de mot de poussée notfound trouvé par short de jmp : poussez les ;searches de PTR 0 de mot pour la corde de WINICE.BR dans des ;begins de la mémoire ;V86 la recherche ici ;specifies le nombre de bytes pour rechercher des ;searches pour une corde de "W" dans le ;if de mémoire la corde n'est pas trouvés, les ;ends de recherche de mémoire parce que SoftICE n'est pas en activité dans la mémoire. ;when une corde de "W" est trouvé, ceci examine pour voir que ;whether que la corde d'"INIC" suit. ;ends quand "INIC" est trouvé ;otherwise il recherche toute la mémoire ;move par 4 caractères (bytes) ;when "WINIC" lui est trouvé vérifie pour voir si que corde du ;"e.rb la" suit ;if elle pas , la recherche de mémoire finit le ;go ici si SoftICE est en activité dans la mémoire et le ;save 1 en pile pour prouver que les ;was de SoftICE ont trouvé. ;Go ici si SoftICE n'est pas trouvé dans la mémoire. trouvé : ; service précédent des ;Sets SEH ; poussez le PTR de dword [ précédent ] appelez SetUnhandleExceptionFilter ; sautez la hache d'essai de hache, saut de jnz de hache continuent : les ;restores les ;tests de retour de valeur pour voir si la valeur de retour est 1 ;if qu'elle est, le programme saute parce que SoftICE est ;active. appelez MessageBoxA, 0, message2 excentré, \ message1,0 excentré appelez ExitProcess, -1 saut : appelez MessageBoxA, 0, message3 excentré, \ message1,0 excentré appelez ExitProcess, -1 erreur : ;starts un nouveau service de SEH en cas d'erreur les mouvements en particulier, [ excentrage de poussée de delayESP ] continuent rouissent extrémités début de fin c'est un article supplémentaire par Sam Petrone
|
|||
|