Détectant SoftICE en appelant 3h INTERNE


  Share  
|


C'est l'un des tours d'anti-correction les plus bien connus, et il emploie une porte arrière dans SoftICE elle-même. Cela fonctionne dans toutes les versions de Windows, et il est basé sur appeler 3h INTERNE avec des registres contenant les valeurs suivantes : EAX=04h et EBP=4243484Bh. C'est réellement la corde d'"BCHK". Si SoftICE est en activité dans la mémoire, le registre d'EAX contiendra une valeur autre que 4.

Ce tour a été souvent employé dans le code de la diverse compression et des programmes de codage, et il est bien connu en raison de sa utilisation large. Une fois utilisé bien, il peut causer l'ennui même pour les biscuits plus expérimentés.

386 
MODEL PLAT, stdcall 
 
les gens du pays sautent 
UNICODE=0 
incluez w32.inc 
Extrn SetUnhandledExceptionFilter : 
Détection de DB précédent de code de delayESP du data 
message3 message2 de PROC "en appelant 3h" INTERNE, 0 DBS "found" de 
SoftICE, found"de SoftICE de 0 DBS" pas, 0 densités doubles 0
le registre de ;the EN PARTICULIER est sauvé ici.
le registre de ;the de la densité double 0 EN PARTICULIER 
sauvera l'adresse du 
service ;previous de SEH ici. 
Début : 
;
-;Sets SEH en cas d'erreur 
;
mouvements [ delayESP ], en particulier
 
poussez l'erreur excentrée 
appelez SetUnhandledExceptionFilter 
mouvements [ précédents ], eax
 
;
la nouvelle adresse de ;The pour la manipulation 
d'exception structurée (SEH) est placée ici pour assurer cela en cas
d' 
le ;error, le programme continuera d'une 
étiquette d'erreur et finira correctement. C'est important 
le ;if, par exemple, le programme appelle une 
interruption qui sera exécutée correctement seulement si SoftICE 
;is actifs, mais qui causeront une erreur et se 
brisent le programme si SoftICE n'est pas en activité. 
;Finally, l'adresse précédente de service de SEH est 
sauvée. 
; l'eax, ebp de 4 mouvements, valeurs ";"magic des 
"d'eax interne de la poussée 3h d'" BCHK à être le ;whether trouvé
SoftICE est en activité
 ;calls les ;saves INTERNES de l'interruption 3h la
valeur de retour 
;
service précédent des ;Sets SEH 
; poussez le PTR de dword [ précédent ] 
appelez SetUnhandledExceptionFilter 
;
;Sets l'adresse originale de service de SEH 
; sautez l'eax de CMP d'eax, saut de 4 jnz 
continuent : ;restores la valeur de retour
 les ;tests pour voir si l'eax était ;if changé 
qu'il a été changé, SoftICE est mémoire active de ;in
 
appelez MessageBoxA, 0, message2 excentré, \ 
message1,0 excentré 
;
le ;If que la valeur de retour est 4 SoftICE n'a pas été
trouvé et le programme imprime un message d'erreur.
 ; appel ExitProcess, -1 
programme de ;ends 
saut : 
appelez MessageBoxA, 0, message3 excentré, \ message1,0 
excentré 
;
;Displays un message que SoftICE a été trouvé ; 
n'importe quel code peut suivre ce point.
 ; appel ExitProcess, -1 
programme de ;ends 
erreur : 
;starts un nouveau service de SEH en cas de mouvement des 
erreurs en particulier, [ delayESP ]
 
l'excentrage de poussée continuent 
rouissent 
;
le ;If que une erreur se produit dans le programme, SEH 
s'assurera que le programme continuera de l'étiquette de ;error. 
;-extrémités 
début de fin	
;end de programme
 
c'est un article supplémentaire par Sam Petrone


Share  

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