Nom : Gasp! Version : 2.12 Disponibilité : http://www.yaskifo.com (version 2.12) http://perso.wanadoo.fr/lucie.lepretre/gaspF.html (3.1) Protection : name+serial Tools : Softice 4.0 : Tasm 5 Gasp! est un gestionnaire complet de fiches .Ce qui m'a bien amusée dans ce soft ,c'est le ridicule de sa protection ...On voit une petite option qui permet d'entrer un nom+un serial . On va keygener cette dobe en 2 secondes,montre en main ... Step 1 : Serial Fishing Hop, on tape un nom et un serial bidon dans la box pour s'enregistrer. On ne valide poa : on fait surgir SI a l'aide de CTRL D . Bpx Hmemcpy pour catcher le serial . On relance le tout avec F5 et on valide . BLaM! SI se declenche . On est dans l'api Hmemcpy. On fait 12 fois F12 et on se retrouve ici : 0167:00404450 CALL 0043BE95 0167:00404455 LEA ECX,[EBP-0C]-- on atterrit ici 0167:00404458 XOR EDX,EDX 0167:0040445A MOV EAX,[ECX] 0167:0040445C PUSH EAX 0167:0040445D MOV [EBP-08],EDX 0167:00404460 INC DWORD PTR [EBP-14] 0167:00404463 LEA EDX,[EBP-08] 0167:00404466 MOV EAX,[EBX+000001F4] 0167:0040446C CALL 0043BE95--recopie le nom 0167:00404471 LEA ECX,[EBP-08] 0167:00404474 XOR EDX,EDX 0167:00404476 MOV EAX,[ECX] 0167:00404478 PUSH EAX 0167:00404479 MOV WORD PTR [EBP-20],0008 0167:0040447F MOV [EBP-04],EDX 0167:00404482 LEA EDX,[EBP-04] 0167:00404485 INC DWORD PTR [EBP-14] 0167:00404488 MOV EAX,[EBX+000001E4] 0167:0040448E CALL 0043BE95-- recopie le prenom 0167:00404493 LEA EDX,[EBP-04] 0167:00404496 MOV EAX,[004F2D70] 0167:0040449B POP ECX 0167:0040449C MOV EAX,[EAX+000002E8] 0167:004044A2 MOV EDX,[EDX] 0167:004044A4 CALL 004C75D8--- encodage name+serial 0167:004044A9 DEC DWORD PTR [EBP-14] 0167:004044AC LEA EAX,[EBP-0C] On se retrouve a l'addresse 404455 en faisant une backtrace avec F12. Le proggy va commencer par recopier le nom et le premom dans un coin de la memoire .Pas très interressant .Par contre a l'addresse 4044a4, on remarque un call different des autres : call 4c75d8 . Un petit coup de F8 pour voir ce qui se passe a l'interieur .Et ensuite,en tracant rapidement avec F10,on arrive a ceci: 0167:004C7603 LEA EAX,[EBP-04] 0167:004C7606 CALL 0045CE6F 0167:004C760B INC DWORD PTR [EBP-34] 0167:004C760E LEA EDX,[EBP-08] 0167:004C7611 MOV WORD PTR [EBP-40],0008 0167:004C7617 LEA EAX,[EBP-08] 0167:004C761A CALL 0045CE6F 0167:004C761F INC DWORD PTR [EBP-34] 0167:004C7622 LEA EDX,[EBP+08] 0167:004C7625 LEA EAX,[EBP+08] 0167:004C7628 CALL 0045CE6F 0167:004C762D INC DWORD PTR [EBP-34] 0167:004C7630 XOR EDX,EDX 0167:004C7632 MOV WORD PTR [EBP-40],0014 0167:004C7638 MOV [EBP-0C],EDX 0167:004C763B XOR ECX,ECX 0167:004C763D INC DWORD PTR [EBP-34] 0167:004C7640 XOR EAX,EAX 0167:004C7642 MOV WORD PTR [EBP-40],0008 0167:004C7648 MOV [EBP-60],ECX 0167:004C764B MOV [EBP-5C],ECX 0167:004C764E MOV WORD PTR [EBP-40],0020 0167:004C7654 MOV [EBP-10],EAX 0167:004C7657 LEA ECX,[EBP-10] 0167:004C765A INC DWORD PTR [EBP-34] 0167:004C765D MOV EDX,[EBP-04] 0167:004C7660 MOV EAX,[EBP-54] 0167:004C7663 CALL 004C751C--- encodage du serial 0167:004C7668 LEA EDX,[EBP-10]--- le bon serial 0167:004C766B LEA EAX,[EBP-0C] 0167:004C766E CALL 0045D0C7 0167:004C7673 DEC DWORD PTR [EBP-34] 0167:004C7676 LEA EAX,[EBP-10] 0167:004C7679 MOV EDX,00000002 0167:004C767E CALL 0045D098 0167:004C7683 LEA EDX,[EBP+08]-- le serial bidon 0167:004C7686 LEA EAX,[EBP-0C]-- le bon serial 0167:004C7689 CALL 0045D178--- on compare les deux 0167:004C768E TEST AL,AL-- c bon ? 0167:004C7690 JZ 004C7836--non..on saute :( Bon, on remarque plein de calls dans tous les sens...Pas de panique dit l'homme tranquille ...Il suffit de tracer un peu pour arriver en 4c765d. on remarque que ebp-04 contient notre nom .Et si on trace encore 2 secondes, on tombe sur le serial : c'est le contenu de EBP-10 a l'addresse 4c7668 qui stocke le bon serial.C'est le call 45d178 qui se charge de comparer les deux ...On en deduit que la generation du serial en fonction du nom ne doit poa etre loin.. Voyons voir ce qui se passe dans le call 4c751c . 0167:004C751F ADD ESP,-30 0167:004C7522 PUSH EBX 0167:004C7523 PUSH ESI 0167:004C7524 PUSH EDI 0167:004C7525 MOV [EBP-0C],ECX 0167:004C7528 MOV [EBP-04],EDX 0167:004C752B MOV EDI,EAX 0167:004C752D MOV EAX,004F1720 0167:004C7532 CALL 004A96E0 0167:004C7537 MOV DWORD PTR [EBP-14],00000001 0167:004C753E LEA EDX,[EBP-04] 0167:004C7541 LEA EAX,[EBP-04] 0167:004C7544 CALL 0045CE6F 0167:004C7549 INC DWORD PTR [EBP-14] 0167:004C754C XOR ESI,ESI 0167:004C754E MOV WORD PTR [EBP-20],0008 0167:004C7554 MOV EBX,00000001 0167:004C7559 JMP 004C756A 0167:004C755B MOV EAX,[EBP-04] 0167:004C755E MOVSX EDX,BYTE PTR [EBX+EAX-01]-- prend chak caractère du nom 0167:004C7563 IMUL EDX,[EDI+3C]-- petite multiplication 0167:004C7567 ADD ESI,EDX---et on additionne chak lettre entre elle 0167:004C7569 INC EBX 0167:004C756A LEA EAX,[EBP-04] 0167:004C756D CALL 0045D2F2 0167:004C7572 CMP EBX,EAX 0167:004C7574 JLE 004C755B--- et on boucle tant que tout le nom n'est poa traité hahaha ! C'est risible ...Le proggy prend chak caractère de notre nom et fait une multiplication avec edi+3c . Il additionne les lettres entre elle. Il faut juste savoir combien vaut edi+3c.Bah ca SI nous l'indique tout seul: 02125h . 'Y a vraiment des gens qui se foutent de la gueule du monde :) . Voici la procedure key : key proc, Nom :dWord, Taille :Dword ; on crée la procédure Key et on xor edx,edx xor ecx,ecx mov ebx,1-- on commence par la première lettre du nom mov edi,02125h-- met esi a 2125 pour la multiplication , lol :) mov ecx,Taille XOR ESI,ESI MOV EAX,Nom bcl: MOVSX EDX,BYTE PTR [EBX+EAX-01] -- prend chak caractère du nom IMUL EDX,edi-- que l'on multiplie par 2125h ADD ESI,EDX-- et qu'on finit par additionner entre eux INC ebx dec ecx JNZ bcl-- continue tant que tout le nom n'est poa traité mov eax,esi ret ; ------------ terminé , @+ key endp A noter qu'une version 3.1 de ce soft est sortit , chose que je n'avais poa vu...La version 2.12 (celle la koi) est tjrs disponible en DL a yaskifo.com et la 3.1 , voir debut du tut . TaMaMBoLo