Nom : PAssKEy Version : 1.2 Protection : name+serial Tools : Softice 4.0 TasM 5.5 Passkey est un petit tools qui permet de voir les passwords qui sont cachés derriere des ***** .Ceci dit cela peut s'averer très partike :)) La protection du soft est assez banale : un name+serial pour virer la periode d'essai et s'enregistrer . Nous on va keygener ca en 2 minutes chrono :) . Ce tut va etre l'occasion de vous montrer pourkoi c'est vraiment ideal l'assembleur pour keygener . Certains crackers, se font chier à réecrire l'algorythme en C...lol... Moi je vous propose de directement ripper la routine du soft et ainsi de l'inclure dans votre keygen ,sans vous faire chier,héhéhé ... Step 1 : SeRiAL Fishing Comme à chaque fois on commence par chercher le serial correspondant à notre nom.On va donc à l'option pour renter un name et un serial mais ON NE VALIDE PAS!On fait surgir SI: CTRL D.On entre le breakpoint ki va bien pour catcher les serials: BPX HMEMCPY sous SI.Et on relance avec F5 .Now, on peut valider notre nom et serial .BooM !SI se declenche.On est au debut de l'API HMEMCPY. Nous on veut se retrouver dans le code principale du proggy.On fait donc une backtrace avec la touche F12 . 12 fois sur F12 et on arrive ici : 0167:0044F704 MOV EAX,[EBP-0C]--- on a atterit ici avec F12 0167:0044F707 LEA EDX,[EBP-08] 0167:0044F70A CALL 0044E54C 0167:0044F70F MOV EAX,[EBP-08] 0167:0044F712 PUSH EAX 0167:0044F713 LEA EDX,[EBP-10] 0167:0044F716 MOV EAX,[EBP-04] 0167:0044F719 MOV EAX,[EAX+00000318] 0167:0044F71F CALL 00426C6C 0167:0044F724 MOV EDX,[EBP-10]--- le serial bidon dans EBP-10 0167:0044F727 POP EAX------------ le bon serial dans EAX 0167:0044F728 CALL 00403D9C------- le call qui compare le tout 0167:0044F72D JNZ 0044F7E3 On atterrit en 44f704 . On trace rapidement avec F10 et on arrive en 44F728 CALL 403D9C . Kan vous etes a cette addresse vous faites : E EDX pour voir le serial bidon qu'on a entré E EAX pour voir le bon serial ...:) Kewl, y'a plus ka keygener :)) . Le tout c'est de repérer la routine qui va générer le No en fonction du nom . Pour ca , il faut que l'on s'interresse aux calls qui précedent la comparaison du serial bidon et du bon . Commencons par le premier : 44F70A, CALL 44E54C .A cette addresse faites F8 pour entrer dans le CALL 44E54C.Et on trace avec F10.Rapidement, on arrive à ceci : 0167:0044E5BB MOV ECX,00000001 0167:0044E5C0 LEA EBX,[EBP-18]---- notre nom dans EBP-18 0167:0044E5C3 MOV ESI,00450B68 --- une première table en 450b68 0167:0044E5C8 MOV EAX,00450B74 --- une seconde en 450b74 0167:0044E5CD MOV [EBP-0C],EAX 0167:0044E5D0 XOR EAX,EAX 0167:0044E5D2 MOV AL,[ESI] 0167:0044E5D4 LEA EDX,[ECX+07] 0167:0044E5D7 IMUL EDX 0167:0044E5D9 MOV EDI,00000005 0167:0044E5DE CDQ 0167:0044E5DF IDIV EDI 0167:0044E5E1 XOR EDX,EDX 0167:0044E5E3 MOV DL,[EBX] 0167:0044E5E5 LEA EDI,[ECX+02] 0167:0044E5E8 IMUL EDX,EDI 0167:0044E5EB ADD EAX,EDX 0167:0044E5ED MOV EDI,0000000A 0167:0044E5F2 CDQ 0167:0044E5F3 IDIV EDI 0167:0044E5F5 ADD DL,30 0167:0044E5F8 MOV EAX,[EBP-0C] 0167:0044E5FB MOVZX EAX,BYTE PTR [EAX] 0167:0044E5FE MOV [EAX+EBP-26],DL 0167:0044E602 INC ECX 0167:0044E603 INC DWORD PTR [EBP-0C] 0167:0044E606 INC ESI 0167:0044E607 INC EBX 0167:0044E608 CMP ECX,0D 0167:0044E60B JNZ 0044E5D0 bon bon,c poa très dure à comprendre .Le proggy va prendre chaque caractère de notre nom et faire une operation avec des valeurs contenues dans une table.Mais le proggy ne va poa betement mettre les nombres obtenus les uns à la suite des autres : il se sert d'une deuxième table , que nous appelerons table de position. Et un peu plus loin, on tombe sur cela : 0167:0044E60D MOV BYTE PTR [EBP-26],0C 0167:0044E611 MOV EAX,[EBP-04] 0167:0044E614 CALL 00403C8C 0167:0044E619 ADD EAX,18 0167:0044E61C MOV ECX,0000000A 0167:0044E621 CDQ 0167:0044E622 IDIV ECX 0167:0044E624 ADD DL,30 0167:0044E627 MOV [EBP-20],DL 0167:0044E62A MOV EAX,[EBP-08] 0167:0044E62D LEA EDX,[EBP-26] 0167:0044E630 CALL 00403C30 Ho!le vilain programme!il fait encore une chtite modif sur le serial obtenu. C'est le MOV [EBP-20],DL en 40E624 qui va 'patcher' un seul numero du serial. dans le CALL 403c8c(en 44e614),on recupère la longueure du nom et on fait une petite operation dessus ... Bah c poa très dure à keygener ... En fait ca me saoule de detailler l'algo rythme : comme je l'ai dit plus haut, on va ripper la routine directement . Il faut juste ke l'on sache ce qu'il y a dans les 2 tables .Une fois en 44E5C0, faites E 44E5C0 pour voir la table des valeurs et E 44E5C0 pour la table des positions . Normalement, ca doit ressembler à un truc comme ca : La table des valeurs: 0030:00450B68 53 64 75 6A 54 76 62 47-46 48 79 75 03 06 01 08 la table des positions : 0030:00450B74 03 06 01 08 04 09 02 0C-0A 07 05 0B 48 EE 76 1D Step 2 : Ze KeyGen Dire k'il y a des gens qui se font chier à recoder les algos des keygens,alors qu'un simple copier/coller suffit... Je vous propose la procédure suivante : Table_valeur db 053h,064h,075h,06Ah,054h,076h,062h,047h,046h,048h,079h,075h db 03h,06h,01h,08h Table_position db 03h,06h,01h,08h,04h,09h,02h,0Ch,0Ah,07h,05h,0Bh,48h,0EEh db 076h,01Dh Key proc, Nom :dWord ; on crée la procédure Key uses ebx, esi,edi ;on sauvegarde edx ,esi et ebx MOV ECX,00000001 mov EBX,nom MOV ESI,offset table_valeur MOV EAX,offset table_position MOV [EBP-0Ch],EAX bcl: XOR EAX,EAX MOV AL,[ESI]--prend chak valeur de table_valeur LEA EDX,[ECX+07] IMUL EDX MOV EDI,00000005 CDQ IDIV EDI XOR EDX,EDX MOV DL,[EBX]--prend chak valeur du nom LEA EDI,[ECX+02] IMUL EDX,EDI ADD EAX,EDX MOV EDI,0000000Ah CDQ IDIV EDI ADD DL,30h MOV EAX,[EBP-0Ch] MOVZX EAX,BYTE PTR [EAX] MOV [EAX+EBP-26h],DL INC ECX INC DWORD PTR [EBP-0Ch] INC ESI INC EBX CMP ECX,0Dh JNZ bcl ;continue à traiter le nom si c poa finit MOV BYTE PTR [EBP-26h],0Ch MOV EAX,carry ADD EAX,18h MOV ECX,0000000Ah CDQ IDIV ECX ADD DL,30h MOV [EBP-20h],DL-- derniere operation sur le serial lea eax,[EBP-25h] ret ; ------------ terminé , @+ Key EndP TaMaMBoLo