Name: Lucifer48 Serial Number: XJ5RDZ-5SDLVW-XCQ8E4-GMKY9S Name: LUCIFER48 Serial Number: XJ5RDZ-5SDLVW-XCQ8E4-GMKY9S Programme : WebExpert Cathégorie : Utilitaire PlateForme : Windows 95/NT 4.0 Date : 14h, 25 juin 1998 Version : v2.50 beta 2 (machera aussi sur toutes les version 2.xx) Protection : Registration (via Serial Number) Fichier : Wexpert2.exe Outils : Soft-ice v2.0 Ou ça? : CD PRO n°28 de PcTeam / http://www.visic.com Temps passé: Quelques secondes (+ quelques dizaines de minutes pour la rédaction) Cours : 04 Due the many requests I've decided... non je déconne... Résolution conseillée: 800*600 - Menu Aide/Enregistrement, j'entre mon nom (Lucifer48) et un serial bidon. - Avant d'appuyer sur entrée, je n'oublie pas d'aller sous soft-ice et de mettre le breakpoint hmemcpy (bpx hmemcpy pour les neuneus) bien connu maintenant. Puis taper F5 - Je clik sur OK, et comme d'hab ça revient tout seul sous soft-ice. - J'appuis 3 fois sur F5. Pourquoi 3 fois? Car au bout de la 4ème fois la boîte de dialogue "Mauvais numéro d'enregistrement" s'affiche. Le soft a donc effectué 4 copies en mémoire (rem: ça ne sert pas à grand chose de savoir ça) Au passage on désactive le breakpoint qui ne nous sert plus à rien maintenant (BD0) - Maintenant je trace (via F10 évidemment) - Au bout d'un petit instant le méchant message apparaît. Dans le code, on est ici: XXXX:004A5053 8BD0 MOV EDX,EAX <- Faites D EDX pour voir: "Mauvais numéro..." XXXX:004A5055 A11C0B5200 MOV EAX,[00520B1C] XXXX:004A505A 8B00 MOV EAX,[EAX] XXXX:004A505C 59 POP ECX XXXX:004A505D E822D8F8FF CALL 00432884 <- Méchante bôâte - Maintenant il va falloir remonter dans le code. En faisant CTRL + UpArrow. On arrive à un JMP: XXXX:004A501D 33D2 XOR EDX,EDX XXXX:004A501F E80C4CF8FF CALL 00429C30 XXXX:004A5024 EB3C JMP 004A5062 <- Gros comme un camion... XXXX:004A5026 6A30 PUSH 30 ... aucune instruction conditionnelle jusqu'en XXXX:004A5053 - Il est clair que si le JMP est exécuté on a tapé le bon code. Il va donc falloir trouver un test avec un Jx 004A5026. On remonte dans le code, au passage on remarque qu'il n'y a aucuns tests qui pourraient nous enduite en erreur, la présence de quelques 'mov' et 'call' nous rassurent... - Nous voilà donc arrivés: XXXX:004A4F80 E80FD4F7FF CALL 004222394 XXXX:004A4F85 8B55F8 MOV EDX,[EBP-08] XXXX:004A4F88 8B54FC MOV EAX,[EBP-04] XXXX:004A4F8B E8F4EEF5FF CALL 00403E84 XXXX:004A4F90 0F8590000000 JNZ 004A5026 <- Si on saute alors mauvais code - Que pourrait donc faire le CALL avant l'instruction JNZ? Cette procédure ne peut que forcément comparer la validité du serial number. On remarque au passage que 2 'mov' précèdent le call... Notre call compare donc notre serial bidon avec celui qui a été calculé (par le programme). Mais qu'est-ce qu'il pourrait y avoir dans EDX et en EAX ??? Quel suspense... On tape: D EDX ohh!!! notre serial bidon... D EAX miracle! (n'exagérons rien) le vrai bon serial s'affiche. Ultime remarque: vous vous souvenez juste avant que le message "Mauvais numéro d'enregistrement" apparaîsse, il y a une instruction 'mov EDX,EAX' (en XXXX:004A5053), en faissant D EDX (ou D EAX) on voit le message s'afficher (EDX est donc l'adresse de la chaîne de caractères) Maintenant appuyer sur ALT + Flèche Haut quatres fois et le vrai serial s'affiche. Comme quoi, ça a parfois du bon de se ballader en mémoire...