Nom : Icon catcher Version : 3.0.1.324 Disponibilité : http://www.helexis.com Protection : Packed (neolite2),fonction désactivée Tools : Softice 4.0 Procdump 1.6 Editeur Hexa Brain/ganja etc... Icon catcher est petit soft de capture d'icon ,on s'en se serait douté avec un nom pareil ...Bon la protection du soft est assez simple : l'exe a été packé avec neolite 2 et la fonction de sauvegarde a été désactivée . Step 1 : manual unpacking Bon,la première chose à faire quand on a un exe packé , c'est de le dépacker . Sachant qu'on aurait aussi put utiliser un loader pour patcher directement le prog en mémoire .Mais un petit manual unpacking c toujours interressant :) . Donc on prend Symbol loader et on ouvre le prog .Merde, SI ne rend pas rend pas la main comme il a l'habitude .C'est rien : les attributs des sections ont du être chnagé . On prend Procdump 1.6 (ou une version anterieure fera aussi l'affaire) et on va dans 'PE Editor' . On selectionne notre programme : IC.exe . On va ensuite dans l'option 'SECTION' . Procdump va vous indiquer toutes les sections de votre exe . Nous , la section qui nous interresse, c'est la section 'CODE' . On fait un click-droit dessus avec notre souris et on choisit l'option 'Edit Section'. Procdump vous indique comme 'Section Charactristics : C0000080' . Remplacez donc le C0000080 par E0000020 . On reprend Symbol Loader et on rouvre le proggy . Ce coup-ci SI nous rend la main. On va pouvoir tracer la routine de décompression . Dès que vous êtes au début du proggy avec SI, vous tracez avec la touche F10 . Et très rapidement, vous arrivez à ceci : 015F:004C8341 MOV EAX,[ESP+04] 015F:004C8345 AND EAX,[004C82A7] 015F:004C834B CALL 004C86C1------------ le call qui décompile le proggy 015F:004C8350 INC BYTE PTR [004C8340] 015F:004C8356 JMP EAX ---------------- et on saute vers le prog depacké Le CALL 004C86C1 va décompresser le prog . Comment je le sais ?Bah... C'est le seul call du proggy,lol .Donc a part ça, je vois pas ce qui peut decompresser le prog... Ensuite en 4C8356 il y a un jmp plutot zarb :JMP EAX . Exécutez le. Et paf, vous vous retrouvez au début de l'initialisation du prog décompressé . Regardez les API elles sont assez parlantes .Bon , on va dumper ca vite fait bien fait . Step 2 : dumping On reprend Symbol loader et on ouvre le proggy . On retrace avec la touche F10 mais on n'execute pas le JMP EAX de l'addresse 4C8356 .Notez la valeur de EAX : 493A28, c'est le point d'entrée de votre proggy décompressé. *Maintenant, vous tapez sous SI : A 4C8356 .Etvous êtes dans l'editeur ASM de SI ,à l'addresse 4C8356 .On tape now : JMP EIP ,entrée, et escape pour sortir de l'éditeur ASM. Normalement le JMP EAX a du laisser sa place à un JMP EIP . Le EIP correspond à l'addresse courante . C'est à dire que le prog va faire une boucle infinie à l'addresse 4C8356 , juste avant de s'executer dans sa version décompressée ... On relance le tout avec la touche F5 .Notre prog ne s'execute pas puisqu'il fait une boucle infinie, mais il est toujours en mémoire , ce qui nous permettre de le dumper . On prend Procdump et on regarde l'écran principal .On repère facilement notre exe: IC.exe . Avant de dumper on change un petit truc dans procdump . Dans 'Option',on coche l'option 'Rebuild New Import Table' et on laisse le reste tel quel . Maintenant on revient à l'écran principal de procdump et on fait fait un click-droit avec la souris sur notre exe .On choisit l'option 'Dump (Full)' . On entre un nom pour notre sauvegarde : Dump.exe pour moi.On en profite pour tuer la task de notre exe qui boucle : click-droit sur l'exe et 'Kill Task' . Now on a exe qui est dépacké mais qui n'a pas le bon point d'entrée .Bah,vi, maintenant qu'il est dépacké , on a plus besoin d'executer la routine de décompression .Mais si vous souvenez bien , on avait noté le point d'entrée du prog décompressé : c'était la valeur de EAX, soit 493A28.y' a plus qu'a remettre ce point d'entrée dans notre dump .. On reprend procdump et on va dans 'PE Editor'.On choisit notre dump : Dump.exe.Procdump vous indique comme 'Image Base : 00400000' . Et bien pour changer un point d'entrée il suffit de le soustraire à l'image base , soit : 493A28-400000=93A28 . Dans la case 'Entry Point' de procdump on met 93A28 . Lancez votre exe et vous verrez qu'il est bien valide ..Reste à le cracker now :) Step 3 : cracking La seul limitation de ce shareware c'est la fonction de sauvegarde qui a été virée . Pour virer cette limitation, j'ai attaqué le soft par le bouton 'NO' du nag .J'ai en fait poser un breakpoint sur le bouton de façon a ce que SI se déclenche dès que je click sur 'NO' .Après 'y a plus qu'a faire une Backtrace avec la touche F12. Bon , on essaye de sauvegarder les icons qu'on a scanné .Le proggy nous balance le fameux nag (qui nous demande si on veut ou pas s'enregistrer) . On ne click sur rien mais on fait surgir SI : CTRL D .On demande à SI de nous afficher tous les proggys qui tournent en ce moment : TASK sous SI .On repère facilement notre exe dumpé (dump.exe) . Now on fait HWND DUMP pour voir tous les événements du proggy. Chez moi j'obtiens ça : :hwnd dump Window Handle hQueue SZ QOwner Class Name Window Procedure 05BC(1) 2BBF 32 DUMP TMessageForm 1427:00000A88 05C8(2) 2BBF 32 DUMP Button 1427:00000E7C 05C4(2) 2BBF 32 DUMP Button 1427:00000E66---ici 05C0(2) 2BBF 32 DUMP Button 1427:00000B38 0534(1) 2BBF 32 DUMP TAboutBox 1427:00000A88 052C(1) 2BBF 32 DUMP TMainForm 1427:00000A9E 0594(2) 2BBF 32 DUMP TPanel 1427:00000D06 059C(3) 2BBF 32 DUMP TIconView 1427:00000D32 0598(3) 2BBF 32 DUMP TToolBar 1427:00000D1C 0590(2) 2BBF 32 DUMP TToolBar 1427:00000CF0 0530(2) 2BBF 32 DUMP TStatusBar 1427:00000A72 0574(1) 2BBF 32 DUMP TSaveToForm 1427:00000A88 0584(2) 2BBF 32 DUMP TRadioGroup 1427:00000CAE 058C(3) 2BBF 32 DUMP Button 1427:00000CDA 0588(3) 2BBF 32 DUMP Button 1427:00000CC4 0578(2) 2BBF 32 DUMP TRadioGroup 1427:00000C6C 0580(3) 2BBF 32 DUMP Button 1427:00000C98 057C(3) 2BBF 32 DUMP Button 1427:00000C82 0570(1) 2BBF 32 DUMP TfmProp 1427:00000A88 0538(1) 2BBF 32 DUMP TConfigForm 1427:00000A88 053C(2) 2BBF 32 DUMP TPageControl 1427:00000AE0 0540(3) 2BBF 32 DUMP TTabSheet 1427:00000AF6 0564(4) 2BBF 32 DUMP TGroupBox 1427:00000BFE 0568(5) 2BBF 32 DUMP ComboBox 1427:00000C2A 0558(4) 2BBF 32 DUMP TRadioGroup 1427:00000B7A 0560(5) 2BBF 32 DUMP Button 1427:00000BD2 055C(5) 2BBF 32 DUMP Button 1427:00000BBC 0544(4) 2BBF 32 DUMP TGroupBox 1427:00000B0C Bon j'ai pas tout mis et chez vous ,les addresses du Window Handle seront forcément différentes . Nous ce qui nous interresse , c'est une 'Class Name' ayant comme nom 'Button' puisque l'on veut poser un breakpoint sur le bouton 'No' . Alors des 'Class Name' portant le nom de button, il y en a plein . Moi j'ai pris le 'Button' avec le Window Handle No 5C4 . Mais si chez vous ça ne marche pas essayer un autre No de WH juste qu'a ce que SI se déclenche . Donc on pose notre Breakpoint : BMSG 5c4 0202 . Et on relance avec F5 . BoOM ! SI de déclenche .On est dans ce putain de Kernell32. Pour en sortir , on va remonter à l'aide de F12 . On appuie 76 Fois , vivi 76, sur F12 et on arrive à ceci : 015F:0048053E ADD ESP,-60 015F:00480541 MOV ESI,EAX 015F:00480543 MOV EDX,ESP 015F:00480545 MOV EAX,ESI 015F:00480547 MOV ECX,[EAX] 015F:00480549 CALL [ECX+30]--- Registered ? 015F:0048054C MOV EBX,EAX 015F:0048054E TEST BL,BL------ on test le registre BL 015F:00480550 JNZ 00480561--- BL=0 ? oui , on ne saute pas 015F:00480552 CMP WORD PTR [ESI+3A],00 015F:00480557 JZ 00480561 015F:00480559 MOV EDX,ESI 015F:0048055B MOV EAX,[ESI+3C] 015F:0048055E CALL [ESI+38]---- le call qui affiche le nag . 015F:00480561 MOV EAX,EBX -- on a atterrit ici avec SI 015F:00480563 ADD ESP,60 015F:00480566 POP ESI 015F:00480567 POP EBX 015F:00480568 RET C'est poa très dur à piger : en pressant 76 fois F12 (!) on est arrivé en 480561. Juste avant il y a un CALL [ESI+38], c'est lui qui affiche le nag . Et en remontant un peu dans le code , on voit un truc interressant .A l'addresse 480549, il y a un joli CALL [ECX+30] qui va determiner si on est enregistré ou pas . Le resultat de ce CALL [ECX+30] est sotcké dans le registre BL . Le TEST BL,BL de l'addresse 48054E va tester justement si BL=0 .Et si BL=0, le JZ 480561 n'est pas effectué et le prog nous balance le nag . A noter qu'il y a une deuxième verif en 480552 par le CPM, mais on s'en tape . Pour que le saut conditionnel de l'addresse 480550 soit effectué , il faut que BL=1 .Il y a plusieurs solutions pour mettre BL à 1 .La première aurait été de rentrer dans le CALL [ECX+30] et de mettre un MOV BL,1 juste avant la sortie du CALL . Il y a plus simple . Juste derrière le CALL [ECX+30] ,à l'addresse 48054C,il y a un MOV EBX,EAX . MOV BL,1=B3h,01h=2 octets et MOV EBX,EAX=8Bh,D8h=2octets aussi , pile poile ! Il n'y a meme poa besoin d'équilibrer le code, c'est exactement le meme nombre d'octets!Effacez tous les Breakpoints : BC * sous SI . On met un breakpoint à l'addresse 48054C : pour cela mettez votre curseur sur cette addresse et double-cliquez (ca evite de taper BPX 48054C) .Relancez le tout avec la touche F5 et recommencez la sauvegarde .Cette fois SI se bloque mais avant le nag ...On va remplacer le MOV EBX,EAX par notre MOV BL,1 . On tape A 48054C pour se retrouver dans l'éditeur aSm de SI , en 48054C .On entre notre instruction : MOV BL,1 , entrée pour valider et escape pour quitter l'éditeur ASM de SI . Et on relance le tout avec la touche F5 .BinGO! Cette fois le menu qui nous permet d'entrer un nom pour notre sauvegarde d'icon, s'ouvre ... Pour ce crack, prendre son editeur hexa et se rendre à l'offset : 7FB4C et mettre B3,01 TaMaMBoLo