Crack in France
par pifoman

 
 

Ce cours est un reflet fidèle du cours intégré au crack de ma création de Ulead PhotoImpact 8.5 fr

 

INFOS SUR LE CRACK

 

Nom du prog

Photoimpact 8.5

Editeur

http://www.ulead.fr

Téléchargeable

ftp://ftp3.ulead.com/pub/Trial/PI8.5/upixl_t_f.exe

Date du prog Lundi 15 septembre 2003
Date du crack Mardi 18 janvier 2005
Réalisé par Pifoman
Url site

http://membres.lycos.fr/pifoman/pif.php

Url redirection http://www.geocities.com/mitonnes/pif.htm

 

COMMENTAIRES SUR LE PROGRAMME

 

       PhotoImpact est un éditeur d'images pour l'édition d'images et la création de pages Web. Editez vos images et placez des graphiques Web professionnels en temps réel. Ensuite optimisez-les et sortez-les en tant que pages Web complètes.

       PhotoImpact fournit tous les outils nécessaires à la création de graphiques Web convaincants et de pages HTML complètes.

   

LIMITATIONS

 

    1 - 30 jours d'utilisation maximum.
    2 - Image du photogragraphe au démarrage.
    3 - Nag-screen (écran de harcèlement) au démarrage
    4 - Mot TRIAL dans le menu A propos de.

 

LES OUTILS

 

w32dasm 8.9
Pour désassembler le progamme (transformation en langage d'assemblage)
Pour trouver les string data references nécessaires pour élaborer le crack.

WinHex 10.2
Pour éditer l'exécutable et modifier certains octets dans le but de la cracker.
On cherche l'offset impliqué en regardant la barre de statut de w32dasm 8.9.
On utilise ce même offset dans WinHex pour effectuer physiquement la modification.

Softice
Débugger d'application qui permet de définir des points d'arrêt
sur des adresses ou des API chargées par le programme.

Regmon 6.0.6
Logiciel qui enregistre tous les échanges entre
un programme et le registre de windows.

Filemon 6.0.7
Logiciel qui enregistre tous les échanges entre
un programme et les fichiers sur le disque dur.

 

ASSEMBLEUR

 

Offset
Déplacement depuis le début de la zone de code d'un programme.

EB
   Code hexadécimal correspondant en assembleur à un saut inconditionnel (jmp).
         On saute tout le temps vers l'adresse écrite sous forme hexadécimale qui suit le EB

90
 Code hexadécimal qui se traduit en assembleur par "ne rien faire" (= nop = No OPeration). 

 

LE CRACK

 

Détail des modifications de u32Cfg.dll

Octet Adresse  Offset Original Cracké Effet
1

4EB07DAD

7DAD

F4 00

Retrait du time-limit de 30 jours

2

4EB07DBD

7DBD

E4

00

3

4EB07E3E

7E3E

66

00

4

4EB07E4F

7E4F

55

00

5

4EB021AA

21AA

0D

00

Suppression du logo du photographe au démarrage

6

4EB07E7B

7E7B

75

EB

Retrait du nag-screen à l'ouverture

 

Détail des modifications de u32Prod.dll

Octet Adresse  Offset Original Cracké Effet

1

?

B7A8E

54

00

On efface le TRIAL dans le menu A propos de.

 

PRESENTATION DU DEBUGGER SOFTICE

 

        Avant de commencer à étudier les protections de Ulead Photoimpact 8.5 fr je vais vous faire une présentation des fonctionnalités du célèbre débugger softice. Ce qu'il faut savoir c'est que de ce logiciel en quelques lignes :

       -> C'est un outil très puissant et très utilisé par les crackers.
       -> Il complète avantageusement le désassemblage d'un logiciel dans w32dasm.
       -> Il n'est pas simple à manipuler pour une personne qui débute en cracking.
       -> Son interface en mode ligne de commande ne ressemble pas aux logiciels classiques (pas de menus).
       -> Il travaille en tâche de fond sous windows et ne surgit que sur demande en suspendant l'exécution de windows.
       -> Il existe en plusieurs versions pour tous les systèmes windows (dernière version : la 4.05 pour XP).

 

          1/Installation sous windows XP

        Il faut récupérer la version 4.05 pour les systèmes windows NT (5.94 Mo) qui est compatible avec windows XP sur le site et procéder comme suit pour l'installation.

       -> Entrez votre nom et votre compagnie avec un numéro de série (par exemple 5109-0122DF-FF).
       -> Choisissez le répertoire d'intallation
       -> Choisissez le pilote video adapté à votre carte graphique (par exemple NVIDIA) sinon utilisez le Standard VGA.
       -> Choisissez le mode de démarrage automatic dans l'écran suivant.
       -> Choisissez le type de souris connectée à votre PC (port COM1,COM2 ou PS/2 compatible).
       -> Cochez l'option Register later.
       -> Validez par OK l'écran qui nous demande "translate the kernel debugger extensions for use by Softice" ?
       -> Validez l'option "No I will restart my computer later".

       -> Dans le fichier de configuration de Softice C:\WINDOWS\system32\drivers\Winice.dat

               * Remplacez la ligne INIT actuelle par INIT="X;CODE ON;DATA;R;" pour demander à chaque lancement de softice l'affichage de la zone de commande,du code assembleur, de la zone de données et de la zone de registres.
               * Enlevez  les ; devant ces lignes pour pouvoir mettre des breakpoints (points d'arrêt) sur ces fichiers dll                  EXP=\SystemRoot\System32\kernel32.dll et EXP=\SystemRoot\System32\user32.dll

       -> Installer le pach pour softice XP en copiant les 3 fichiers de nticexp.zip qui sont ntice.sys, siwsym.sys, siwvid.sys dans C:\windows\system32\drivers.
       -> Installer le clavier français pour softice XP en copiant les 3 fichiers de clavier_fr_softice_xp.zip qui sont clavier fr.bat, keymap.exe dans C:\windows\system32\drivers puis double-cliquez sur clavier fr.bat.
       -> Redémarrez votre machine.

 

           2/Les commandes de softice

        Elles sont consignées dans le fichier C:\Program Files\NuMega\SoftIceNT\SoftICE Command Reference.pdf. Les plus utiles pour le debugging seront les suivantes :

       -> CTRL D  : passer de windows à softice et vice versa
       ->
F12 : pour sortir d'une dll et revenir à la procédure appelante dans le programme
       -> F10 : exécution pas à pas du programme sans entrer dans les call mais en les exécutant quand même.
       -> F8   : exécution pas à pas du programme en entrant dans les call.
       -> bpx getactivewindow : (breakpoint on execution) mettre un point d'arrêt sur l'API User32.getactivewindow.
       -> bpm 00401234 : (breakpoint on memory access) mettre un point d'arrêt en mémoire sur l'adresse 00401234
       -> e 00401234 : (edit) afficher le contenu de l'adresse 00401234 dans la zone de données.
       -> s 0 L 00601234 'pifoman' : (search) chercher dans la mémoire la chaîne pifoman entre les adresses 0 et 00601234.
       -> help bpm   :  afficher l'aide pour un commande ici la commande bpm.

       Commandes liées à l'affichage de la fenêtre de softice :

       -> F4   : passer du debugger à l'écran de windows et vice versa.
       -> CTRL F1   : passer en plein écran dans softice.
       -> cls ou ALT F5  : nettoyer la zone de commande (en bas de la fenêtre).
       -> lines 30 :  fixer la hauteur de la fenêtre à 30 lignes.
       -> wr : (window registers) afficher la fenêtre des registres
       -> wc : (window command) afficher la zone de code.
       -> wd : (window data) afficher la zone de données

      Remarque : taper 2 fois la même commande d'affichage dans softice revient dans la plupart des cas à provoquer l'effet contraire (affichage -> masquage).

 

           3/L'interface de softice

 

EAX=00000001    EBX=00000001    ECX=0065C714    EDX=004CE1A8    ESI=010B2D83
EDI=010B648D    EBP=0065C60C    ESP=0065C600     EIP=00490765        o d
I s z a p C
CS=001B     DS=0023     SS=0023     ES=0023     FS=003B     GS=0000

-------------------------------------------------------------------------byte----------PROT----------(1)----

0010:00401234    70 69 66 6F 6D 61 6E 8B - E5 E5 E5 E5 E5 E5 E5 E5        pifoman.........
0010:00401244    00 00 00 00  00 00 00 00 -  00 00 00 00  00 00 00 00         ................
0010:00401254    00 00 00 00  00 00 00 00 -  00 00 00 00  00 00 00 00         ................

------------------------------------------------------------------------------------------------------PROT32---

001B:4EB05AEF    FF15B090B04E         Call [Kernel32!GetlocalTime]
001B:4EB05AF5    8B4C240C                  mov ecx, dword ptr [esp+0C]
001B:4EB05AF9    8B5C240E                  mov ebx, dword ptr [esp+0E]
001B:4EB05AFD   8BF1                           mov esi, ecx

(PASSIVE)-KTEB(81752880)-TID(0DC0)----------------------u32Cfg!.text+6CCC--------------

 :lines 30
 :

          Enter a comand (H for help)                                                                               Iedit

 

       L'interface de softice se décompose en 4 zones séparées pas des lignes vertes.De haut en bas on a

       -> La zone des registres (contrôle de l'affichage de cette zone par la commande wr).
       -> La zone de données (contrôle de l'affichage de cette zone par la commande wd).
       -> La zone de code hexadécimal et assembleur (contrôle de l'affichage de cette zone par la commande wc).
       -> La zone de saisie des commandes (les commandes sont saisies après le : par exemple lines 30)

       Remarques :
       -> On peut déplacer les zones les unes par rapport aux autres en faisant glisser les lignes vertes avec la souris.
       -> La ligne verte au dessus de la zone de saisie nous dit que l'on est dans la section .text du fichier u32Cfg à l'intérieur du processus de nom Iedit (zone bleu ciel).

 

ANALYSE  DU  PROGRAMME

 

        u32Cfg.dll

 

         Aujourd'hui on s'attaque à un logiciel très connu dans le monde de la retouche d'image.

         Comme d'habitude lorsque l'on commence le craquage d'un programme on commence par le désassembler et ensuite le débugger pour y repérer les failles qui nous serviront à élaborer par la suite le crack. Le désassembleur / débuggueur que j'ai l'habitude d'utiliser et dont on va se servir c'est w32dasm. Cette introduction faite nous pouvons commencer.

         On ouvre donc le logiciel Iedit.exe dans le désassembleur w32dasm par la commande Disassembler -> Open File to disassemble -> Iedit.exe. On s'attend comme d'habitude à trouver un listing de désassemblage avec un suite de lignes de code en assembleur.C'est le cas.Seulement on ne trouve pas de référence à des expressions du type evaluation, trial, registered ou enregistré quand on regarde les string data références en cliquant sur le Strn Ref.

         On va donc changer de technique en faisant appel à la bête noire de tous les programmeurs d'applications : Softice.

 

 

          1/Retirer le time limit

 

         Quand on lance Photoimpact 8.5 on voit apparaître un nag-screen nous disant que le logiciel est évaluable 30 jours.On réfléchit et on se dit que si le programme est capable de calculer la période d'évaluation restante c'est qu'il a dû au préalable récupérer la date courante du système puis la comparer à la date d'installation du programme. Pour cela sous windows les programmes ont en général recours à l'une des 3 API (Application Programming Interface) suivantes : Kernel32.GetLocalTime, Kernel32.GetSystemTime, Kernel32.GetFileTime. On va donc pour cela utiliser softice et mettre un point d'arrêt sur la première API à savoir Kernel32.GetLocalTime comme ça si le programme fait appel à cette fonction système softice va arrêter l'exécution du programme et nous l'indiquer.

         Pour poser le breakpoint (point d'arrêt) sur Kernel32.GetLocalTime on affiche softice par CTRL D puis dans la zone de saisie en bas de softice on écrit suivi de entrée la commande bpx GetLocalTime.Ensuite on repasse sous windows en faisant CTRL D et on double clique sur Iedit.exe pour lancer photoimpact.A ce moment là softice resurgit en nous affichant dans la zone de saisie "Break due to GetLocalTime".On annule alors tous les breakpoints posés avec la commande bc* (bc = breakpoints clear).On regarde ensuite la ligne verte au dessus de la zone de saisie.Elle affiche Kernel32!.text.Ca veut dire que l'on est dans la dll système Kernel32.dll.Nous c'est l'adresse d'appel de Kernel32.GetLocalTime qui nous intéresse (on veut savoir quel module de notre programme a appelé cette fonction).On fait alors F12 dans softice pour sortir de kernel32.dll et on arrive dans u32Cfg (la ligne verte en bas de softice affiche u32Cfg!.text).On en déduit que c'est le fichier u32Cfg qui est impliqué dans le time-limit.Si on fait une recherche de la chaîne u32Cfg dans le répertoire d'installation on trouve le fichier u32Cfg.dll.

         A partir de ce moment là on commence l'examen de la protection de 30 jours embarquée dans le logiciel.

         -> On avance la pendule de windows 30 jours por en expirer son utilisation.
         -> On efface le breakpoint posé dans softice en tapant dans softice bc* suivi de entrée.
         -> On désassemble une copie de u32Cfg.dll par exemple copie de u32Cfg.dll dans w32dasm par la commande Open File to disassemble -> copie de u32Cfg.dll et on fouille dans les string data référence par le bouton nommé Strn Ref dans la barre de bouton de w32dasm à la recherche d'une phrase qui nous parle d'expiration.On en trouve une "La période d'essai de %d jours a expiré. Veuillez effectuer".Un double-clic sur cette phrase nous mène à 2 endoits dans le code de copie de u32Cfg.dll :

 

         1 ière occurrence

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:4EB04AD5(C), :4EB04AE5(C), :4EB04B72(C)
 
:4EB04B838B4C2414 mov ecx, dword ptr [esp+14]
:4EB04B8751 push ecx
:4EB04B886A10 push 00000010
 
* Possible Reference to String Resource ID=22006: "La période d'essai de %d jours a expiré. Veuillez effectuer "
 
:4EB04B8A68F6550000 push 000055F6

          2 ième occurrence

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:4EB07DAB(C), :4EB07DBB(C), :4EB07E3D(C), :4EB07E4E(C)
 
:4EB07EA58D442438 lea eax, dword ptr [esp+38]
...
 
* Possible Reference to String Resource ID=22006: "La période d'essai de %d jours a expiré. Veuillez effectuer "
 
:4EB07EC668F6550000 push 000055F6

 

         Quelle est la l'occurence de "La période d'essai de %d jours a expiré. Veuillez effectuer" impliquée dans le time limit ? Pour le savoir il suffirait de mettre un point d'arrêt sur les adresses 4EB04B83 et 4EB07EA5.Cela donnerait dans softice (faites CTRL D pour l'afficher) les commandes suivantes (chacune suivie de entrée) :

         bpx 4EB04B83
         bpx 4EB07EA5

         Mais si on repasse sous windows avec CTRL D et qu'on lance Iedit.exe rien ne se passe.Softice devrait pourtant s'arrêter sur une des deux adresses.On regarde alors le fichier d'aide de softice C:\Program Files\NuMega\SoftIceNT\Using SoftICE.pdf  pour voir si l'on peut remédier au problème.A partir de la page 113 il nous est dit que dans certains cas, suivant le contexte d'exécution les bpx ne sont pas actifs mais on ne nous en dit pas plus sur la manière de les activer ! Rien non plus sur le net. C'est pas grave on va le faire manuellement en exécutant le programme ligne par ligne avec la touche F10 depuis l'appel à l'API Kernel32.GetLocalTime.Pourquoi simplement parceque le programme utilise d'abord l'API Kernel32.GetLocalTime avant d'afficher la phrase relative à l'expiration (ce qu'on cherche à craquer).

         On regarde dans softice la liste des points d'arrêt que l'on a posé en tapant la commande bl (bl=breakpoints list).Rien ne s'affiche (je suppose que vous n'avez pas tapé les 2 bpx).Nous n'avons donc posé aucun breakpoint (normal on les a tous effacés tout à l'heure avec la commande bc*).Donc on remet notre bpx GetLocalTime dans softice.On repasse sous windows avec CTRL D puis on lance Iedit.exe.A ce moment là softice réapparaît en nous affichant comme tout à l'heure dans la zone de saisie "Break due to GetLocalTime".On fait F12 pour sortir de Kernel32.dll et arriver dans u32Cfg.dll. Ensuite on appuie plusieurs fois sur F10 jusqu'à tomber sur l'une des 2 adresses 4EB04B83 et 4EB07EA5 (voir plus haut ; ce sont les adresses par où le programme doit passer pour afficher "La période d'essai de %d jours a expiré. Veuillez effectuer").Au bout de 66 pressions sur F10 vous arrivez à cette adresse :

         :4EB07DAB   0F84F4000000    je 4EB07EA5

         A partir de là si vous continez à faire des F10 le nag-screen s'affiche avec le message d'expiration.On en conclut que c'est la deuxième occurence de "La période d'essai de %d jours a expiré. Veuillez effectuer" qui est impliquée dans le time limit. Pour retirer le time limit il suffit d'annuler les sauts qui mènent à l'adresse 4EB07EA5. Il y en a 4 qui sont aux adresses 4EB07DAB, 4EB07DBB, 4EB07E3D, 4EB07E4E (regardez plus haut le listing de désassemblage de la 2 ième occurence où il y a marqué Referenced by).Ce que l'on doit faire c'est sélectionner dans copie de u32Cfg.dll désassemblé dans w32dasm chacune des lignes de code contenant l'adresse impliquée (par exemple 4EB07DAB) et relever dans la barre de tâche de w32dasm l'offset à droite de @offset. Puis ensuite on ouvre u32Cfg.dll dans winhex et on se positionne par la commande ALT G -> "offset trouvé" sur chacun des 4 offsets trouvés et on modifie le code hexadécimal (ici en rouge) par le nouveau code consigné dans le tableau ci-dessous :

         Adresse          Offset        Signification code hexadécimal / assembleur

         4EB07DAB    7DAB       0F84F4000000  je 4EB07EA5   devient   0F8400000000  je 4EB07DB1
         4EB07DBB    7DBB       0F84E4000000  je 4EB07EA5    devient   0F8400000000  je 4EB07DC1
         4EB07E3D     7E3D        7566                  jne 4EB07EA5  devient   7500                  jne 4EB07E3F
         4EB07E4E     7E4E         7455                  je 4EB07EA5    devient   7400                  je 4EB07E50

         On enregistre les modifications avec CTRL S et on relance Iedit.exe.Le logiciel n'expire plus malgré la pendule avancée de 30 jours.Le time-limit est donc retiré.

 

         Remarques:

         Si l'on repasse en version d'évaluation en annulant les changements qu'on vient de faire (fermez PhotoImpact et renommez copie de u32Cfg.dll en u32Cfg.dll) on constate que le programme reste expiré! A partir du moment où l'on dépasse les 30 jours d'évaluation le programme reste définitivement expiré.Pour le forcer à repasser en version d'évaluation 30 jours on fait appel au petit utilitaire Regmon 6.0.6 (188 ko) pour surveiller les échanges entre Iedit.exe et le registre de windows (le registre de windows que l'on édite avec regedit.exe dans démarrer -> exécuter -> regedit est une table contenant tous les paramétrages des applications installées sur votre système).Ce qu'il faut savoir c'est qu'un programme au démarrage examine en général certaines clef spécifiques dans le registre pour savoir comment il doit démarrer.Dans notre cas le programme va vérifier dans le registre si la version est expirée ou non et agir en conséquence.

         Démarrez Regmon et prenez comme filtre Iedit.exe puis lancez ensuite Iedit.exe et examinez les clefs du registre interrogées par notre application.Vous en avez plusieurs très intéressantes qui commencent par HKCU\CLSID.C'est dans cette clef que sont en général situés les marqueurs de temps pour les applications en mode shareware.Celle impliquée dans les 30 jours d'évaluation est celle-ci :

         HKCU\CLSIDHKCU\CLSID\{98A158C2-8F80-11D4-A54A-0000E88D2305}\Shell\Open

         A cet endroit vous avez une clef "InProcSysID" qui vaut "D999999-L999999".Si vous effacez l'identifiant de classe (en abrégé CLSID=CLasS IDentifier) à savoir {98A158C2-8F80-11D4-A54A-0000E88D2305}vous retrouvez vos 30 jours d'évaluation dans Photoimpact.Donc on l'efface.

         Si le logiciel ne repasse toujours pas en version d'évaluation 30 jours combinez ce que vous venez juste de faire sur {98A158C2-8F80-11D4-A54A-0000E88D2305}avec cette fois-ci un autre petit utilitaire : Filemon 6.0.7 (180 ko) avant de lancer Iedit.exe.Prenez comme précédemment le même filtre soit Iedit.exe et regardez dans la liste générée par Filemon les fichiers examinés par le programme Iedit.exe lors de son lancement.Vous en verrez un qui après vérification s'avère être impliqué dans la version d'évaluation 30 jours.Il s'agit de C:\WINDOWS\kpe.dat. L'effacer ne rétablit pas les 30 jours.Il suffit de lui enlever l'attribut caché (clic droit dessus -> propriétés -> caché) , l'éditer dans wordpad (démarrer -> exécuter -> wordpad) et de modifier les lignes BEGIN=2005017 en BEGIN=2005018 (2005018 = date d'aujourd'hui sur la pendule de windows = année courante suivie n° du jour dans l'année sur 3 chiffres = 18 janvier 2005; 2005017 = date d'installation de photoimpact) et USED=0000031 en USED=0000001 et le tour est joué !

         Attention : le logiciel vérifie la cohérence des données de kpe.dat.Si on a installé photoimpact le 18 janvier 2005 ie BEGIN=2005018 et USED!=0000001 => détection manipulation kpe.dat => logiciel  expiré. De même si la clé HKCU\CLSIDHKCU\CLSID\{98A158C2-8F80-11D4-A54A-0000E88D2305}n'existe pas et que USED!=0000001  => détection manipulation kpe.dat => logiciel expiré (en effet le logiciel ne peut pas avoir été utilisé USED!=00000001 et ne pas avoir de clé {98A158C2-8F80-11D4-A54A-0000E88D2305}.Ils se cassent bien la tête chez ulead pour pas grand chose ...

         On en conclut que pour repasser à tous les coups en version d'évaluation 30 jours il faut faire en même temps la suppression de la clef {98A158C2-8F80-11D4-A54A-0000E88D2305} dans le registre puis mettre dans kpe.dat en plus des 2 premières lignes existantes BEGIN=AJ (où A= année courante = 2005 et J = n° du jour dans l'année sur 3 chiffres dans l'année  = 018) et USED=0000001.Pour ceux qui n'ont toujours pas compris si on est le 1ier février 2005 (à la pendule de windows en bas à droite de votre écran) BEGIN=2005032 (31 jours en janvier + 1 en février = 32). Attention quand même aux pièges du style le 1ier mars 2004, BEGIN=2004061 (31 jours en janvier + 29 en février + 1 en mars = 61) : c'est une année bissextile de 366 jours ...

 

          2/Retirer l'image du photographe

 

         A chaque lancement du logiciel après un clic sur le bouton "Essayez davantage" du nag-screen on voit appaître l'image d'un photographe.A la longue cela devient ennuyeux.On va donc supprimer cette photo qui en plus ne sert à rien ! On garde la pendule de windows avancée de 30 jours et on modifie les octets trouvés dans le paragraphe 1/ pour que le logiciel n'expire plus.On revient au code désassemblé de copie de u32Cfg.dll dans w32dasm et on clique sur le bouton Exp Fn qui nous donne la liste des fonctions exportées.On en remarque une dont le nom est particulièrement significatif

         Exported fn(): ulcDispLogo - Ord:0008h

         En réfléchissant un peu on devine que ulcDispLogo c'est l'abbréviation de Ulead Create Display Logo (en français Ulead Créer l'affichage du Logo).Examinons le code de cette fonction

*Exported fn(): ulcDispLogo - Ord:0008h
...
:4EB0219FE80C2B0000 call 4EB04CB0
:4EB021A483C404 add esp, 00000004
:4EB021A785C0 test eax, eax
:4EB021A9750D jne 4EB021B8
...
:4EB021B5C20800 ret 0008
 
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:4EB021A9(C)
 
:4EB021B88BAC24EC020000 mov ebp, dword ptr [esp+000002EC]
...
 
* Reference To: u32Cfg.ulcGetInfo
 

 

         En 4EB021A9 on voit qu'un saut nous mène en 4EB021B8 et traverse u32Cfg.ulcGetInfo.Comment est ce que je sais ça ? Et bien il suffit de modifier le fichier de configuration de softice C:\WINDOWS\system32\drivers\Winice.dat ,de lui ajouter la ligne suivante EXP=C:\Program Files\Ulead Systems\Ulead PhotoImpact XL\u32Cfg.dll (sans mettre de point virgule devant) et de rédémarrer la machine. Cette action nous permettra de mettre ensuite un point d'arrêt directement sur la fonction ulcDispLogo dans softice.Une fois la machine redémarrée on passe sous softice par CTRL D puis on tape bpx ulcDispLogo suivi de entrée.On repasse sous windows avec CTRL D et on lance Iedit.exe. En appuyant plusieurs fois sur F10 (9 fois exactement) on voit arrivé en 4EB021A9 que le programme veut sauter vers 4EB021B8 (vous voyez le mot jump avec une flèche vers le bas à côté de cette ligne de code dans softice).

         Annulons le saut pour voir comment le programme se comporte en tapant dans la zone de saisie de softice r fl z (abbréviation de reverse flag zero) suivi de entrée.Le flag zero c'est un bit pour dire si on doit sauter ou pas.Le fait de taper r fl z tranforme notre ZF=0 en ZF=1 (ZF pour Zero Flag) et annule notre jne (les jne (jump if not equal to zero) ne sautent que si ZF=0 ie quand on obtenu un résultat != 0 dans la dernière instructions exécutée -> ici l'instruction asm test).En faisant F5 pour continuer l'exécution du programme on voit que le programme n'affiche plus le logo au démarrage.On en conclut que c'est bien ce saut qu'il faut annuler pour supprimer le logo.L'offset correspondant à l'adresse 4EB021A9 dans w32dasm est 21A9 (sélectionnez cette ligne dans w32dasm et regardez la barre de statut à droite de @offset).Ensuite par la commande ALT G -> 21A9 faites le changement suivant (ne changez que le code hexadécimal en rouge) dans u32Cfg.dll ouvert dans winhex :

         :4EB021A9 750D                    jne 4EB021B8
         remplacé par
         :4EB021A9 7500                    jne 4EB021AB

 

         Remarques:

         Vous vous demandez certainement très justement comment j'aurais fait pour trouver ce saut impliqué dans l'affichage du logo si je n'avais pas eu l'idée ni de regarder dans u32cfg.dll ni de chercher un nom de fonction explicite.Encore une fois softice nous aurait mis sur la voie.Avant de cliquer sur le bouton "Essayez davantage" une fois que vous avez lancé Iedit.exe vous passez sous softice par CTRL D et vous mettez un breakpoint sur l'API User32.createwindowExA en tapant cette commande suivie de entrée bpx createwindowExA.Ce qu'il savoir c'est que le logo même si elle ne se voit pas est affiché via une fenêtre windows et vous l'aurez compris l'API createwindowExA sert à créer des fenêtres.Une fois repassé sous windows avec CTRL D et que vous cliquez sur le bouton "Essayez davantage" de photoimpact , softice resurgit en nous disant qu'il a breaké sur createwindowExA.A ce moment là un F12 nous permet de savoir quel fichier a appelé User32.createwindowExA : c'est u32cfg.dll.Si on fait encore un F12 on tombe juste après l'adresse qui a appelé u32cfg.dll soit l'adresse 004F75A2 dans Iedit.exe.Voici ce que softice nous affiche après les deux F12 précédents :

         001B : 004F759D  E8F82D3500   call u32cfg!ulcDisplogo
         001B : 004F75A2  A3385E8F00   mov [008F5E38],eax

         Pour ceux qui n'ont pas compris ce que signifie le code asm à l'adresse 004F759D.Pour créer et afficher le logo le programme Iedit.exe a appelé (en anglais call) la fonction ulcDisplogo qui se trouve dans le fichier de nom u32cfg (c'est ce qui est écrit sous le code u32cfg!ulcDisplogo).La suite vous la connaissez c'est ce qu'on vient de dire avant la remarque de ce même paragraphe.

 

 

          3/Retirer le nag-screen

         

         Pourquoi ai-je fait cette digression sur le registre dans le pragraphe 1/ ? Parceque on va s'en servir maintenant ! Souvenez vous de ce que je viens de dire : le programme examine le registre pour savoir comment il doit démarrer.Eh bien nous on va poser dans softice un point d'arrêt sur l'API ADVAPI32.RegOpenKeyA.Cette API permet d'ouvrir une clef dans le registre de windows.

         Le pb c'est que cette advapi32.dll n'est pas enregistrée dans les exports du fichier de configuration de softice C:\WINDOWS\system32\drivers\Winice.dat.On fait comme tout à l'heure dans le 2/ en ajoutant dans Winice.dat la ligne suivante EXP=\SystemRoot\System32\advapi32.dll (sans mettre de point virgule devant) et en rédémarrant la machine.Une fois la machine redémarrée; comme tous les breakpoints posés précédemment ont été annulés par le redémarrage on n'a pas besoin de taper dans softice la commande bc* pour les retirer.On tape alors simplement sous softice bpx RegOpenKeyA et on lance Iedit.exe.Après une longue série de F12 (51 fois) dans softice vous arrivez dans u32Cfg.dll. Pourquoi est-ce que je sais d'avance que le programme va utiliser (plus précisément importer) la fonction RegOpenKeyA dans u32Cfg.dll ? Parceque dans le listing de désassemblage de u32Cfg.dll obtenu avec w32dasm vous avez 6 occurences de la clef du registre trouvée plus haut à savoir InProcSysID.

         Je reviens sur softice.Si vous tracez le code de u32Cfg.dll pas à pas (on dit encore ligne par ligne) avec des F10 (après la longue série de F12 précédente) vous arrivez sur la ligne d'adresse 4EB07E87.A ce moment là une pression sur F10 conduit à l'apparition du nag.

 

:4EB07E5AE881CEFFFF call 4EB04CE0
:4EB07E5F83C408 add esp, 00000008
:4EB07E6285C0 test eax, eax
:4EB07E64742F je 4EB07E95
:4EB07E66396C2454 cmp dword ptr [esp+54], ebp
:4EB07E6A7429 je 4EB07E95
:4EB07E6C39AC248C060000 cmp dword ptr [esp+0000068C], ebp
:4EB07E737520 jne 4EB07E95
:4EB07E75392D74C2B04E cmp dword ptr [4EB0C274], ebp
:4EB07E7B7518 jne 4EB07E95
:4EB07E7DC70574C2B04E01000000 mov dword ptr [4EB0C274], 00000001
:4EB07E87E874E3FFFF call 4EB06200

 

          On en conclut qu'il faut empêcher le programme d'arriver sur l'adresse 4EB07E87.Si vous regardez 2 lignes au dessus vous avez un saut en 4EB07E7B.Il suffit de le forcer pour supprimer le nag-screen.L'offset correspondant à l'adresse 4EB07E7B est 7E7B (sélectionnez cette ligne dans w32dasm et regardez la barre de statut à droite de @offset).Ensuite par la commande ALT G -> 7E7B faites le changement suivant (ne changez que le code hexadéimal en rouge) dans u32Cfg.dll ouvert dans winhex :

         :4EB07E7B 7518                    jne 4EB07E95
         remplacé par
         :4EB07E7B EB18                   jmp 4EB07E95

          Enregistrez les modifications dans u32Cfg.dll avec la commande CTRL S de winhex et redémarrez Iedit.exe.Et voila plus de nag-screen.

 

         Remarques:

        a/ Si vous descendez dans le call en 4EB07E87 (sélectionnez dans w32dasm la ligne d'adresse 4EB07E87 puis pressez la flèche droite du clavier) vous arrivez ici

 
* Referenced by a CALL at Address:
|:4EB07E87
 
...
 
* Reference To: USER32.GetActiveWindow, Ord:00DDh
 
:4EB06207FF15A091B04E Call dword ptr [4EB091A0]
:4EB0620D50 push eax
...
 
* Reference To: USER32.DialogBoxParamA, Ord:0093h
 
:4EB0621AFF154492B04E Call dword ptr [4EB09244]
:4EB06220C3 ret
 

          L'affichage du nag-screen est en fait provoqué par l'appel de l'API USER32.DialogBoxParamA.

         b/ On aurait très bien pu au lieu de mettre un breakpoint sur RegOpenKeyA en mettre un GetActiveWindow.A ce moment là softice aurait breaké sur GetActiveWindow et avec un F12 on serait arrivé à l'adresse 4EB0620D et il aurait suffit d'examiner u32Cfg.dll à cette adresse pour voir comment on est arrivé à cette adresse 4EB0620D .La référence à l'adresse 4EB07E87 en haut du listing du dessus nous aurait permis de trouver l'appel au nag.

 

 

          4/Retirer le mot TRIAL dans le menu A Propos de Photoimpact

 

         On regarde encore dans u32cfg.dll.On voit un nom de module importé de nom particulièrement significatif u32Prod.dll.La mention prod nous indique que très certainement ce fichier va contenir des informations sur le produit.En faisant une recherche de l'expression TRIAL avec CTRL F (option jeu de caractère unicode cochée) dans u32Prod.dll ouvert dans winhex on trouve une occurrence de cette expression offset B7A8E.Pour effacer le mot TRIAL du menu A propos de photoimpact il suffit de remplacer à l'offset B7A8E le code 54 correspondant à la lettre T de TRIAL par 00.Le code 00 indique en effet au programme que la fin de la chaîne est atteinte pour la lecture.

 

 

CONCLUSION

 

         Ce cours est mon premier du genre sur softice.D'ordinaire l'utilisation du désassembleur/débugger w32dasm suffit à conduire une analyse sur le programme en vue de le craquer.Ici w32dasm n'est pas très adapaté à une analyse de type cracking sur les string data references car ces dernières ne contiennent pas de mot-clef sur l'enregistrement du logiciel.

         Ce cours a été l'occasion pour moi de vous présenter softice, de décrire sa procédure d'installation sous windows XP qui n'est pas forcément naturelle et de décrire son interface graphique. Vous avez aussi appris dans ce cours à poser des points d'arrêt (commande bpx de softice) sur des fonctions système (on les appelle les API) par exemple Kernel32.GetLocalTime pour détecter l'endroit où est situé le time-limit de 30 jours, ADVAPI32.RegOpenKeyA pour surveiller les ouverture de clef dans le registre de windows et trouver l'adresse d'appel du nag-screen. Enfin vous avez assimilé grâce à ce cours la notion d'export dans le fichier de configuration de softiceWinice.dat qui nous permet de breaker sur des dll précises non ajoutées dans ce fichier initialament comme par exemple u32cfg.dll ou advapi32.dll.

         En conclusion les 2 outils indispensables pour un cracker sont dans cet ordre softice et w32dasm.Ils sont complémentaires et chacun d'eux travaillent sur des plans différents. Le premier travaille sur n'importe quel programme windows en cours d'exécution et le deuxième sur un programme spécifique.Bien qu'il soit difficile à appréhender Softice est un logiciel d'une efficacité redoutable à tel point que de nombreux programmeurs d'applications concients de sa puissance prévoient des routines de détection de softice et empêchent leur application de démarrer tant que softice est chargé en mémoire centrale.Avec de l'expérience et une bonne maîtrise de softice aucune protection même la plus élaborée ne vous resistera ... Ce qu'il faut retenir de softice c'est que c'est l'arme absolue du cracker et qu'on ne l'utilise que lorsque tous les autres logiciels de cracking ont échoués ...

 

Bonne nuit à tous.
Et à bientôt pour de nouveaux cours.
 



pifoman




Nombre de visites depuis le 19/01/2005