Crackez Webexpert v.6 (6.01.2)
Valider le code Invalide

Pêcher le Serial Number

By Selima

 

Info Cible:

 

webexpert v 6 un Puissant tool pour la conception de sites web

Date réalise :11 juin 2004

Adresse: http://www.visicommedia.com/

Tools Needed:

 

- DeDe  Delphi program analyzing tool


Analyse du programme

 

Lancer Webexpert6.exe, une fenêtre s’ouvre avant le lancement définitif du programme.

 

 

On remarque des limitations :

Le programme a besoin d’être enregistré, puis une limitation dans le temps, le programme est un shareware, il offre une période d’essai de 30 jours, au-delà de cette période le programme se débloque, pour le débloquer commander le et payer le coder, il a sûrement besoin de votre argent pour développer des softs.

Pour des raisons purement éducatives, on va cracker le programme pour découvrir les procédure de protections  utilisées, et apprendre comment se débarrasser d’un Nag gênant dans la période d’essai pour ne pas nous harceler.

Aller dans Aide puis Enter la clé d’activation, un boite d’enregistrement s’ouvre, entrer votre non et votre code fantoche, clic OK, une fenêtre surgit, vous annonce, mauvaise clé d’activation

 

 

Bien, ouvrer W32dasm pour désassembler l’exécutable et chercher ce string Data. Cette opération va durer plus que 20 minutes. Et bien pourqoi ?

L’analyse du programme avec studPe, ou mieux PeIdentifier,  nous révèle qu’il n’est ni packé ni protégé et qu’il est codé en Delphi. Essayer de désassembler. Le code des  programmes en Delphi est trop long, c’est pourquoi W32dasm a mis beaucoup de temps, la procédure de désassemblage a duré plus  que 20mn.

Alors, pourquoi ne pas utiliser un désassembleur adéquat ? mais quel outil ?

DeDe est notre tool pour accomplir cette tache.

Ouvrer DeDe  choisissez notre cible Webexpert6.exe puis cliquer sur Process, lorsque le programme est  complètement charger, cliquer sur OK, DeDe décompile  notre application, valider la fenêtre {dump succesfull}, enfin cliquer sur « No »  pour les deux fenêtres qui s'affichent.

 

 

Dans le menu de la fenêtre de DeDe, cliquer sur procédures. Dans la fenêtre de gauche, on cherche dans les procédures une référence  révélatrice, on trouve une qui s'appelle "NoSerie", pour le Name et TSerialNumFrm pour Class Name. Cette procédure en fait, a pour fonction le contrôle de l’enregistrement.On clique dessus puis on se dirige vers la fenêtre de droite, TSerialNumFrm  s’affiche comme titre. Cliquer sur « Events » puis sur Btn0kClick, on se trouve alors dans les procédures relatives aux cliques sur le button OK

 

 

On atterrit dans cette partie du code. Apparemment, rien de spéciale sauf un call.

Dans le haut de la fenêtre de gauche, on voit un +. Pour afficher l’arborescence, on clique sur +, ou sur la flèche qui se dirige vers la droite, le niveau bas s’affiche et la ligne du call est sélectionnée automatiquement. On voit au dessus du call  une référence : [ Reference to : proc_00882500]

 

 

Si on clic à gauche sur : proc_00882500, on est emmené tout droit vers le corps de la procédure qui contrôle le Sérial number et par là l’enregistrement du programme.

On voit un long listing si on jette un coup d’œil en bas on va découvrir des informations importantes qui confirment qu’on est dans la bonne voie.

Fig1

 

 

Voila notre string data de retour après votre tentative d’enregistrer le programme. Plus en bas en découvre aussi le bon message

Fig2

 

 

Dans Fig1, on va que le mauvais message est appelé par un saut conditionnel JNZ 0088262E. on doit faire quelque chose pour ne pas arriver là.

On voit que ce saut est activé par une comparaison juste en dessus. Le code compare dword ptr [ ebp-28] à 0.

dword ptr [ ebp-28] est un  pointer qui fait référence à notre code bidon, le programme teste s’il est égale à 0, c’est à dire s’il est faux. Si c’est le cas le saut ne s’exécute pas est le programme fait appel au Nag qui affiche [ Mauvaise clé d’activation…], si différent de zéro, il saute au-delà de cet affichage, vers le bon message(Fig2).

On peut tester tout cela avec DeDE ? Dans la fenêtre qui affiche la routine de la procédure "NoSerie", on double clic sur notre jnz, on peut voir que lorsque le s’exécute, il saute au-delà du code qui gère l’affichage du message du refus.

Donc on sait ce qu’on doit faire maintenant. Changer un seul byte. Inverser le saut jnz, pour qu’il saute même si notre code entré est invalide.

Fire up ton hexa préféré, changer 7525 par 7425, sauvegarder, lancer votre EXE patché, entrer votre nom et n’importe quel code, valider, le programme est alors assigné à votre Nom.

Remarque :si vous voulez savoir la correspondance de l’adresse virtuelle du jnz en offset, dans la fenêtre principale de DeDe, cliquer sur Tools puis sur RVA Converter, enter 00882607 dans la case RVA puis cliquer sur Entrer l’adresse offset s’affiche sous Physical offset

 

 

Récapitulatif :

On a vu que notre jnz était décisif dans le crack de notre cible, et que juste avant le saut le programme comparait le vrai du faux Serial number, donc à ce niveau là il était capable de connaître le vrai Serial du faux. Mais par quel billet ?

Et bien par le billet du call qui précede la comparaison. Il fait appel à cette routine pour contrôler le code entré et le vrai code qui correspond à notre nom, en sortant du Call le programme sait déjà si notre code est vrai ou non.

Vérifions cette hypothèse :

Pour réaliser ce but on va quitter DeDe qui a accompli sa mission pour céder la place à notre fameux OllyDbg. On charge Notre Webexpert6.exe non patché dans Ollydbg et on pose un break point au niveau de notre call 0046C528 à l’adresse 008825FE. Donc dans la fenêtre CPU , on fait Ctrl+G , entrer 008825FE , Clic F9 une seule fois pour exécuter le programme, valider le Nag par OK , dans la barre du menu principale, un clic sur Aide puis sur Entrer la clé d’activation, entrer votre nom et code bidon et validé, Ollydbg s’arrête sur notre Call. Push  F7 pour entrer dans le call puis F8 pour tracer, dans la quarante quatrième trace on arrive au call 004054B8 qui va nous dévoiler notre vrai Sérial Number qui correspond à notre Nom et le place dans le Registre EAX.

 

 

Remarquer que notre call initiale fait lui aussi à un sous call  - 00882674 CALL004054B8 - qui gère le vrai Serial. Alors si on veut pêcher notre bon Serial de la première trace, on pose un breakpoint sur ce deuxième call.

Dans la fenêtre CPU, faite un Ctrl+F2 pour recharger notre cible, une fois réinitialisé, aller vers Wiew puis vers Breakpoints, une fenêtre s’affiche, clic sur la ligne du premier call puis sur la barre d’espace pour le désactiver.

 

 

Fermer cette fenêtre puis poser un BP sur notre call , Puis F9 pour exécuter le programme, valider le Nag d’ouverture, puis entrer vos donnés d’enregistrement, valider, le programme s’arrête au niveau de notre call

 

 

sans même tracer,  notre code qui correspond au nom Willingness est affiche dans la fenêtre Registre dans eax.

 

 

Voila nos Serial numbers valides :

 

Nom : DEAMON

S.Num : « EEES-5FHB-SA2Z-ZZZZ »

 

Nom : devilZ

S.Num : « VBBE-UGRJ-KHCZ-ZZZZ »

 

Nom : Willingness

S.Num : « PFGQ-VVNJ-MJ8U-JQRT »

 

Nom : Selima

S.Num : « RGHH-SGRX-UE2Z-ZZZZ »

 

ce tutorial se termine pour laisser la place à ce qui veut continuer un tutorial sur le Keygening de Webexpert6.

 

Greets : to DevilZWillingnessDeamon ( pour ces publications) et à tous ceux qui consacrent leurs temps à démocratiser le savoir informatique sur le Net

 

Juin 2004

Selima

m.culture@netcourrier.com