Nom : Comptine plus Version : 2.8 Disponibilité : http://www.magellass.com Protections : trial periode,name+serial Tools : Softice 4.0 : TasM 5 Comptine plus est un petit soft qui permet de surveiller le cout du temps que vous passez sur le net :( Discret,comptine s'avère etre relativement bien programmé . Le soft est protégé par un name+serial qui permet de débrider le soft . On va se faire le keygen :) Step 1 On va à l'option qui permet de rentrer notre nom + le serial qui correspond à notre nom . On tape donc notre nom et un fake serial ,genre '123' . On ne valide poa tout de suite : avant,on fait surgir SI : CTRL D . Et on entre le BPX qui le fait bien quand on veut catcher un serial : BPX HMEMCPY . Et on relance le tout avec la touche F5 . Now, on valide notre nom et le serial bidon qu'on a entré . BoOM ! SI se declenche . On a stoppé au debut de l'API Hmemcpy. Pour se retrouver dans le code principal du proggy, on va faire une Backtrace avec la touche F12 : on presse 12Fois F12 et on atterrit ici : 0167:00453019 CALL 0042014C 0167:0045301E MOV EAX,[EBP-08] 0167:00453021 CALL 00403BB0 ----- on atterrit ici avec 12fois F12 0167:00453026 CALL 00406FB0 0167:0045302B CMP EAX,01 0167:0045302E JG 00453034 0167:00453030 MOV BYTE PTR [EBP-01],01 0167:00453034 LEA EDX,[EBP-08] 0167:00453037 MOV EAX,[EBX+000001EC] 0167:0045303D CALL 0042014C 0167:00453042 MOV EAX,[EBP-08] 0167:00453045 CALL 00403BB0 0167:0045304A CALL 00406FB0 0167:0045304F MOV EDI,EAX 0167:00453051 TEST EDI,EDI 0167:00453053 JLE 00453092 0167:00453055 MOV ESI,00000001 0167:0045305A LEA EDX,[EBP-08] 0167:0045305D MOV EAX,[EBX+000001EC] 0167:00453063 CALL 0042014C 0167:00453068 MOV EAX,[EBP-08] 0167:0045306B CMP BYTE PTR [ESI+EAX-01],30 0167:00453070 JB 0045308A 0167:00453072 LEA EDX,[EBP-0C] 0167:00453075 MOV EAX,[EBX+000001EC] 0167:0045307B CALL 0042014C 0167:00453080 MOV EAX,[EBP-0C] 0167:00453083 CMP BYTE PTR [ESI+EAX-01],39 0167:00453088 JBE 0045308E 0167:0045308A MOV BYTE PTR [EBP-01],01 0167:0045308E INC ESI 0167:0045308F DEC EDI 0167:00453090 JNZ 0045305A 0167:00453092 CMP BYTE PTR [EBP-01],01 0167:00453096 JNZ 004530A5 0167:00453098 XOR EDX,EDX 0167:0045309A MOV EAX,[EBX+000001EC] 0167:004530A0 CALL 0042017C 0167:004530A5 LEA EDX,[EBP-08] 0167:004530A8 MOV EAX,[EBX+000001EC] 0167:004530AE CALL 0042014C 0167:004530B3 CMP DWORD PTR [EBP-08],00 0167:004530B7 JZ 0045318B 0167:004530BD LEA EDX,[EBP-08] 0167:004530C0 MOV EAX,[EBX+000001EC] 0167:004530C6 CALL 0042014C 0167:004530CB MOV EAX,[EBP-08] 0167:004530CE PUSH EAX 0167:004530CF LEA EDX,[EBP-0C] 0167:004530D2 MOV EAX,[EBX+000001E8] 0167:004530D8 CALL 0042014C 0167:004530DD MOV EDX,[EBP-0C]-- notre nom dans ebp-0c 0167:004530E0 MOV EAX,EBX 0167:004530E2 POP ECX 0167:004530E3 CALL 00452F24 ----- Encodage du serial en fct du nom 0167:004530E8 CMP AL,01 0167:004530EA JNZ 0045317E 0167:004530F0 MOV EAX,[00464D8C] 0167:004530F5 MOV BYTE PTR [EAX],01 0167:004530F8 LEA EDX,[EBP-08] 0167:004530FB MOV EAX,[EBX+000001E8] 0167:00453101 CALL 0042014C 0167:00453106 MOV EDX,[EBP-08] 0167:00453109 MOV EAX,[00464EC4] 0167:0045310E CALL 004037C4 0167:00453113 LEA EDX,[EBP-08] 0167:00453116 MOV EAX,[EBX+000001EC] 0167:0045311C CALL 0042014C 0167:00453121 MOV EAX,[EBP-08] 0167:00453124 CALL 00406CD8 0167:00453129 MOV ECX,EAX En tracant avec F10,on arrive rapidement en 4530E8,CMP AL,01.Une comparaison suivie,d'un saut conditionnel et précéder d'un call, moi ca me plait :)) . Rentrons donc dans ce CALL 00452F24 en pressant tout simplement F8 quand on est en 4530E3. Voici ce ke l'on a: 0167:00452F24 PUSH EBP 0167:00452F25 MOV EBP,ESP 0167:00452F27 ADD ESP,-08 0167:00452F2A PUSH EBX 0167:00452F2B PUSH ESI 0167:00452F2C MOV [EBP-08],ECX 0167:00452F2F MOV [EBP-04],EDX 0167:00452F32 MOV EAX,[EBP-04] 0167:00452F35 CALL 00403BA0 0167:00452F3A MOV EAX,[EBP-08] 0167:00452F3D CALL 00403BA0 0167:00452F42 XOR EAX,EAX 0167:00452F44 PUSH EBP 0167:00452F45 PUSH 00452FDF 0167:00452F4A PUSH DWORD PTR FS:[EAX] 0167:00452F4D MOV FS:[EAX],ESP 0167:00452F50 XOR EBX,EBX 0167:00452F52 MOV EAX,[EBP-04] 0167:00452F55 CALL 00403BB0 0167:00452F5A CALL 00406FB0 0167:00452F5F MOV ESI,EAX 0167:00452F61 TEST ESI,ESI 0167:00452F63 JLE 00452FB2 0167:00452F65 MOV EAX,00000001 ---- debut de l'encodage :) 0167:00452F6A MOV EDX,[EBP-04] 0167:00452F6D MOV DL,[EAX+EDX-01] -- on prend chak caractère du nom 0167:00452F71 CMP DL,41 0167:00452F74 JB 00452F8C 0167:00452F76 MOV ECX,[EBP-04] 0167:00452F79 CMP DL,5A 0167:00452F7C JA 00452F8C 0167:00452F81 AND EDX,000000FF --- et ici on fait une petite opèration sur la valeur hexa du caractère 0167:00452F87 ADD EBX,EDX 0167:00452F89 SUB EBX,40 0167:00452F8C MOV EDX,[EBP-04] 0167:00452F8F MOV DL,[EAX+EDX-01] 0167:00452F93 CMP DL,61 0167:00452F96 JB 00452FAE 0167:00452F98 MOV ECX,[EBP-04] 0167:00452F9B CMP DL,7A 0167:00452F9E JA 00452FAE 0167:00452FA0 MOV ECX,[EBP-04] 0167:00452FA3 AND EDX,000000FF--- idem qu'en 452F81 0167:00452FA9 ADD EBX,EDX 0167:00452FAB SUB EBX,60 0167:00452FAE INC EAX 0167:00452FAF DEC ESI 0167:00452FB0 JNZ 00452F6A --- on continue tant ke tous les caractères du nom ne sont poa traités 0167:00452FB2 MOV EAX,[EBP-08]-- on récupère la faux serial kon a entré 0167:00452FB5 CALL 00406CD8 0167:00452FBA CMP EBX,EAX ------ et on le compare avec le bon.. 0167:00452FBC JNZ 00452FC2------ c bon ? non ! on saute ... 0167:00452FBE MOV BL,01--------- yes : BL=1 0167:00452FC0 JMP 00452FC4 0167:00452FC2 XOR EBX,EBX 0167:00452FC4 XOR EAX,EAX------- baD BoY :( 0167:00452FC6 POP EDX 0167:00452FC7 POP ECX 0167:00452FC8 POP ECX 0167:00452FC9 MOV FS:[EAX],EDX huhuhu ... C'est vraiment poa très dure a comprendre : le prog prend chaque caractère de notre nom et fait une petite opération dessus...Le resultat de l'encodage est contenu dans ebx.Une fois la génération du serial en fonction du nom terminée,le prog récupère le fake serial kon a entré (en 452FB2) et le compare au bon..Pour voir les serials,faites E eax (fake serial) et E ebx (le bon) . Bah..a recoder c vraiment enfantin :))) Je vous propose la solution suivante : key proc, nom :dWord, Taille :Dword ; on crée la procédure Key et on ; déclare deux variables Nom et Taille xor ebx,ebx mov esi,Taille MOV eax,1 boucle: MOV EDX,nom MOV DL,[EAX+EDX-01] CMP DL,041h JB @00452F8C MOV ECX,nom CMP DL,5Ah JA @00452F8C MOV ECX,nom AND EDX,000000FFh ADD EBX,EDX SUB EBX,40h @00452F8C: MOV EDX,nom MOV DL,[EAX+EDX-01] CMP DL,61h JB @00452FAE MOV ECX,nom CMP DL,7Ah JA @00452FAE MOV ECX,nom AND EDX,000000FFh ADD EBX,EDX SUB EBX,60h @00452FAE: INC EAX DEC ESI JNZ boucle mov eax,ebx ; on met le serial final dans eax ret key EndP bah oué :'me suis poa fait chier !j'ai rippé directement la routine du prog pour l'incorporer directement dans mon générateur :) Trivial :) TaMaMBoLo