Nom : Acdsee 3.0 ~~~~ Auteur du Tut : Dark-Angel ~~~~~~~~~~~~~~ Protection : Packed/Limite a 30 jours/Nag parasites ~~~~~~~~~~~ Outils : Softice 4.0/Procdump 1.6 (pour dumper)/Windasm 8.93/Hediteur Hexa ~~~~~~~ J'utilise un Viewer/Browser d'images qui s'appel Acdsee et qui a la particularite d'etre rapide et d'occuper peu de ressources.Lorsque j'ai vu qu'il existait une nouvelle version de ce prog je l'ai tout de suite recupere. La je suis tombe sur une agreable surprise ils avait enfin trouver assez d'argent pour revoir la conception de leur protection (les version anterieur etaient vraiment tres mal protegees) mais bon comme vous allez le voir c'est par encore parfait :-).Voici dans les grandes lignes en quoi elle consiste : - Compresser avec Aspack 108.X - Des nags 'parasites' - Le programme refuse de se lancer passe 30 jours Bon ce tutorial va porter sur le 'Manual Unpacking' des programmes compresse avec 'Aspack' (si on devais utiliser Procdump ce tut ne servirait pas a grand choses car c'est selon moi la seule partie 'vraiment' interessante du tut) puis nous verrons le kill des nags, et de la routine de bloquage au bout des 30 jours et enfin comment ameliorer l'aspect du prog :-) PART I : MANUAL UNPACKING Bon notre prog est compresse en Aspack (comment je le sais, c'est facile il y a une section dans le PE du prog qui s'apelle '.aspack' le reste je l'ai deduit :-) bon pour le manual unpacking la marche a suivre en gros c'est de tracer le prog avec SI et des qu'on arrive a la fin de la routine de decompression on bloque le prog en memoire pour pouvoir l'enregistrer ce qui va nous permettre ensuite de le desassembler et de le patcher si necessaire. On lance le laoder de SI et losqu'on click sur les engrenages le prog se lance normalement sans nous donner la main a SI apparement les programmateurs on modifier le PE du prog bon comme d'habitude on lance procdump on choisi 'PE Editor' on choisi notre executable on va dans 'Sections' et on change la section '.text' en E0000020 (pour pouvoir lire et ecrire en memoire) on relance le loader et SI nous donne enfin le main.Comme la routine de decompression est assez longue je n'ai selectionne que le passage qui nous interesse : 5554BC POPAD 5554BD JNZ 5554C7 <== saute sur le push 4A33BF. ....... 5554C7 PUSH EAX <== charge l'Entry Point du prog decompresse. 5554CC RET <== fin de la decompression retour sur le code du prog decompresse. ici le popad nous signale la fin de la routine de decompression car c'est comme cela que la plupart des compresseurs et autres crypteurs sauvent le contenu des registres (Pushad) avant de compresser, pour les restituer a la fin de la decompression de celui-ci (Popad).Le 'Push EAX' charge l'entry point original du prog decompresse (le chargement de l'entry point se fait souvent grace a un Call EAX, Push EAX suivit d'un Ret ou tout simplement d'un Jmp EAX.) pour avoir notre entry point original il suffit de taper ?eax ici cela donne 4A33BF. Bon maintenant il faut bloquer le prog pour pouvoir le dumper c'est a dire le sauvegarder, pour bloquer le prog en memoire il faut le modifier pour le faire sauter sur lui meme indefiniment c'est a dire de modifier le dernier jump de la routine de decompression en un 'jmp eip' pour le bloquer avant qu'il n'arrive sur la fonction 'RET' qui chargera le code du programme decompresse. ici le dernier jump avant l'instruction de retour est le jnz 5554C7 on se met donc sur cette ligne sans l'executer en on tape 'a' (pour pouvoir assembler le code) on modifie donc le 'jnz 5554C7' en 'jmp eip' et on relance avec F5. on lance Procdump on choisi dans 'Option'=> 'Rebuild new import table' puis on cherche dans la liste notre prog ici c'est acdsee.exe on fait un click droit et on choisi 'Dump (Full)' on sauve notre prog mais si on le lance on obtient un joli message d'erreur rassurez vous c'est normal car on n'a pas rentrer le nouveau 'entry point' vous vous rapeller de la valeur de eax ?(c'etait 4A33BF) donc on ouvre notre dump avec procdump et on choisi 'PE Editor' on fait ensuite le calcul suivant pour obtenir l'entry point: * (entry point original) - (image base) = notre entry point ce qui nous donne : 4A33BF - 400000 = A33BF <== l'entry point on remplace donc la valeur de notre 'entry point' par A33BF et on relance le soft pour verifier qu'il se lance correctement.C'est bon tout marche nous avons notre nouvel executable dumpe (il passe de 642 Ko a 1.41 Mo) il est pret a etre desassemble et patche. PART II : Kill la restruction des 30 jours & Nags parasites On desassemble notre prog sans probleme on avance la date d'un mois et on lance le soft en utilisant le loader de SI on trace avec F10 jusqu'a ce qu'on arrive sur le call 4B2E60 en qui nous balance le nag comme quoi maintenant il faut acheter acdsee.Bon la on va tricher un peu (car ca marche pas pour tout les progs) on recule la date de 1 moi et acdsee se relance normalement on retrace le prog avec SI et on note ce qui se passe a l'adresse du 'call 4A3349A' qui nous balance le nag et la on vois que le prog le passe sans probleme et continue son execution normalement, donc on peut en deduire que ce call n'est pas necessaire a l'execution du soft, onreleve l'offset du call en on va nopper tout ca :-) a l'offset A2A9A on remplace donc E8C1F90000 par 9090909090 On reavance son horloge de 30 jours et on lance le prog patche et la plus de problemes acdsee se lance correctement. On lance le browser et au bout d'une 30ene d'images des nags nous informent qu'on doit s'enregistrer pour eviter que ces nags ne viennent nous perturber lors de la visualisation des images. C'est la j'ai remarque le titre de la barre c'etait 'Acdsee - Trial Version' et je me suis dis : les programmateurs n'ont pas du se faire chier et onsurement mis la meme verification pour savoir si l'utilisateur est enregiste ou pas et ainsi afficher le message Trial Version dans la barre du titre et de meme pour les nags perturbateurs. J'ai donc repris Windasm et j'ai lance une recherche sur les mots : 'Trial Version' et j'ai trouve une occurence au allentour de 4592FB : 4592FB call 00417130 <== verifie si on est registered !! 459300 test eax, eax <== si unregistered eax=0 459302 jne 00459324 <== si on est enregistered on n'affiche pas le 'Trial Version' dans le titre.(on saute) ............ si on entre dans le call on remarque qu'il est appele 11 fois au cours du programme (il y a donc 11 verifications dans le prog pour savoir si on est enregistre ou non) le call se resume a un xor eax, eax une xor est en fait un ou exclusif qui fonctionne comme ceci : 0 XOR 0 = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0 (Le resultat final de l'operation est stocke dans le registre EAX) Donc pour nous si eax est different de 0 il nous considere comme registered. mais la xor remet eax a 0 donc il nous suffit donc de nopper la xor pour que le resultat soit different de 0. On note l'offet: offset: 16730 et on remplace 33C0 par 9090 voila les nag parasites son kill ainsi que le bouton 'Register' dans le menu 'Help' plus quelques autres restrictions :-) PART III : Petites ameliorations Bon recapitulons : toutes les fontions sont actives, et le prog n'expire plus voila ce tut pourrais se finir la mais bon apres quelques utilisations j'ai remarque que dans le Viewer et dans le Browser lorsqu'on cliquait sur le bouton 'About Acdsee...' on n'avait aucun nom d'utilisateur et un message du style: 'You have used ACDSee %d times.There are %d days remaining in your evaluation period.' Pour pouvoir modifier un texte dans une messagebox le meilleur prog que je connaisse est 'exescope' donc on le lance on ouvre notre prog cracke et on choisi dans `Ressource ==> Dialog ==> 107 et 1039' cela nous permet de remplacer le texte par ce que l'on veux moi dans `About' j'ai mis: Registered to : Dark-Angel [FCF 2000] Maintenant a vous de vous demerder et n'oubliez pas que si vous aimez ce soft vous pouvez toujour l'acheter :-) GreeTz to : TaMaMBoLo, SiFLyiNG, Christal, MrPhilex, DXP, Th3-Kiing, RD116, Jufox,OsMoSe