|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ce cours est un reflet fidèle du cours intégré au crack de ma création de WebExpert 6.05.2 fr
Windasm 8.9 Pour désassembler le programme (transformation en langage d'assemblage) et pour trouver les string data references nécessaires pour élaborer le crack. WinHex 10.2 Softice Regmon 6.0.6 Ollydbg 1.10
Offset Déplacement depuis le début de la zone de code d'un programme. EB 90
Détail des modifications wexpert6.exe
Wexpert6.exe
Avant propos Le logiciel comporte une limitation au niveau du temps d'utilisation qui est fixée à 30 jours. Si vous avancez d'un an la date du système en utilisant l'horloge en bas à droite de votre écran le logiciel se lancera mais il vous sera impossible de créer un nouveau document ou d'enregistrer un document existant ; un message "Votre période d'essai est terminée.Veuillez vous enregistrer si vous désirez continuer l'utilisation du logiciel" vous rappelant que la période d'essai est terminée.Normal vous me direz le logiciel est limité à 30 jours d'utilisation ! On se dit alors qu'en le ramenant à la date d'aujourd'hui le programme va à nouveau se lancer (c'est le cas par exemple pour certains logiciels comme paint shop pro). Le problème c'est que le logiciel est définitivement verrouillé (en apparence du moins parceque nous on va passer par là :)). On réfléchit. Si le logiciel sait que la date d'utilisation a expiré c'est que cette information il l'a enregistrée au préalable quelque part. Ce quelque part dans une grosse majorité des cas c'est le registre (la registry pour les anglophones). Pour ceux qui ne connaissent pas le registre c'est la table de paramétrages des systèmes windows et des applications qui y sont installées.On y accède via l'utilitaire regedit.exe à partir de démarrer->exécuter->regedit.exe. La question se pose alors comment retouver cette information dans le registre ; information qui est examinée par Wexpert6.exe pour savoir s'il doit se lancer ou se bloquer (passé les 30 jours d'utilisation il se bloque). Pour cela j'utilise en général un petit utilitaire gratuit qui s'appelle Regmon.exe (Regmon = Registry monitoring -> en français surveillance du registre). Il est disponible an anglais sur http://www.sysinternals.com . Il est très petit (seulement 188 ko pour la version 6.06). Comment allons nous l'utiliser ? En fait c'est assez simple. Vous le lancez et comme on veut surveiller l'activité du processus Wexpert6.exe avec le registre vous tapez dans la case include Wexpert6.exe et vous décochez les cases Log Writes et Log Errors.Vous avancez la date du système de 1 an (après avoir ouvert Wexpert6.exe une première fois pour initialiser le repère de temps) et vous lancez ensuite Wexpert6.exe. Ensuite revenez à Regmon.exe.Attendez 10 minutes.Vous avez alors à l'écran 72195 lignes !!! Trouver l'information dans ce dédale est chose impossible : il faudrait examiner les clefs une par une. On change de technique.On va utiliser le logiciel Ashampoo Uninstaller Suite 1.3.1.0 disponible sur www.ashampoo.com (logiciel en anglais). Je suppose dans la suite que vous n'avez pas encore lancé le logiciel au dela de sa période d'évaluation de 30 jours (vous n'avez pas avancé la pendule de windows de 1 an) et qu'il vous reste 30 jours d'évaluation.Ce que l'on va faire c'est faire une photo du système tant que Wexpert6.exe est encore évaluable (période d'évaluation de 30 jours non terminée) et une autre photo du sytème après 1 an d'installation et comparer ces 2 photos et voir ce qui a changé pour trouver l'endroit où est situé le time-limit. . Lancez Ashampoo Uninstaller Suite 1.3.1.0 . Avancez la pendule de windows de 1 an. . Lancez Wexpert6.exe. Dans Ashampoo Uninstaller Suite 1.3.1.0. . Clic sur le bouton Compare / create log Arrivé ici lorsque vous déroulez les clés du registre qui ont été modifiées vous en voyez une particulièrement intéressante Sous windows XP HKEY_USERS\S-1-5-21-1292428093-1580436667-854245398-1004\Control Panel\Color Sous windows 98 HKEY_USERS\.DEFAULT\Control Panel\Color Vous avez compris la clé de nom Type 7bf indique le nombre de jours utilisés depuis l'installation du logiciel.Pour remettre 30 jours d'évaluation il suffit avec regedit.exe (voir plus haut) de supprimer les clés Type 7bf et colEveQf situées suivant votre système dans le chemin HKEY_USERS\S-1-5-21-1292428093-1580436667-854245398-1004\Control Panel\Color ou HKEY_USERS\.DEFAULT\Control Panel\Color.En effet la valeur numérique (chez moi 38436) de la 2 ième clé colEveQf sert à initialiser le repère de temps à la date d'installation de webexpert 6.J'ai installé mon logiciel le 24/03/2005.La valeur Type 7bf correspond à la différence en jours entre la date courante et la date d'installation inscrite dans la valeur de la clé colEveQf. Par exemple si on est le 25/03/2005 et que je lance webexpert 6 la valeur de Type 7bf vaut 25/03/2005 - 24/03/2005 = 1 (en décimal). Comment ai-je trouvé ça ? Eh bien le 24/03/2005 j'ai effacé ces 2 clés puis lancé le logiciel webexpert 6 .J'ai ensuite noté la valeur de la clé colEveQf qui vaut 38436. Puis j'ai refait la même manipulation en me plaçant au préalable le 25/03/2005.A ce moment colEveQf qui vaut 38437.J'ai recommencé sur plusieurs dates consécutives (26/03/2005 ; colEveQf qui vaut 38438 ...). La protection sur le time-limit est ici particulièrement difficile à trouver d'une autre manière car en temps normal chercher un time-limit sous une clé qui parle de couleur n'a aucun sens.
Analyse du programme
1/ Enregister le logiciel (partie 1)
On commence par rétablir les 30 jours d'évaluation si ce n'est pas déja fait (voir l'avant propos).Quand on lance le logiciel on voit que l'on peut s'enregistrer dans le menu Aide -> Entrez la clé d'activation. Si vous saisissez le couple nom d'enregistrement / clé d'activation suivant pifoman / 123456 vous avez une fenêtre qui vous dit "Mauvaise clé d'activation.Vérifier si vous avez inscrit correctement votre clé d'activation.". Comme on ne peut pas désassembler Wexpert6.exe dans w32dasm par la commande de w32dasm suivante Disassembler -> Open File to Disassemble -> Wexpert6.exe (w32dasm se ferme sans qu'on ait le temps de faire quoi que ce soit) on va utiliser le célèbre débugger d'application softice 4.05. Si vous voulez l'installer correctement avec ses différents patchs ou savoir comment il se manipule je vous conseille mon cours de cracking sur photoimpact 8.5. Démarrez softice si ce n'est pas déja fait par Démarrer -> tous les programmes -> NuMega SoftICE -> Start SoftICE.On rentre ensuite le nom et la clé dans la boîte d'enregistrement de Wexpert6.exe et avant de cliquer sur OK dans Wexpert6.exe on passe sous softice par CTRL D et on pose un point d'arrêt sur l'API createwindowexa qui est utilisée dans la création de fenêtres sous windows en tapant dans softice bpx createwindowexa (suivi de entrée).Ce point d'arrêt permettra d'interrompre l'exécution de Wexpert6.exe quand celui-ci invoquera la fonction système createwindowexa pour créer la fenêtre contenant le message "Mauvaise clé d'activation.Vérifier si vous avez inscrit correctement votre clé d'activation.". Avant de repasser sous windows faites CTRL F1 pour agrandir la fenêtre de softice.On repasse ensuite sous windows par CTRL D puis on clique sur le bouton OK de la fenêtre d'enregistrement de Wexpert6.exe.A ce moment là on passe sous softice.Softice nous affiche break due to BPX User32!CreateWindowExa. On réfléchit.Quand Wexpert6.exe crée la fenêtre en invoquant la fonction CreateWindowExa il sait déja si le code d'enregistrement (ici 123456) est bon ou non.Ce qu'on va faire c'est rechercher via softice l'endroit dans la mémoire où est stockée le nom d'enregistrement pifoman car le calcul de la bonne clé est fait à partir du nom entré et demander à softice de nous dire tous les accès qui sont fait par webexpert 6 sur le nom pifoman entre le clic sur le bouton OK et la création de la fenêtre.Pour cela tapez la commande suivante dans softice une fois qu'il vous annonce le break sur CreateWindowExa après le clic sur OK de wexpert 6 s 0 L ffffff 'pifoman' Softice vous affiche dans la zone de donnée (zone en dessous de la première ligne verte en partant du haut) l'adresse où il a trouvé l'occurence de pifoman (ici il n'y en a qu'une).Ici c'est l'adresse 1C7A30 dans le segment 0010.L'adresse trouvée peut être différente chez vous. 0010:1C7A30 70 69 66 6F 6D 61 6E - 00 00 00 00 00 00 00 00 pifoman......... A ce moment là on va poser breakpoint on memory access sur l'adresse 0010:1C7A30 (suivi de entrée). bpm 0010:1C7A30 Faîtes ensuite autant de F5 (exécution jusqu'au prochain point d'arrêt) ; que nécessaire (3 exactement) pour passer de softice à windows et recliquez sur le bouton OK qui valide l'enregistrement.Vous repassez sous softice qui est arrêté sur l'adresse 0010:1C7A30.Faites ensuite 4 F5.Vous voyez alors que softice break sur createwindowexa.L'idée ici est de se dire que le bon numéro de série est calculé après le dernier accès au nom pifoman et avant le break sur createwindowexa.Il faut donc faire 3 fois F5 après le premier break.Ensuite faîtes quelques F12 (8 exactement) pour repasser dans wexpert (vous voyez alors sur la dernière ligne verte de softice en partant du haut wexpert6!code et non plus user32!.text).Ensuite faîtes une suite de F10 (37 exactement) pour tracer l'exécution de webexpert en mode pas à pas.Vous remarquez que vous passez sur une série de ret qui signifie sortie d'une fonction (un call en asm).Vous arrivez ici en 001B:0081659E
Arrivé sur la ligne d'adresse 001B:008165D0 par une suite de F10 depuis 001B:0081659E si vous tapez dans softice d edx pour voir le contenu du registre edx (d = display) vous voyez le vrai serial : PLGN-JUWM-HFCZ-ZZZZ calculé pour pifoman apparaître dans la zone de donnée de softice en haut sous la première ligne verte.Si vous faîtes d eax vous retrouvez notre serial bidon 123456.On en déduit aussitôt que le call 0081667B en 008165D0 est chargé de faire la comparaison entre le bon et le mauvais serial. Si vous faîtes un nouveau F10 softice nous indique que wexpert6.exe veut sauter vers l'adresse 0081667B.Il faut donc annuler le saut en 008165D5 en faisant le remplacement suivant dans wexpert6.exe ouvert dans winhex (faîtes recherche -> remplacer chaîne hexadécimale et remplacez E877EFBEFF0F85A0000000 par E877EFBEFF0F8500000000)
008165D0 E877EFBEFF CALL 0040554C remplacé par 008165D0 E877EFBEFF CALL 0040554C
Enregistrer la modification et lancez wexpert6.exe (depuis le répertoire d'installation de web expert 6 qui est par défaut C:\Program Files\Visicom Media\WebExpert 6) et rendez-vous dans la boîte d'enregistrement de web expert 6.Saisissez pifoman / 123456 pour le nom et la clé mais avant de cliquer sur OK lancez regmon en mettant dans include wexpert6.exe.Cliquez sur OK dans wexpert6.exe.Un message vous dit que le logiciel est enregistré.Dans regmon vous voyez les clés Usager = 70 69 66 6F 6D 61 6E (= pifoman) et Format = 31 32 33 34 35 36 (= 123456) qui ont été créees dans le registre sous le chemin HKLM\Software\Visicom Media\WebExpert 6\ ; HKML signifiant HKEY_LOCAL_MACHINE. Il y a un problème au vue de cette création de clé.Le logiciel a mis le serial bidon 123456 comme serial dans le registre au lieu de mettre le vrai PLGN-JUWM-HFCZ-ZZZZ ! Le logiciel n'est donc pas enregistré comme il y paraît (relancez-le pour vous en convaincre).
2/ Enregister le logiciel (partie 2)
On va désassembler notre wexpert6.exe (patché) dans ollydbg par la commande File -> Open -> wexpert6.exe.Ensuite on démarre le logiciel via le debugger avec F9.Allez dans le menu Aide -> Entrez la clé d'activation de wexpert6.exe et entrez le couple pifoman / 123456 pour le nom et la clé sans faire OK.Revenez à ollydbg et cliquez droit sur la zone de code désassemblé en haut à gauche puis Goto -> expression -> 008165D5.Puis cliquez droit sur l'adresse trouvée à savoir 008165D5 et choisissez breakpoint -> toogle.On vient de mettre un point d'arrêt sur l'adresse 008165D5.Cliquez sur OK dans wexpert6.exe.Ollydbg break sur l'adresse 008165D5.Cliquez droit sur la zone de code désassemblé en haut à gauche puis search for -> Name (label) in current module.Vous avez alors la liste des fonctions importées par wexpert6.exe (type import dans la colonne type) et celles exportées par wexpert6.exe (type export dans la colonne type). Sélectionnez la ligne 0098C428 .idata Import (Known) advapi32.RegSetValueExA et cliquez droit dessus et choisissez Set breakpoint on every reference.Cette fonction RegSetValueExA de C:\WINDOWS\system32\advapi32.dll sert à mettre à jour une valeur dans le registre par exemple attribuer 31 32 33 34 35 36 à Format.On a donc demandé à ollydbg de s'arrêter dès qu'il attribue une valeur à une clé dans le registre.Revenez ensuite à la fenêtre principale d'ollydbg et faites une suite de F8 (exécution ligne de code par ligne de code sans entrer dans les call mais en les exécutant quand même).Vous entrez alors dans ce call 0081664C . E8 9B0C0000 CALL wexpert6.008172EC Pour arriver ici (2 ième break sur advapi32.RegSetValueExA).Le 1ier break est sur Usager sur lequel on ne s'attarde pas car il ne nous intéresse pas (faîtes des F8 successifs).Vous remarquez que vous êtes passé dans advapi32.dll. 00817384 |. 8BC8 MOV ECX,EAX ; | En 00817384 EAX qui vaut 123456 est mis dans ECX et RegSetValueExA est invoquée en 0081738E.Il faut donc que se débrouille pour mettre le bon serial dans EAX avant d'entrer dans le call en 0081664C.Justement qu'est ce qu'on a avant d'entrer dans ce call.
Si vous avez regardé les registres avant d'arriver sur l'adresse 0081664C vous auriez vu EAX 03842744 ASCII "pifoman" Remontons dans le code pour voir comment EDX est mis à jour.L'une des adresses 00816628 et 00816634 met à jour EDX. Laquelle prendre ? Relançons une session de debugging par le menu debug -> restart.Désactivez tous les breakpoints posés sauf celui en 008165D5 en cliquant sur le B de la barre de boutons d'ollydbg et en les sélectionnant un par un et en appuyant sur la touche suppr du clavier.Démarrez le programme avec F9.Puis allez dans la boîte d'enregistrement de wexpert6.exe et entrez le couple pifoman / 123456 pour le nom et la clé puis faîtes OK.Ollydbg break alors sur l'adresse 008165D5.Ensuite faîtes F8 plusieurs fois jusqu'à arriver sur 00816625.Puis aller dans le menu Plugins -> command line -> command line -> d [ebp+44] (le plugin command line correspond au fichier Cmdline.dll dans le répertoire d'installation d'ollydbg. Si vous n'avez pas le plugin aller le chercher sur internet et mettez-le dans le répertoire d'installation d'ollydbg.Il est sur mon site si besoin). Dans la zone de données d'ollydbg (en bas à gauche) vous voyez alors que le contenu de ebp+44 (noté [ebp+44]) vaut 123456.Et si on mettait à la place PLGN-JUWM-HFCZ-ZZZZ. Pour cela il sufit de se rappeler que ce numéro était situé dans [EBP-4] (on a déja étudié cela plus haut avec softice) à l'adresse 008165CD.On passe donc en mode d'assemblage en appuyant sur la barre d'espace du clavier quand on est à l'adresse 00816625 dans ollydbg.Tapez alors le code suivant : MOV EAX,DWORD PTR SS:[EBP-4] en décochant la case Fill with NOP's puis cancel.Faites des F8 successifs. Arrivé en 0081664C vous avez alors EDX qui vaut PLGN-JUWM-HFCZ-ZZZZ et non plus 123456.C'est ce qu'on voulait.Faites F9 puis dès que le message nous disant que l'on est enregistré apparaît sortez du désassembleur par ALT X.Relancez wexpert6.exe. Le logiciel est cette fois-ci enregistré pour de bon.
NB : si vous voulez effectuer physiquement la modification dans l'exécutable pour un enregistrement ultérieur d'un nouveau nom par exemple (effacez pour cela la clé HKEY_LOCAL_MACHINE\Software\Visicom Media\WebExpert 6\Format) ouvrez wexpert6.exe dans winhex et faites ALT G -> 415A27 puis tapez BC à la place de FC.
Dans ce cours vous avez appris à trouver l'endroit dans le registre où est conservé la trace du time-limit grâce à Ashampoo Uninstaller Suite 1.3.1.0.Vous avez également appris à poser un point d'arrêt sur la fonction de création de fenêtre l'API createwindowexa avec le débugger softice.Enfin je vous ai montré comment se servir du debugger ollydbg pour forcer la routine d'enregistrement en posant un breakpoint sur la fonction de mise à jour de valeur dans le registre RegSetValueExA.
Bonne soirée à tous.
![]()
|