Nom : PowerStrip Version : 2.51.02 Disponibilité : CD Pro No 49 du magazine PC-Team ou sur le web,mais ça ne sera probablement pas la version 2.51.02 http://www.entechtaiwan.com/ps.htm Cible : Pstrip.exe (468Ko) Protections : Compressé avec ASPACK 10.08.03 Nagscreen Outils : Procdump 1.5 (Http://Procdump32.cjb.net) Softice 4.0 (Http://Crackfr.cjb.net) Editeur Hexa Brain si disponible... PowerStrip est un petit shareware qui propose des réglages avancés de votre affichage zindoze. Soit dit en passant,il est pas mal ce soft pour une fois...La version que nous allons cracker est celle trouvée dans le CD de PC-Team No 49 .Si vous allez chercher une version plus récente sur le Web, il y a de forte chance pour que ce soit une version plus récente que celle qu'on va cracker. Mais la démarche utilisée pour cracker ce soft est exactement la même depuis pas mal de version ... La protection principale du soft vient du format de son exécutable qui a été compressé avec Aspack (10.08.03) .Ce truc là, ça compresse l'exe de 50 à 70%... Et bien entendu, un exe qui a été compressé (avec aspack ou autre) n'est pas possible a pacher : il faut déjà décompresser l'exe. C'est que nous allons voir dans ce tutor. Autant vous le dire tout de suite, Procdump 1.5 est tout à fait capable de décompresser lui même les exes compressés avec Aspack. Mais je trouve toujours plus interressant de le décompresser manuellement. Step 1 On commence déjà par copier 'Pstrip.exe' ,qui se trouve dans le répertoire Windows,à la racine de notre dur principal : ça évitera d'une part de faire une connerie sur l'exe original et d'autre part ,ça nous évitera de rentrer dans un répertoire si on a truc à faire sur l'exe. On prend symbol loader (livré avec softice) et on ouvre pstrip.exe . Normalement softice aurait du vous donner la main : sauf que là ,il lance le prog directement... C'est pas grave, on prend Procdump 1.5 et on click sur 'PE Editor' .On ouvre notre exe, et on click sur 'Sections' . Procdump vous indique maintenant toutes les sections de votre proggy . Faites un click droit sur la section 'CODE' et choisissez l'option 'Edit section' .Dans la case 'Section characteristics' ,Procdump vous indique : C0000040 . Remplacez donc cette valeur par E0000020 .Pour enregistrer votre modif, il suffit de quitter 'PE Editor' . Reprenez Symbol loader et ouvrez PowerStrip : ce coup-ci Softice prend bien la main. Step 2 Maintenant que notre debugger favoris nous a donné la main, on peut tracer la routine de décompression d'Aspack.En appuyant sur la touche F10 ,on arrive rapidement à une première boucle : 015f:005b72f2 or ecx,ecx 015f:005b72f4 jz 005b7312 015f:005b72f6 js 005b7312 015f:005b72f8 lodsb 015f:005b72f9 cmp al,e8 015f:005b72fb jz 005b7305 015f:005b72fd cmp al,e9 015f:005b72ff jz 005b7305 015f:005b7301 inc ebx 015f:005b7302 dec ecx 015f:005b7303 jmp 005b72f2 La boucle commence en 5b72f2 et se termine en 5b7303 (jmp 5b72f2). Si vous tracez cette mini boucle avec la touche F10 vous vous appercevrez vite qu'elle est bien longue .Pour pas s'emmerder,on va mettre un Breakpoint à l'addresse 5b7312 .Sous softice ,tapez BPX 5b7312 .Pourquoi mettre un breakpoint à cette addresse et pas à une autre ? Tout simplement parce que cette addresse correspond au premier saut conditionnel de la boucle (en 5b72f4, jz 5b7312) .Le deuxième saut conditionnel n'est pas interressant : il se termine par un jmp 5b72f2,donc par un retour au début de notre boucle.On en déduit aisément que la boucle prend fin en 5b7312 .On relance le tout avec la touche F5,et softice se bloque bien en 5b7312. En continuant le traçage du proggy avec la touche F10 , on arrive rapidement à ceci : 015f:005b734a cmp dword ptr [esi],00 015f:005b734d jz 005b7299 015f:005b7353 mov ebx,[ebp+00444adf] Quand vous arrivez à l'addresse 5b734a, une comparaison est faites,suivie d'un saut conditionnel. Comme précédemment vous allez être pris dans une boucle .Comme le traçage de cette dernière avec la touche F10 est très long,mettez donc un breakpoint après le saut conditionnel : sous softice, tapez BPX 5b7353 .Et relancez le tout avec F5 et de nouveau softice se bloque en 5b7353. On continue la trace avec F10 et en insistant bien on arrive à ceci (ATTENTION ! La trace est assez longue pour arriver là !) : 015f:005b7520 add dword ptr [ebp+00445172],04 015f:005b7527 jmp 005b7493 ------------- et on remonte ... 015f:005b752c xor eax,eax 015f:005b752e mov [esi],eax 015f:005b7530 mov [esi+0c],eax 015f:005b7533 mov [esi+10],eax 015f:005b7536 add esi,14 015f:005b7539 mov edx,[ebp+004450ac] 015f:005b753f jmp 5b73fc 015f:005b7544 mov eax,[ebp+00444aef] 015f:005b754a push eax 015f:005b754b add eax,[ebp+004450ac] 015f:005b7551 pop ebx 015f:005b7552 or ebx,ebx 015f:005b7554 mov [esp+1c],eax 015f:005b7558 popad 015f:005b7559 jnz 005b7563 015f:005b755b mov eax,00000001--------- tiens... 015f:005b7560 ret 000c 015f:005b7563 push eax----------------- point d'entré... 015f:005b7564 ret Si vous tracez correctement le proggy , vous arrivez à l'addresse 015f:005b7527 jmp 005b7493 . Si vous exécuter ce jump , vous allez de nouveau être pris dans une boucle (pour changer...). Moi, la première fois que j'ai tracer un proggy compressé avec aspack 10.08.03, il y a un truc qui m'a mis la puce à l'oreille : en 5b755b il y a un registre (eax) que le prog met a 1. Généralement ,les progammeurs se servent (c pas toujours vrai) de ce registre pour mettre des 'flags' (drapeaux) pour signaler que telle ou telle routine est terminée . De plus cette mise à 1 du registre eax est suivit d'un push eax (5b7563) et d'un ret ... Mettez donc un breakpoint à l'addresse 5b7563 : sous softice,tapez BPX 5b7563 .Relancez le tout avec F5. Comme prevu, Softice se bloque en 5b7563 . Sous softice faites ? EAX .Normalement softice doit vous indiquer 4D1F5C .C'est le point d'entrée de notre programme une fois que celui-ci est décompressé.Notez le dans un coin , on va en avoir besoin. Step 3 Maintenant il va falloir faire un DUMP de notre proggy .AVANT d'éxecuter le ret à l'addresse 5b7564 , tapez A 5b7564 .Vous êtes dans l'éditeur ASM de softice,en 5b7564 .Tapez 'jmp eip' et entrée, suivit d'escape pour sortir de l'éditeur ASM. Le prog va faire une boucle infinie à l'addresse 5b7564, donc juste avant de s'éxecuter .Relancez le tout avec F5 . Lancez Procdump 1.5 . Ce sernier doit vous indiquer tous les proggyz qui tournent en ce moment dans la mémoire .On repère facilement notre prog : pstrip.exe .Avant de le dumper,on change une option de procdump : dans 'option', choisissez 'Rebuild Import Table' .Pour dumper le prog, on fait un click droit dessus et on choisit l'option 'Dump (Full)' .Donner un nom a votre exe dumpé (Dump.exe pour moi) .Vous devez maintenant avoir un exe de 1674 Ko...Pour vérifier que votre exe décompressé est valide,lancez le .Ce dernier devrait tourner sans problème... Step 4 L'autre protection du soft est un nagscreen qui s'affiche à chaque démarrage .Et en plus il est pas vraiment evident : les breakpoints sur les APIs courantes comme DialENTIONogBoxParamA,MessaBoxA et autres n'ont aucun n'effet... Je me suis servis du breakpoint qui rend la main à softice lorsque le bouton de souris est activé. Lancez votre exe et avant de cliquez sur 'ok' quand le nag s'affiche, faîtes surgir softice : CTRL D .On va afficher tous les programmes qui tournent sous zindows : tapez TASK .On repère facilement notre exe ('dump.exe' pour moi) .Maintenant on tape HWND DUMP . Cette commande va vous afficher toutes les APIs que le prog utilise à cet instant instant .ATTENTION ! L'écran ci dessus sera forcément différent chez vous : les addresses à droite, changeront d'une config à l'autre .Donc chez moi ,en tapant HWND DUMP ,j'obtiens : Window Handle hQueue SZ QOwner Class Name Window Procedure 0270(1) 3967 32 Dump TPSSplash 13ff:00000298 02A0(2) 3967 32 Dump Button 13ff:00000A72 029C(2) 3967 32 Dump Button 13ff:00000A5C 0298(2) 3967 32 Dump Button 13ff:00000A46 0294(2) 3967 32 Dump TGroupBox 13ff:00000A30 0288(2) 3967 32 Dump TGroupBox 13ff:000009D8 0290(3) 3967 32 Dump Edit 13ff:00000A1A 028C(3) 3967 32 Dump Edit 13ff:00000A1A 0284(2) 3967 32 Dump TGroupBox 13ff:000009C2 0278(2) 3967 32 Dump TRadioGroup 13ff:00000980 0280(3) 3967 32 Dump Button 13ff:000009AC 027C(3) 3967 32 Dump Button 13ff:00000996 0274(2) 3967 32 Dump Button 13ff:0000096a Nous ce qui nous interresse ,ce sont les class ayant comme nom 'Button' puisque l'on veut bloquer le soft dès qu'il y a une activité sur la souris (donc un click sur 'ok' ou autre) . On voit que softice nous indique plusieurs class ayant comme nom 'button' .Prenez en une au hasard mais ce n'est pas dit que ce soit le bon : il faudra probablement que vous fassiez plusieurs essais avant de trouver le bon bouton .Moi j'ai pris le troisième en partant du bas (celui qui a un window handle égal à 280(3)).Pour placez votre breakpoint vous tapez : BMSG 280 0202 .Le nombre 280 correspond au window handle du boutton et 0202 est le breakpoint WM_LButtonUp . Si vous mettez le bon breakpoint, quand vous cliquez sur le 'ok' du nag,softice doit se déclencher.Mais vous n'êtes pas à ce moment là dans le code principal du proggy.On est au début d'une API.Pour revenir dans le code du prog, il faut 'remonter' à l'aide de la touche F12 .ATTENTION ! Pour sortir complétement du nag, il faut appuyer 64 FOIS sur F12 ! Si vous faites bien l'opération, vous arrivez à ceci : 015f:004a8856 cmp byte ptr [eax+00000530],0 ------ Test si utilisateur enregistré 015f:004a885d jnz 004a8904 ------------ Saute au dessus du nag si utilisateur enregistré | ---- j'ai coupé! ------ | 015f:004a88c7 mov eax,[004d8b00] 015f:004a88cc call 0042522c------- Nagscreen ! 015f:004a88d1 cmp eax,02--------- On a atterit ici avec softice ! En appuyant 64 fois sur F12 ,on arrive à l'addresse 4a88d1.Juste avant cette addresse vous avez le call qui déclenche le nag : call 0042522c . En remontant un peu dans le code ,on voit qu'à l'addresse 4a8856 il y a une comparaison suivie d'un saut conditionnel qui ,s'il est effectué, nous fait sauter au dessus du nag ... Et si on remplaçait le jnz 004a8904 par un jz 004a8904, afin de forcer le proggy a tout le temps sauter au dessus du nag ...Prenez votre éditeur hexa, et éditez le dump que vous avez fait .Rendez-vous à l'offset a7e5e pour y mettre 84 à la place de 85. Lancez votre crack : ça marche ,le nag ne s'affiche plus... A noter que cette pour décompresser Aspack 10.08.03 est valable pour d'autres proggyz compressés avec ce dernier .Et comme je l'ai déjà dit, la technique employée pour virer le nag de cette version de PowerStrip est applicable aux versions antérieures et supérieures.... TaMaMBoLo