Programme : cRACK Me #3 by THE_q/PC PlateForme : Windows 95 Date : 14h07, 15 juillet 1998 Fichier : Crackme3.exe Outils : Soft-ice v3.2 Ou ça? : http://cracking.home.ml.org Temps passé: Quelques dizaines de minutes pour le crack, 1h30 d'écriture (je suis lent!) Cours : 13 Matos : Bloc-notes en 800*600 Après le #2 voilà le #3, il est pour moi moins bien que le #2 mais il est quand même intéressant. Comme je n'ai pas de docs sur l'API sous la main, on se contentera d'explications appriximatives. ============== 1. LET'S CRACK ============== Lancer le programme et un beau "nOT coRRECT !!! :-P" s'affiche (ça va pas durer). Dans le menu y'a une entrée "Re-Test", on va partir de là pour pénétrer dans le code. Je pose donc mon breakpoint préféré HMEMCPY (c'est celui qui marche quasi tout le temps) Je peux clicker sur "Re-Test" et me voilà dans le code. On est ici: XXXX:00401841 90 NOP XXXX:00401842 90 NOP XXXX:00401843 E801000000 CALL 00401849 ; <---- on sort d'ici XXXX:00401848 C3 RET XXXX:00401849 E8CFF8FFFF CALL 0040111D ; début du call 00401849 XXXX:0040184E 83F800 CMP EAX,00 XXXX:00401851 7519 JNZ 00010186C ; le test qui décide tout... Tout est là... Le cmp décide si c'est correct ou non. Il faut maintenant voir ce que fait le CALL 0040111D: XXXX:00401138 683B214000 PUSH 0040213B ;"SOFTWARE\Netscape\Netscape Navigator\Users" XXXX:0040113D 6802000080 PUSH 80000002 XXXX:00401142 E83A070000 CALL ADVAPI32!RegOpenKeyExA XXXX:00401147 83F800 CMP EAX,00 ;si la clef n'existe pas EAX=2 XXXX:0040114A 0F8519010000 JNZ 00401269 [ADVAPI32!RegOpenKeyExA] ouvre une clef (un répertoire si vous préférez) dans la base des registres (tout comme on ouvre un fichier avant de le lire) cette clé n'existant pas dans ma base des registres je vais donc la créer. Le mot 'software' étant en majuscules cela nous indique qu'il faut la créer dans HKEY_LOCAL_MACHINE on peut continuer ... XXXX:0040115E 6884214000 PUSH 00402184 ;"CurrentUser" XXXX:00401163 FF3590214000 PUSH DWORD PTR [00402190] XXXX:00041169 E81F070000 CALL ADVAPI32!RegQueryValueExA XXXX:0004116E 83F800 CMP EAX,00 ;si la variable n'existe pas EAX=2 XXXX:00041171 0F85F2000000 JNZ 00401269 [ADVAPI32!RegQueryValueExA] lit la valeur d'une variable à l'endroit ou la clef a été ouverte Je m'impresse donc de créer une variable "CurrentUser" (je choisis le type Valeur binaire) et j'y entre 41 42 43 44 (soit ABCD) ... XXXX:0040117D E805070000 CALL ADVAPI32!RegCloseKey ;ferme la 'clef' ouverte ... XXXX:004011A6 683B214000 PUSH 0040213B ;"SOFTWARE\Netscape\Netscape Navigator\Users\ABCD XXXX:004011AB 6802000080 PUSH 80000002 XXXX:004011B0 E8CC060000 CALL ADVAPI32!RegOpenKeyExA XXXX:004011B5 83F800 CMP EAX,00 ;si la clef n'existe pas EAX=2 XXXX:004011B8 0F85AB000000 JNZ 00401269 On recommence donc, en créant une nouvelle clef nommé 'ABCD' (contenu de la variable CurrentUser) et on peut de nouveau continuer ... XXXX:004011CC 68B6214000 PUSH 004021B6 ;"DirRoot" XXXX:004011D1 FF3590214000 PUSH DWORD PTR [00402190] XXXX:004011D7 E8B1060000 CALL ADVAPI32!RegQueryValueExA XXXX:004011DC 83F800 CMP EAX,00 ;si la variable n'existe pas EAX=2 XXXX:004011DF 0F8584000000 JNZ 00401269 [ADVAPI32!RegQueryValueExA] lit la valeur de la variable "DirRoot", que je m'impresse aussi de créer (type valeur binaire) et j'y entre 45 46 47 48 (soit EFGH) ... XXXX:004011EB E897060000 CALL ADVAPI32!RegCloseKey ;ferme la 'clef' ouverte ... XXXX:00401217 68000000C0 PUSH C0000000 XXXX:0040121C 68BE214000 PUSH 004021BE ;"EFG\bookmark.htm" XXXX:00401221 E891060000 CALL KERNEL32!CreateFileA XXXX:00401226 83F8FF CMP EAX,-04 ;EAX=FFFFFFFF si le fichier n'existe pas XXXX:00401229 743E JZ 00401269 On comprend tout de suite que le contenu de notre "DirRoot" ne va pas, on va donc changer afin d'obtenir la chaîne "C:\bookmark.htm" On entre donc dans "DirRoot" 43 3A 30 (le dernier octet ne sert à rien) Et on créer un fichier bookmark.htm dans la racine du disque C (on met n'importe quoi dedans pour l'instant). ... XXXX:0040123F E84F060000 CALL KERNEL32!GetFileSize ... XXXX:0040124C 668BC3 MOV AX,BX ;taille du fichier XXXX:0040124F E826FEFFFF CALL 0040107A ;analyse le contenu du fichier XXXX:00401254 83F801 CMP EAX,01 XXXX:00401257 7510 JNZ 00401269 Ici s'achève le 'call 0040111D' (après cela va de soit quelques POP), si tout se passe bien alors EAX=0, dans le cas contraire EAX=1 et on sort en 00401269. Ultime rempart: le call 0040107A. Que fait-il? Il va comparer le contenu du fichier avec la chaîne suivante "http://phrozencrew.org" si vous mettez ceci dans le fichier bookmark.htm (sans les 2 guillemets), le crackme vous mettra: cORRECT !!!!!!! :-) Voilà c'est fini pour aujourd'hui (une petite partie de warcraft II s'impose maintenant). And don't forget: LUCIFER48