SOLUCE du defi_Fibo_49.exe Salut, voila la solutions que j'ai trouvé en 2 heures ( c'est mon premier crackme que j'ai cracké tout seul). Outils utilisés : - Pied. - OllyDBG 1.10 Analyse avec pied : Pied ne trouve rien. La pêche du serial : 00401032 . 68 F4010000 PUSH 1F4 ; /Count = 1F4 (500.) 00401037 . 68 B8744000 PUSH defi_Fib.004074B8 ; |Buffer = defi_Fib.004074B8 0040103C . 68 EE030000 PUSH 3EE ; |ControlID = 3EE (1006.) 00401041 . 57 PUSH EDI ; |hWnd 00401042 . FFD6 CALL ESI ; \GetDlgItemTextA Cet api sert à récupérer le nom et il sera stocké à l'adresse 4074b8. 00401044 . 68 F4010000 PUSH 1F4 ; /Count = 1F4 (500.) 00401049 . 68 C0724000 PUSH defi_Fib.004072C0 ; |Buffer = defi_Fib.004072C0 0040104E . 68 EF030000 PUSH 3EF ; |ControlID = 3EF (1007.) 00401053 . 57 PUSH EDI ; |hWnd 00401054 . FFD6 CALL ESI ; \GetDlgItemTextA Cet api sert à récupérer le serial et il sera stocké à l'adresse 4072c0. La ligne suivante est le début de la routine qui vérifie le nom et le serial 00401056 . B8 B8744000 MOV EAX,defi_Fib.004074B8 0040105B . 8D50 01 LEA EDX,DWORD PTR DS:[EAX+1] 0040105E . 8BFF MOV EDI,EDI 00401060 > 8A08 MOV CL,BYTE PTR DS:[EAX] 00401062 . 40 INC EAX 00401063 . 84C9 TEST CL,CL 00401065 .^75 F9 JNZ SHORT defi_Fib.00401060 ;boucle qui compte le nbre ;de lettre du nom 00401067 . 2BC2 SUB EAX,EDX 00401069 . 83F8 05 CMP EAX,5 ;compare ce nbre à 5 0040106C . 76 74 JBE SHORT defi_Fib.004010E2 ;saute si inférieur ou égal à 5 ;donc le nom doit avoir au moins 6 lettres ( bizarre ) 0040106E . B8 B8744000 MOV EAX,defi_Fib.004074B8 00401073 . 8D50 01 LEA EDX,DWORD PTR DS:[EAX+1] 00401076 > 8A08 MOV CL,BYTE PTR DS:[EAX] 00401078 . 40 INC EAX 00401079 . 84C9 TEST CL,CL 0040107B .^75 F9 JNZ SHORT defi_Fib.00401076 ;boucle qui compte le nbre ;de lettredu nom 0040107D . 2BC2 SUB EAX,EDX 0040107F . 83F8 0A CMP EAX,0A ;compare ce nbre à 10 ( 0Ah) 00401082 . 73 5E JNB SHORT defi_Fib.004010E2 ;saute si supérieur ou égal à 10 ; donc le nom a 9 lettres au maximun ( bizarre bis ) 00401084 . 33F6 XOR ESI,ESI 00401086 . B8 B8744000 MOV EAX,defi_Fib.004074B8 0040108B . 8935 B0764000 MOV DWORD PTR DS:[4076B0],ESI 00401091 . 8D50 01 LEA EDX,DWORD PTR DS:[EAX+1] 00401094 > 8A08 MOV CL,BYTE PTR DS:[EAX] ;on compte de nouveau le ;nbre de lettres 00401096 . 40 INC EAX ; 00401097 . 84C9 TEST CL,CL ; 00401099 .^75 F9 JNZ SHORT defi_Fib.00401094 ; 0040109B . 2BC2 SUB EAX,EDX ;le resultat est ici dans eax 0040109D . 8D50 01 LEA EDX,DWORD PTR DS:[EAX+1] 004010A0 . 85D2 TEST EDX,EDX 004010A2 . 7E 0F JLE SHORT defi_Fib.004010B3 004010A4 . 33C9 XOR ECX,ECX ; mets ecx à zéro 004010A6 > 03F1 ADD ESI,ECX ; ajoute esi à ecx ? 004010A8 . 03C8 ADD ECX,EAX ; ajoute ecx à eax 004010AA . 4A DEC EDX ; décrémente edx 004010AB .^75 F9 JNZ SHORT defi_Fib.004010A6 ; et saute si edx<0 ; cette boucle crée le serial ; le résultat est stocké dans esi ; Le serial est généré de la facon suivante : boucle0 esi=0 ecx=0 ; eax=6 ecx=6 ; eax est le nbre de lettre du serial= 6 on ajoute ce nombre à esi boucle1 esi=6 ecx=6 ; eax=6 ecx=12; ecx contient 2 eax = 12 on ajoute ce nbre à esi boucle2 esi=18 ecx=12; eax=6 ecx=18; ecx contient 3 eax = 18 idem boucle3 esi=36 ecx=18; eax=6 ecx=24; ecx contient 4 eax = 24 idem boucle4 esi=60 ecx=24; eax=6 ecx=30; ecx contient 5 eax = 30 idem boucle5 esi=90 ecx=30; eax=6 ecx=36; ecx contient 6 eax = 36 idem boucle6 esi=126 ecx=36; eax=6 ecx=42; on saute pas edx=0 Donc pour un mot de passe à 6 lettres le serial est 126 Donc pour un mot de passe à 7 lettres le serial est 196 ,, 8 ,, 288 ,, 9 ,, 405 004010AD . 8935 B0764000 MOV DWORD PTR DS:[4076B0],ESI ; place esi à l'adresse 4076b0 004010B3 > 68 C0724000 PUSH defi_Fib.004072C0 ; place le serial entré dans eax 004010B8 . E8 6E000000 CALL defi_Fib.0040112B 004010BD . 8B0D B0764000 MOV ECX,DWORD PTR DS:[4076B0] ; place la réponse dans ecx 004010C3 . 83C4 04 ADD ESP,4 004010C6 . 3BC1 CMP EAX,ECX ; compare les 2 serial 004010C8 . 75 18 JNZ SHORT defi_Fib.004010E2 ; 004010CA . 68 24514000 PUSH defi_Fib.00405124 ; /Text = "BRAVO TU A TROUVE LE SERIAL" 004010CF . 68 ED030000 PUSH 3ED ; |ControlID = 3ED (1005.) 004010D4 . 57 PUSH EDI ; |hWnd 004010D5 . FF15 CC504000 CALL DWORD PTR DS:[<&USER32.SetDlgItemTe>; \SetDlgItemTextA 004010DB . 5F POP EDI Et voila un crack me cracké.