Crack: RECHERCHER: 74 02 33 C0 5F 5E 5B REMPLACER PAR: EB -- -- -- -- -- -- Programme : ACDSee 32 Cathégorie : Viewer/Browser PlateForme : Windows 95/NT Date : 11h, 27 juin 1998 Version : v2.1 Protection : Crack pour la Registration Fichier : Acdsee32.exe Outils : Soft-ice v2.0 Ou ça? : CD n°26 de PcTeam / http://www.acdsystems.com Temps passé: Quelques dizaines de minutes Cours : 06 - Menu Help / About / Register. Je met mon nom (Lucifer48) et j'entre un serial bidon - CTRL + D je met un bpx hmemcpy, re CTRL + D - Je click sur OK et ça revient sous soft-ice, j'appuie sur F5 (copie du nom en mémoire) et je trace via F10 jusqu'a l'affichage de la boîte tant attendue. XXXX:00403808 B801000000 MOV EAX,00000001 XXXX:0040380D E90BFFFFFF JMP 0040371D XXXX:00403812 6A00 PUSH 00 XXXX:00403814 A1F4624900 MOV EAX,[004962F4] XXXX:00403819 50 PUSH EAX XXXX:0040381A 689C634900 PUSH 0049639C XXXX:00403820 FF15304B4A00 CALL [004A4B30] <------- Méchante bôâte XXXX:00403826 6882000000 PUSH 00000082 Remarque: si on fait un D 0049639C on aperçoit le texte du message: "Your name and registration code do not match. Please check your name and code, then try again." En regardant les lignes du dessus on voit un JMP, forcément si on a entré le bon serial, le programme exécutera ce jump. On va donc remonter dans le code pour trouver un éventuel Jx 00403812. (CTRL + UpArrow). On finit par trouver: XXXX:00403795 50 PUSH EAX ;notre serial XXXX:00403796 51 PUSH ECX ;notre nom XXXX:00403797 E8E4F8FFFF CALL 0040380 <---- Call à explorer XXXX:0040379C 83C408 ADD ESP,08 XXXX:0040379F 85C0 TEST EAX,EAX XXXX:004037A1 7E6F JLE 00403812 <---- Si on saute: mauvais serial XXXX:004037A3 8D442438 LEA EAX,[EBP+38] XXXX:004037A7 8D4C2418 LEA ECX,[EBP+38] Je met un breakpoint bpx XXXX:00403795 et j'efface le bpx hmemcpy. Je suis tenté d'essayer de remplacer JLE par JL. Après le call EAX est null, je tape donc R EAX=1 et j'appuie sur F5, une belle boîte s'affiche mais je ne suis toujours pas enregistré correctement. Il va faloir explorer ce call et s'assurer qu'en sortant du call (avant le RET), EAX=1. Explorons le CALL 0040380: heureusement pour nous il est assez court et en voilà la fin: (avant on a testé si le nom est supérieur ou égal à 5 caractères) XXXX:004030A5 56 PUSH ESI XXXX:004030A6 6838634900 PUSH 00496338 <--- Pour les curieux, y'a un code: 294378973 XXXX:004030AB E890250200 CALL 00425640 <--- Call à explorer XXXX:004030B0 83C40C ADD ESP,0C XXXX:004030B3 83F801 CMP EAX,01 XXXX:004030B6 1BC0 SBB EAX,EAX XXXX:004030B8 5E POP ESI XXXX:004030B9 40 INC EAX XXXX:004030BA A350604900 MOV [00496050],EAX XXXX:004030BF C3 RET En sortant du CALL 00425640, EAX=0, après comme on peut le voir on compare s'il est égal à 1 et on stocke la valeur en mémoire. Explorons le CALL 00425640: On trace via F10, les premiers calls renvoient EAX<>0 (longueur du serial,nom...), on s'inquiète pas et on continu (à mon avis on doit être dans la fabrication du bon serial), on finit par arriver à la fin du call: XXXX:004256DB 83D8FF SBB EAX,-01 XXXX:004256DE 85C0 TEST EAX,EAX XXXX:004256E0 B801000000 MOV EAX,00000001 XXXX:004256E5 7402 JZ 004256E9 <--- nous y voilà XXXX:004256E7 33C0 XOR EAX,EAX <--- méchante instrucion XXXX:004256E9 5F POP EDI XXXX:004256EA 5E POP ESI XXXX:004256EB 5B POP EBX XXXX:004256EC 81C484000000 ADD ESP,00000084 XXXX:004256F2 C3 RET C'est donc ici que ce décide la valeur de EAX (0 ou 1), on remplace le JZ par un JMP et zou ça marche on est bien totalement enregistré. Remarque: il y a 1000 autres façons de cracker le soft mais j'essaye toujours dans la mesure du possible de patcher le moins d'octets possible (on ne sait jamais). N'importe quel serial est valable.