Nom : Flash 32 Version : 2.24 french Disponibilité :http://pro.wanadoo.fr/chass Protections : nag/time limit/printscreen Tools : Softice 4.0 Editeur Hexa Brain/ganja/clopes/feuilles Flash 32 est un soft qui permet de faire des captures d'écrans . C'est pas trop mal foutu mais l'interêt reste encore à déterminer (la touche 'impr écran sys' fait la même chose ...) . Mais bon c'est français au moins (c'est peut être pour ça que l'interêt reste à déterminer ,huhuhu!) . Les protections sont standarts : un nag au démarrage,un nag quand on quitte le soft, 'Evaluation version' qui s'affiche dès que l'on sauvegarde un écran (lol!), une période d'essai qui bloque le soft quand elle est finie . Step 1 On va commencer par enlever le nag quand on quitte le proggy . Donc on ferme le proggy ,un zoli nag vous rappelle que le soft est un shareware . Il y a plusieurs boutons , un pour voir le formulaire d'enregistement,un pour annuler,et un pour ok. On va mettre un BPX sur l'un de ces boutons et faire une backtrace avec la touche F12 de softice . Déjà il faut afficher tous les évènements du proggy . On tape 'TASK' sous SI pour avant tout repérer le prog . Chez moa j'obtiens ça : TaskName SS:SP StackTop StackBot StackLow TaskDB hQueue Events Notepad 0000:0000 0063D000 00640000 2846 4107 0000 Notepad 0000:0000 0063D000 00640000 33FE 3437 0000 Mswheel 0000:0000 0054E000 00550000 3966 3577 0000 Flash32 0000:0000 00B4D000 00B50000 36D6 35CF 0000---ici Point32 0000:0000 0064B000 00650000 3746 36DF 0000 Systray 0000:0000 0063D000 00640000 2A96 396F 0000 Taskmon 0000:0000 0063E000 00640000 2B06 0E8F 0000 Tapisrv 0000:0000 0064D000 00650000 2F0E 30F7 0000 Explorer 0000:0000 0059A000 005A0000 2E5E 2E47 0000 Rnaapp 0000:0000 0063D000 00640000 2EF6 2EAF 0000 Serv-u32 0000:0000 0067C000 00680000 2466 2257 0000 Mstask 0000:0000 0056E000 00570000 2656 2447 0000 Mprexe 0000:0000 0072E000 00730000 1B0E 28A7 0000 On repère facilement le proggy . Maintenant on tape HWND Flash32 . On voit alors ceci : Window Handle hQueue SZ QOwner Class Name Window Procedure 02B0(1) 2B67 32 FLASH32 #32770 (Dialog) 1767:000050B1 02B4(2) 2B67 32 FLASH32 Button 1767:00001040--celui là 02B8(2) 2B67 32 FLASH32 Static 1767:00005C20 02BC(2) 2B67 32 FLASH32 Button 1767:00001040 02C0(2) 2B67 32 FLASH32 Button 1767:00001040 02C4(2) 2B67 32 FLASH32 Static 1767:00005C20 02C8(2) 2B67 32 FLASH32 Static 1767:00005C20 02CC(2) 2B67 32 FLASH32 Static 1767:00005C20 0294(1) 2B67 32 FLASH32 #32770 (Dialog) 1767:000050B1 0298(2) 2B67 32 FLASH32 Button 1767:00001040 029C(2) 2B67 32 FLASH32 Button 1767:00001040 Bon , comme d'hab, des Class Name s'appelant button , il y en a pleins .Moa, j'ai pris la première class et ça marche très bien ... Si ça ne marche poa du premier coup, essayez une autre Class . Donc on place notre breakpoint : BMSG 2B4 0202 . 2B4 est le window handle de notre button, 0202 correspond au breakpoint WM_LbuttonUp (c + rapide à saisir au clavier 0202) . Et on relance le tout avec F5 . On clique sur 'ok' .BOom ! SI se déclenche ... On peut commencer la baktrace avec F12 . En appuyant 7 Fois sur F12 on arrive à ceci : 015F:0040EF79 POP EBX 015F:0040EF7A ADD ESP,00000500 015F:0040EF80 RET 0010 015F:0040EF83 MOV EAX,[004897A4] 015F:0040EF88 PUSH EBX 015F:0040EF89 PUSH 004327B0 015F:0040EF8E PUSH ESI 015F:0040EF8F PUSH 00000099 015F:0040EF94 PUSH EAX 015F:0040EF95 CALL [USER32!DialogBoxParamA]--- affiche le nag 015F:0040EF9B TEST EAX,EAX----- En pressant 7 fois F12,on atterrit ici... 015F:0040EF9D JZ 0040FC10 015F:0040EFA3 PUSH ESI 015F:0040EFA4 CALL 0043C650 015F:0040EFA9 MOV EAX,[00479430] 015F:0040EFAE ADD ESP,04 015F:0040EFB1 CMP EAX,EBX 015F:0040EFB3 JZ 0040EFC8 015F:0040EFB5 PUSH ESI Bon, en pressant 7fois F12 on attérrit en 40EF9B . A l'addresse 40EF95, un joli DialogBoxParamA nous affiche le nag . Pour s'en débarrasser, c'est très simple : on va remplacer l'api DialogBoxParamA pour un beau ExitProcess . Boa comme ça, au lieu d'afficher le nag via DialogBoxParamA, et ben le prog fermera le proggy ... Prenez symbol loader et ouvrez Flash32 . Mettez un breakpoint à l'addresse 40EF95 et relancez le tout avec F5 .Quittez le proggy,SI se déclenche . Pour remplacez le DialogBoxParamA on utilise l'éditeur Asm de SI . On tape donc A 40EF95 .Et on tape : Call ExitProcess . On quitte l'éditeur Asm de SI : escape .On relance le tout avec F5 . Bingo! le nag ne s'affiche plus... Step 2 Une des autres protections du soft est 'Evaluation Version' qui s'affiche sur votre capture d'écran (vachement pratik...) dès que vous sauvegardez ... Bon et ben c'est poa très dur à cracker ... Si vous avez bien remarquez , 'Evaluation Version' ne s'affiche qu'une fois que vous avez tapé le nom de votre sauvegarde et cliqué sur 'ok' . Et bien comme pour le STEP 1, on va mettre un breakpoint sur ce boutton et faire une backtrace avec F12 pour voir ce qui se passe après . Donc on donne un nom à notre sauvegarde mais on ne valide poa . On fait surgir SI avec CTRL D . Et comme dans le Step 1, HWND Flash32 pour voir toutes les Class du proggy à ce moment là. Et on place notre Breakpoint : BMSG 340 0202 . Moi c'est 340, mais pour vous se sera probablement autre chose . Et on relance avec F5 . On valide la sauvegarde en cliquant sur 'ok' . BOom ! SI se déclenche again ... On commence la backtrace avec F12 . En appuyant 16 Fois sur F12 on arrive à ceci : 015F:004268B7 CALL comdlg32!GetSaveFileNameA--- ouvre la boite de sauvegarde 015F:004268BC TEST EAX,EAX----------------- on arrive là avec SI 015F:004268BE JZ 0042FF2F 015F:004268C4 MOV EDI,[USER32!UpdateWindow] 015F:004268CA PUSH EBP 015F:004268CB CALL EDI 015F:004268CD PUSH 00007F02 015F:004268D2 PUSH 00 015F:004268D4 CALL [USER32!LoadCursorA] 015F:004268DA PUSH EAX 015F:004268DB CALL [USER32!SetCursor] 015F:004268E1 MOV ECX,[ESP+20] 015F:004268E5 MOV EDX,[ESP+1C] 015F:004268E9 MOV [ESP+48],EAX 015F:004268ED MOV EAX,[005CE418] 015F:004268F2 PUSH ECX 015F:004268F3 PUSH EDX 015F:004268F4 PUSH EAX 015F:004268F5 PUSH EBP 015F:004268F6 CALL 0043E08A 015F:004268FB ADD ESP,10 015F:004268FE LEA ECX,[ESP+18] 015F:00426902 MOV [00462E98],EAX 015F:00426907 PUSH ECX 015F:00426908 PUSH 18 015F:0042690A PUSH EAX 015F:0042690B CALL EBX 015F:0042690D MOV EAX,[ESP+1C] 015F:00426911 CDQ 015F:00426912 SUB EAX,EDX 015F:00426914 MOV ECX,EAX 015F:00426916 MOV EAX,[00462840] 015F:0042691B SAR ECX,1 015F:0042691D SUB ECX,EAX 015F:0042691F JNS 00426923 015F:00426921 XOR ECX,ECX 015F:00426923 MOV EAX,[ESP+20] 015F:00426927 PUSH 15 015F:00426929 CDQ 015F:0042692A SUB EAX,EDX 015F:0042692C MOV EDX,[005CE418] 015F:00426932 SAR EAX,1 015F:00426934 CMP EAX,EDX 015F:00426936 JGE 00426943 015F:00426938 LEA EAX,[ESP+0000036C] 015F:0042693F PUSH EAX 015F:00426940 PUSH EDX 015F:00426941 JMP 0042694C 015F:00426943 LEA EDX,[ESP+0000036C]--- 015F:0042694A PUSH EDX | 015F:0042694B PUSH EAX |la routine qui affiche 015F:0042694C PUSH ECX | 015F:0042694D PUSH EBP |'Evaluation version' ... 015F:0042694E CALL [USER32!GetDC] | 015F:00426954 PUSH EAX | 015F:00426955 CALL [GDI32!TextOutA]----- 015F:0042695B MOV EDX,[005CE418] 015F:00426961 MOV EAX,[ESP+20] 015F:00426965 MOV ECX,[ESP+1C] Bon en pressant 16fois on atterrit en 4268BC .Juste au dessus , pour ceux qui codent un peu, on repère l'api qui ouvre la boîte de dialog pour enregistrer un fichier : GetSaveFileNameA . En traçant un peu avec la touche F10 on arrive à la routine qui affiche 'Evaluation version' . La routine commence en 426943 et se termine en 42695B . Pour être exact , c'est l'API TextOutA qui nous affiche le truc à la con . Mon premier réflexe a été de faire sauter le proggy au dessus de cette routine. En 426943 j'ai donc mis un JMP 42695B . Boa vi, de cette façon le proggy saute bien au dessus de routine qui affiche le nag, et on retombe juste derrière TextOutA ... Sauf que là, ça marche poa (alors que ça marchait avec la version 2.23 ...) . Le proggy plante lamentablement ... Bon, le programmeur a du prévoir des flags pour vérifier que son putain d' 'Evaluation version' s'est bien affiché . C'est pas grave, plutot que de faire sauter la routine d'affichage du nag au proggy, on va à moitié planter cette même routine .héhéhé. C'est simple : juste avant le CALL [GDI32!TextOutA] , il y a un PUSH EAX (addresse 426954) . Et bien remplacez donc ce PUSH EAX par un PUSH EBP ... Mort de rire ! Le nag y s'affiche plus et le proggy est stable (poa de plantage...) . Et on a changé qu'un seul octet !lol ! Step 3 La dernière protection du soft est un nag qui s'affiche à chaque démarrage et une période d'essai qui bloque le soft quand elle est finie .Avancez votre horloge windaube d'un an (histoire d'être sur) . Lancez le soft . Bon y se bloque bien ... On prend symbol loader et on ouvre le proggy . On commence à tracer le soft avec la touche F10 . Rapidement on arrive à ceci : 015F:0043F3B4 MOV [EBP-64],EAX 015F:0043F3B7 TEST BYTE PTR [EBP-30],01 015F:0043F3BB JZ 0043F3C3 015F:0043F3BD MOVZX EAX,WORD PTR [EBP-2C] 015F:0043F3C1 JMP 0043F3C6 015F:0043F3C3 PUSH 0A 015F:0043F3C5 POP EAX 015F:0043F3C6 PUSH EAX 015F:0043F3C7 PUSH DWORD PTR [EBP-64] 015F:0043F3CA PUSH ESI 015F:0043F3CB PUSH ESI 015F:0043F3CC CALL [KERNEL32!GetModuleHandleA] 015F:0043F3D2 PUSH EAX 015F:0043F3D3 CALL 00410040 ----- ce call ouvre le proggy 015F:0043F3D8 MOV [EBP-60],EAX A l'addresse 43f3d3, il y a un call 410040 . C'est lui qui ouvre le proggy mais en aucun cas celui qui affiche le nag : il faut rentrer dans ce call avec la touche F8 afin de voir ce qui s'y passe . On efface tous les breakpoints : BC * sous SI . On rouvre notre proggy avec symbol loader et on place notre breakpoint : BPX 43f3d3 . On relance avec F5 et SI se bloque bien en 43f3d3 . On fait F8 pour rentrer dans le call . On a alors ceci sous les yeux : 015F:0041003E NOP 015F:0041003F NOP 015F:00410040 PUSH EBX 015F:00410041 PUSH ESI 015F:00410042 PUSH 004564FC 015F:00410047 PUSH 00 015F:00410049 PUSH 00 015F:0041004B CALL [KERNEL32!CreateMutexA] 015F:00410051 CALL [KERNEL32!GetLastError] 015F:00410057 TEST EAX,EAX 015F:00410059 JNZ 00410226 015F:0041005F MOV ESI,[ESP+0C] 015F:00410063 MOV EBX,[USER32!DialogBoxParamA] 015F:00410069 PUSH EDI 015F:0041006A PUSH EAX 015F:0041006B PUSH 00432A80 015F:00410070 PUSH EAX 015F:00410071 PUSH 00000125 015F:00410076 PUSH ESI 015F:00410077 CALL EBX------ Le call qui affiche le nag de démarrage 015F:00410079 XOR EAX,EAX Bon , en traçant avec F10, on voit que c'est le call EBX de l'addresse 410077 qui nous balance le nag de démarrage . Pour le virer, c'est simple, on le remplace par deux nops . On continue la trace avec F10 pour voir où le proggy détermine si la période d'essaie est terminée . Rapidement on arrive à ceci : 015F:0041017A PUSH 00479060 015F:0041017F MOV [004897A4],ESI 015F:00410185 MOV DWORD PTR [004897AC],00000000 015F:0041018F MOV DWORD PTR [00479040],00000020 015F:00410199 MOV DWORD PTR [00479DB0],00000100 015F:004101A3 MOV DWORD PTR [00479B10],FFFFFFFF 015F:004101AD MOV [00479E7C],EDX 015F:004101B3 MOV [0047A0B0],EAX 015F:004101B8 CALL 00434A50 015F:004101BD ADD ESP,38 015F:004101C0 DEC EAX 015F:004101C1 POP EDI 015F:004101C2 JZ 00410212 015F:004101C4 DEC EAX 015F:004101C5 JZ 004101DF---- saute si période d'essai finie 015F:004101C7 PUSH 00 015F:004101C9 PUSH 0040D1D0 --- sinon.. 015F:004101CE PUSH 00 015F:004101D0 PUSH 0000009C 015F:004101D5 PUSH ESI 015F:004101D6 CALL EBX -------- on ouvre le proggy ... 015F:004101D8 POP ESI 015F:004101D9 XOR EAX,EAX 015F:004101DB POP EBX 015F:004101DC RET 0010 Et ben voilà, c'est le saut conditionnel de l'addresse 4101c5 qui nous envoie vers le nag nous disant que la période d'essai est terminée... Remplacez donc ce saut par deux nops et plus de time limit ... Pour ce crack, prendre un éditeur hexa et se rendre aux offsets suivants: Virer le nag de fin : offset EF95 et mettre e8,30,e5,b7,bf Virer 'Evaluation version' : offset 26954 et mettre 55 Virer le nag de démarrage : offset 10077 et mettre 90,90 Virer la période d'essai : offset 101c5 et mettre 90,90 TaMaMBoLo/CC/SML/SNT