888 ,e, e88'888 888,8, ,"Y88b e88'888 888 ee " 888 8e e88 888 d888 '8 888 " "8" 888 d888 '8 888 P 888 888 88b d888 888 Y888 , 888 ,ee 888 Y888 , 888 b 888 888 888 Y888 888 "88,e8' 888 "88 888 "88,e8' 888 8b 888 888 888 "88 888 , 88P "8",P" ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Programme : Tickle v1.1 Protection: Numero de Serie Ecrit par : LuCiFuGe RoFoCaLe [STYX] Type de Crack: Patch + Numero Date : 1997 Niveau: Debutant ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Introduction: Vous ne trouverez pas dans ce texte des explications sur le fontionnement de SoftIce. Mais un exemple simple de protection par numero de serie. 1) Lancer la boite d enregistrement de Tickle Remplir tous les champs de la boite de dialogue ex: Lucifuge / 97979797 2) Rentrer dans SoftIce (CTRL+D) Poser le breakpoint suivant: BPX hmemcpy hmemcpy : Peut servir pour la copie du code 3) Sortir de SoftIce (CTRL+D) Valider la boite d enregistrement Softice se declenche une premiere fois pour le nom Appuyer sur F5 afin d'atteindre la copie du code Maintenant vous savez que le nom et le code sont a leur place en memoire 4) Chercher le Code en memoire s 0 l ffffffff '97979797' -> ex: adresse 0030:21553C Poser un BreakPoint sur les acces au code (bpm 0030:21553C) N'oublier pas d'enlever le breakpoint sur hmemcpy (BD 0) 5) Appuyer sur F5, SoftIce se declenche tout de suite -> Tickle lit le code MOV CL,CL \ CMP DL,BL \ JNZ 78005DAC --> Code de MSVCRT TEST CL,CL / JZ 78005DB6 / ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Apres quelques coups de F10, on obtient: CALL 402180 PUSH EAX MOV ECX,[EBP+8] CALL 404110 TEST EAX,EAX avec EAX=1 ÚÄÄJNZ 4040F9 ³ MOV EAX,1 ³ JMP 4040FB ÀÄ>XOR EAX,EAX EAX=0 JMP 404100 .... ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ CALL 4040D0 TEST EAX,EAX avec donc EAX=0 JZ 403ADC ÄÄÄÄÄÄÄÄ-> Mauvais Code !!! LEA ECX,[EBP-10] .... ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 5) Commence Ici les choses serieuses, nous devons decider comment attaquer le probleme: a) Trouver le Numero de Serie correspondant a notre nom b) Faire un patch afin que n'importe quel numero soit bon Je vais commencer par la premiere methode car c'est dans ce cas precis la plus facile ;) Methode A) ÄÄÄÄÄÄÄÄÄÄ Bon c'est bien, nous sommes remonte a la source de la routine de test. Maintenant, nous allons l'exploiter.... 7) Enlever tous les breakpoint (bc *) Poser un breakpoint sur le CALL 4040D0 (vous avez compris pourquoi ?) Relancer la boite d'enregistrement .. etc.. Lorsque vous avez validee la boite, SoftIce se declenche. Bon nous sommes positionne au debut de la routine de test. CALL 4040D0 NOUS SOMMES ICI !!! TEST EAX,EAX avec donc EAX=0 JZ 403ADC ÄÄÄÄÄÄÄÄ-> Mauvais Code !!! LEA ECX,[EBP-10] .... 8) Presser F8, afin de rentrer a l'interieur de la routine 4040D0. CALL 402180 NOUS SOMMES ICI !!! PUSH EAX MOV ECX,[EBP+8] CALL 404110 TEST EAX,EAX avec EAX=1 ÚÄÄJNZ 4040F9 ³ MOV EAX,1 ³ JMP 4040FB ÀÄ>XOR EAX,EAX EAX=0 JMP 404100 .... Comme vous pouvez le voir, si EAX = 1 a la sortie de la routine 404110 alors nous sommes en presence d'un mauvais code. La routine 404110 est de toute evidence la routine de test, Regardons donc les arguments qui lui sont donnees.. PUSH EAX ÄÄÄÄÄÄÄÄ-> Contient notre mauvais code MOV ECX,[EBP+8] -> Pointeur sur le bon code CALL 404110 ÄÄÄÄÄ-> La routine de Test Donc il suffit d'aller voir ce que contient ce pointeur: exemple: EBP+8 = 63F948 taper 'd 63F948' sans les ' vous obtenez un truc comme cela : 1C 1F 76 00 ...... taper donc 'd 761F1C' et oh miracle notre Code :) pour moi cela donne : Name: Lucifuge Code: C28FA276 Methode B) ÄÄÄÄÄÄÄÄÄÄ Vous avez deja vu le plus gros avec la methode A, donc il vous suffit maintenant de reflechir comment truquer le resultat du test. CALL 4040D0 NOUS SOMMES ICI !!! TEST EAX,EAX avec donc EAX=0 JZ 403ADC ÄÄÄÄÄÄÄÄ-> Mauvais Code !!! LEA ECX,[EBP-10] .... Vous pourriez transformer le JZ par un JNZ par exemple, mais afin d'etre sur en cas de test ulterieur, nous allons rentrer dans la routine de test CALL 402180 NOUS SOMMES ICI !!! PUSH EAX MOV ECX,[EBP+8] CALL 404110 TEST EAX,EAX avec EAX=1 ÚÄÄJNZ 4040F9 ³ MOV EAX,1 ³ JMP 4040FB ÀÄ>XOR EAX,EAX EAX=0 JMP 404100 .... Bon et bien maintenant vous pouvez modifier le JNZ par un JZ :) Comme vous pouvez le constater cette methode a un defaut, les codes bons ne fonctionnent plus ;) Donc si vous desirez faire un patch parfait, il vous suffira de mettre eax = 0 a la sortie de 404110 sans modifier le JNZ Il vous reste plus qu'a modifier votre executable: 85 C0 0F 85 0A 00 00 00 B8 01 par 85 C0 0F 84 0A 00 00 00 B8 01 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Voila c'est enfin fini !!! LuCiFuGe RoFoCaLe [STYX] 1997