Crack in France
par pifoman

 
 

Ce cours est un reflet fidèle du cours intégré au crack de ma création de Winrar 3.50 fr.

 

INFOS SUR LE CRACK

 

Nom du progWinrar 3.50
Disponible surhttp://www.rarlab.com
Téléchargeablehttp://www.rarlab.com/rar/wrar350fr.exe
Date du progDimanche 28 août 2005
Date du crackMardi 9 août 2005
Réalisé parPifoman
Url site

http://pifoman.free.fr/pif.php

Url redirection

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

 

COMMENTAIRES SUR LE PROGRAMME

 

   WinRAR est un algorithme de compression de haute performance permettant des taux de compression meilleurs que ceux obtenus avec les outils d'archive de votre PC, surtout pour les fichiers exécutables, les bibliothèques d'objets, les fichiers texte de taille importante, …

  C'est un utilitaire de gestion de fichiers RAR et ZIP, il compresse les fichiers jusqu'à 30% de mieux que les archiveurs basés sur ZIP. Il n'a besoin d'aucun programme pour pouvoir soit compresser soit décompresser un fichier en format ZIP et permet également de réparer des fichiers ZIP endommagés. Vous pouvez aussi ouvrir et décompresser les archives au format ARJ, LZH, CAN ou ACE...

 

LIMITATIONS

 

    1 - Un nag-screen systématique nous invitant à nous enregistrer.

    2 - 3 fonctions désactivées :

  • "Activer la vérification d'authenticité"
    Menu Commandes -> Ajouter des fichiers à l'archive -> Général.
  • "Placer les erreurs dans le journal"
    Menu Options -> Configuration... 
  • "Effacer le contenu du disque de destination avant l'archivage"
    Menu Commandes -> Ajouter des fichiers à l'archive -> Sauvegarde.

    3 - Version d'évaluation ... dans Aide -> A propos de Winrar ...

 

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.

 

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 rar.exe

OctetAdresse OffsetOriginalCrackéEffet
1

00434808

33E08

53B0On enregistre le programme
2

00434809

33E09

5601

On enregistre le programme

3

0043480A

33E0A

57C3

On enregistre le programme

4

004E07A0

48DA0

00

70

On écrit le p du nom d'enregistrement pifoman

5

004E07A1

48DA1

00

69

On écrit le i du nom d'enregistrement pifoman

6

004E07A2

48DA2

00

66

On écrit le f du nom d'enregistrement pifoman

7

004E07A3

48DA3

00

6F

On écrit le o du nom d'enregistrement pifoman

8

004E07A4

48DA4

00

6D

On écrit le m du nom d'enregistrement pifoman

9

004E07A5

48DA5

00

61

On écrit le a du nom d'enregistrement pifoman

10

004E07A6

48DA6

00

6E

On écrit le n du nom d'enregistrement pifoman

11

004291B4

287B4

74

BA

Chargement du nom d'enregistrement

12

004291B5

287B5

1A

A0

Chargement du nom d'enregistrement

13

004291B6

287B6

8D

B3

Chargement du nom d'enregistrement

14

004291B7

287B7

54

45

Chargement du nom d'enregistrement

15

004291B8

287B8

24

00

Chargement du nom d'enregistrement

16

004291B9

287B9

34

90

Equilibrage du code

 

Détail des modifications winrar.exe

OctetAdresse OffsetOriginalCrackéEffet
1

0044B4BD

4AABD

1400On fait les changements suivants :
-> on met enregistré à dans a propos de winrar
-> version d'évaluation retiré dans le titre de winrar
-> les options du journal réactivées.

2

0044E670

4DC70

00

01

Fignolage.
-> on active toutes les options dans le menu commandes->ajouter des fichiers à l'archive
-> on supprime le nag-screen.
-> on passe en version enregistrée.

3

005195A0

D71A0

00

70

On écrit le p du nom d'enregistrement pifoman

4

005195A1

D71A1

00

69

On écrit le i du nom d'enregistrement pifoman

5

005195A2

D71A2

00

66

On écrit le f du nom d'enregistrement pifoman

6

005195A3

D71A3

00

6F

On écrit le o du nom d'enregistrement pifoman

7

005195A4

D71A4

00

6D

On écrit le m du nom d'enregistrement pifoman

8

005195A5

D71A5

00

61

On écrit le a du nom d'enregistrement pifoman

9

005195A6

D71A6

00

6E

On écrit le n du nom d'enregistrement pifoman

10

00445817

44E17

90

A0

Chargement du nom d'enregistrement

11

00445818

44E18

69

95

Chargement du nom d'enregistrement

12

00445819

44E19

4A

51

Chargement du nom d'enregistrement

 

ANALYSE  DU  PROGRAMME

 

      Rar.exe

 

             a/ Enregistrement de Rar.exe

        On ouvre rar.exe dans w32dasm. Dans w32dasm on inspecte les string data reference de rar.exe par ref->String Data References. On voit une chaîne intéressante registered to (en français enregistré à). C'est ce qu'on veut puisque cherche à atteindre le statut d'utilisateur enregistré dans rar.exe. On se place par CTRL S au début de la zone de code pour débuter la recherche de cette expression. On fait ensuite search -> find text -> registered to. On a une seule occurence (ça va être rapide). Voici le listing de désassemblage trouvé :

 

* Reference To: USER32.OemToCharA, Ord:0000h
 
:004291A8E8D34F0100Call 0043E180
:004291AD803DD03A440000cmp byte ptr [00443AD0], 00
:004291B4741Aje 004291D0
:004291B68D542434lea edx, dword ptr [esp+34]
 
* Possible Reference to String Resource ID=03014: "Registered to %s"

 

        L'instruction asm (assembleur) cmp byte ptr [00443AD0], 00 va comparer le contenu de l'adresse 00443AD0 à 00 pour voir si on est enregistré (00 pour non enregistré, 01 pour enregistré). On peut assimiler cette comparaison à une comparaison de type comparaison booléenne. On réfléchit et on se dit que le programme avant d'arriver ici a dû mettre cette information dans l'adresse 00443AD0. On va rechercher un début d'instruction asm du style mov byte ptr [00443AD0] qui met à jour le contenu du premier byte de l'adresse 00443AD0. Petite remarque les crochets en asm ça veut dire "contenu de". La recherche conduit à 1 seule occurence. On arrive ici

 

:00434E45E8BEF9FFFFcall 00434808
:00434E4AA2D03A4400mov byte ptr [00443AD0], al

 

        Le call fait la vérification du statut enregistré ou non en mettant dans le registre 8 bits noté al le résultat de ce statut. Comment je sais ça ? Eh bien il suffit de regarder l'instruction en 00434E4A. Cette instruction mov byte ptr [00443AD0], al veut dire mettre dans le contenu de l'adresse 00443AD0 la valeur du registre al (al étant un registre de taille 8 bits dans le micro-processeur intel). La valeur de al est calculée dans le call juste au dessus à l'adresse 00434E45. Nous le calcul on s'en fiche. Ce qu'on veut c'est al = 01 juste avant d'exécuter l'instruction asm en 00434E4A pour qu'on puisse être enregistré (ie empêcher le saut depuis 004291B4).

 

        On a donc 2 solutions possibles équivalentes (je privilégie la deuxième qui ne modifie que 3 octets au lieu de 5).

 

        Solution 1 : on annule l'appel à la routine de mise à jour de al en mettant directement à jour al à la valeur 01.

        Remplacez dans rar.exe ouvert dans winhex à l'offset 34445 (commande ALT G -> 34445) le code hexadécimal en rouge suivant.

        00434E45    E8BEF9FFFF   call 00434808
        remplacé par
        00434E45    B001                 mov al, 01
        00434E47    90                     nop
        00434E48    90                     nop
        00434E49    90                     nop

        Remarque 1 :  On ajoute 3 nop pour équilibrer le code asm.E8 BE F9 FF FF fait 5 octets tandis que B0 01 ne fait que 2 octets.
        Remarque 2 :  34445 c'est ce qui est marqué dans la barre de statut en bas dans w32dasm quand on sélectionne la ligne de code d'adresse 00434E45.

 

        Solution 2 : on entre dans le call en 00434E45 (flèche droite dans w32dasm sur l'adresse 00434E45), on met à jour al à 01 et on sort.

        Remplacez dans rar.exe ouvert dans winhex à l'offset 33E08 (commande ALT G -> 33E08) le code hexadécimal en rouge suivant.

        00434808     53             push ebx
        00434809     56             push esi
        0043480A    57             push edi
        remplacé par
        00434808    B001          mov al, 01
        0043480A   C3              ret

        Remarque 1 :  l'exécution du call 00434808 commence à l'adresse 00434808.
        Remarque 2 :  ret (= return = retour) termine le call 00434808 et continue en 00434E4A

 

        On enregistre (fermez w32dasm si winhex refuse d'enregistrer) et on lance rar.exe. Ca marche. On n'a plus de version shareware d'affiché. (même quand on fait dans une fenêtre de commande lancée par démarrer->exécuter->command)

        C:\Program Files\WinRAR 3.50>rar a toto.rar License.txt

 

             b/ Associer un nom à la licence de Rar.exe

        On peut aller plus loin dans l'enregistrement en assignant un nom (par exemple pifoman) à rar.exe l'enregistrement.

 

* Reference To: USER32.OemToCharA, Ord:0000h
 
:004291A8E8D34F0100Call 0043E180
:004291AD803DD03A440000cmp byte ptr [00443AD0], 00
:004291B4741Aje 004291D0
:004291B68D542434lea edx, dword ptr [esp+34]
 
* Possible Reference to String Resource ID=03014: "Registered to %s"

 

        On voit clairement que c'est le registre edx qui reçoit le nom d'enregistrement. Celui-ci est passé en paramètre à la fin de la chaîne "Registered to" avec la variable %s (le s de %s signifie string).Ce que nous avons à faire c'est juste remplacer le dword ptr [esp+34] par l'adresse qui pointera vers le premier octet de notre nom (le nom que j'ai choisi est pifoman).Comment faire ça?

        Fermons w32dasm et ouvrons rar.exe dans winhex et cherchons une suite de 00 (zone non utilisée par le programme qui termine une section de l'exécutable). On en trouve une par exemple à la fin du fichier à partir de l'offset 48DA0.On se positionne sur l'offset 48DA0 par la commande ALT G -> 48DA0 et on écrit alors notre nom pifoman.

        Pourquoi l'offset 48DA0 est-il intéressant pour écrire notre nom ?  Parceque premièrement il se situe vers la fin du fichier. Il nous laisse de la place pour écrire le nom d'enregistrement jusqu'au dernier octet du fichier qui est à l'offset 48DFF (ouvrez rar.exe dans winhex). 48DFF - 48DA0 + 1 = 60h = 96d. Cela fait donc 96 caractères au maximum que notre nom d'enregistrement peut contenir. Le deuxième avantage est que l'on peut dépasser ces 96 caractères et continuer à écrire notre nom au dela de l'offset 48DFF. Le crack le fait (écrire votre nom après /nom= dans le crack) mais rar.exe limite la lecture du nom à l'offset 48DFF.

        On revient à rar.exe désassemblé dans w32dasm.Comment transformer cet offset 48DA0 dans winhex en adresse dans w32dasm ? Car c'est d'une adresse qu'on a besoin pour remplacer le dword ptr [esp+34] plus haut. Regardez le détail des sections fournies par w32dasm :

 

         Disassembly of File: C:\Program Files\WinRAR 3.50\Rar.exe
        Code Offset = 00000600, Code Size = 0003D200
        Data Offset = 0003D800, Data Size = 00003E00

        Number of Objects = 0007 (dec), Imagebase = 00400000h

        Object01: .text    RVA: 00001000 Offset: 00000600 Size: 0003D200 Flags: 60000020
        Object02: .data   RVA: 0003F000 Offset: 0003D800 Size: 00003E00 Flags: C0000040
        Object03: .tls      RVA: 00051000 Offset: 00041600 Size: 00000200  Flags: C0000040
        Object04: .rdata  RVA: 00052000 Offset: 00041800 Size: 00000200  Flags: 50000040
        Object05: .idata   RVA: 00053000 Offset: 00041A00 Size: 00000E00 Flags: 40000040
        Object06: .edata  RVA: 00054000 Offset: 00042800 Size: 00000200  Flags: 40000040
        Object07: .rsrc    RVA: 00055000 Offset: 00042A00 Size: 00006400  Flags: 40000040

 

        Offset 00042A00 <= Offset 48DA0 implique que l'offset 48DA0 appartient à la section .rsrc.
        offset trouvé - offset début section + RVA début section + Imagebase = adresse cherchée
        48DA0 - 00042A00 + 00055000 + 400000 = 45B3A0.

        L'adresse équivalente à l'offset 48DA0 est donc 0045B3A0.Pour effectuer l'enregistrement à mon nom pifoman il suffit donc de remplacer à l'offset 287B4 dans winhex le code hexadécimal suivant en rouge :

 

        004291B4   741A                    je 004291D0
        004291B6   8D542434            lea edx, dword ptr [esp+34]

        remplacé par

        004291B4   BAA0B34500      mov edx, 0045B3A0
        004291B9   90                        nop

 

        On ajoute un nop (instruction ne rien faire) pour équilibrer le code. La suite 74 1A 8D 54 24 34 est composée de 6 octets tandis que la suite BA A0 B3 45 00 n'en contient que 5.

 

 

       Winrar.exe

 

             a/ Enregistrement de Winrar.exe

              Partie 1 : on va rechercher le statut d'utilisateur enregistré.

       On désassemble winrar.exe dans w32dasm par la commande Disassembler -> Open File to Disassemble. On inspecte ensuite les string data référence dans w32dasm comme d'habitude. On trouve une chaîne intéressante "registered to" (enregistré à en français). Cette chaîne signifie que l'on peut avoir accès à toutes les fonctions du programme si on arrive à être enregistré. C'est ce statut que l'on va chercher à atteindre. On se place par CTRL S au début de la zone de code du programme avant de lancer la recherche de l'expression. On effectue ensuite la recherche de registered to par search -> find text dans w32dasm. On trouve 3 occurences de registered to. 1 seule nous intéresse (c'est la première).

 

* Reference To: USER32.SetDlgItemTextA, Ord:0000h
 
:00445807E846200500Call 00497852
:0044580C803D946F4A0000cmp byte ptr [004A6F94], 00
:004458137445je 0044585A
:0044581556push esi
:00445816BE90694A00mov esi, 004A6990
:0044581B8DBD18F4FFFFlea edi, dword ptr [ebp+FFFFF418]
:00445821B981010000mov ecx, 00000181
:00445826F3repz
:00445827A5movsd
:004458285Epop esi
 
* Possible Reference to String Resource ID=00960: "Registered to"

 

        En 0044580C le programme compare le contenu de l'adresse 0044580C à 00. 00 signifie dans beaucoup de cas non enregistré (01 pour enregistré = true) si on a une instruction de comparaison (cmp en assembleur) qui la précède. C'est le cas ici. On réfléchit et on se dit que si le programme saute par dessus le registered (code je 0044585A après la comparaison) c'est que le contenu de l'adresse 004A6F94 (codée sur 1 byte = 1 octet) contient l'information qui dit enregistré ou pas. C'est la cas ici.

        Pour savoir où le programme va mettre l'information enregistré ou non dans l'adresse 004A6F94 on va faire une recherche sur une instruction assembleur mov byte ptr [004A6F94] qui veut dire move in the content of address 004A6F94 one byte on a value <=> déplacer dans le contenu de l'adresse 004A6F94 sur un octet une valeur (qui est notre statut enregistré ou non). On a 6 occurences. Pour savoir laquelle prendre on pose un bp (break point : point d'arrêt) sur tous les mov byte ptr [004A6F94] trouvés (on lance d'abord une session de debugging de winrar.exe dans w32dasm par CTRL L et on sélectionne chaque ligne trouvée sur laquelle on fait F2 suivi d'un F3 pour passer à l'occurence suivante). On démarre le programme avec le debugger avec F9. w32dasm break à 1 seul endroit.

 

:004417BEE8D19C0000call 0044B494
:004417C3A2946F4A00mov byte ptr [004A6F94], al

 

        On termine alors volontairement la session de debugging en faisant CTRL T dans w32dasm (T pour Terminate en anglais). On va entrer dans le call d'adresse 004417BE en relançant une nouvelle session de debugging en mettant un bp (avec F2) sur la ligne d'adresse 004417BE. Dès que w32dasm break sur 004417BE on fait F7 pour descendre dans le call 0044A284 suivi de plusieurs F8 pour exécuter le programme instruction par instruction sans entrer dans les call mais en les exécutant quand même. On arrive ici.

 

:0044B4BA84C0test al, al
:0044B4BC7414je 0044B4D2
:0044B4BEB001mov al, 01

 

        Le programme fait le test al, al et saute en 0044B4D2 (le saut c'est le debugger qui nous le dit avec un F8 sur 0044B4BC). On va donc faire l'opération inverse : on annule le saut en 0044B4BC en écrivant en hexadécimal dans une copie de winrar.exe ouverte dans winhex 7400 au lieu de 7414 à l'offset 4AABC (regardez la barre de statut de w32dasm quand la ligne d'adresse 0044B4BC est sélectionnée) pour que le programme saute en 0044B4BE et mette le byte 01 dans al ie pour qu'on soit enregistré. On ferme w32dasm et on enregistre les modifications puis on lance la copie de winrar.exe à la main (double clic dessus). On observe avec plaisir les changements:

        -> La barre de titre ne comporte plus de message "version d'évaluation"
        -> Dans le menu Menu Aide -> A propos de Winrar... est écrit Licence accordée à
        -> Les options concernant le journal dans le menu Options -> Configuration -> Général sont déverrouillées.

        On a bien travaillé mais c'est pas fini. En effet l'enregistrement est partiel. Le message d'invite à s'enregistrer est toujours là et les options dans Commandes -> Ajouter des fichiers à l'archive ne sont pas déverrouillées.

 

              Partie 2 : activation de 2 options désactivées dans le menu Commandes -> Ajouter des fichiers à l'archive.                                 -> Activer la vérification d'authenticité (menu général).
                    -> Effacer le contenu du disque de destination avant archivage (menu sauvegarde).

       On regarde les string data reference de winrar.exe dans w32dasm et on voit "Available in registered version only". C'est l'équivalent en anglais de la phrase "Disponible uniquement la version enregistrée" qui apparaît quand on clique sur une des 2 options désactivées. On fait une petite recherche dans w32dasm sur cette chaîne. 61 occurences. C'est beaucoup !! On va y aller à la méthode bourrin (celle qui marche à tous les coup mais qui est un peu contraignante). On met un bp (break point) sur la ligne de code qui succède chacune des 61 occurences (par exemple la ligne d'adresse 0043B35A pour le premier bp...) comme ça quand on va cocher une des 2 options désactivées w32dasm va s'arrêter et nous donner l'adresse de l'appel du message "Available in registered version only" (avant de mettre les bp avec F2 sur la ligne de code sélectionnée il faut faire CTRL L dans w32dasm). On démarre le programme par F9 et dans winrar.exe on coche l'option "activer la vérification d'authenticité" dans Commandes -> Ajouter des fichiers à l'archive. w32dasm break ici :

 

       00444B60   B86A000000        mov eax, 0000006A

 

       On termine la session de debbuging par CTRL T.On remonte un peu pour voir comment on est arrivé là.On y est arrivé par 4 appels

       * Referenced by a CALL at Addresses:
       :0044EEDA   , :00451208   , :00469A54   , :004745A9

       Allons en 0044EEDA (shift F12 -> 0044EEDA dans w32dasm).

 

* Reference To: USER32.IsDlgButtonChecked, Ord:0000h
 
:0044EECFE89A880400Call 0049776E
:0044EED485C0test eax, eax
:0044EED67411je 0044EEE9
:0044EED88BC3mov eax, ebx
:0044EEDAE8715CFFFFcall 00444B50
:0044EEDF6A00push 00000000
 
* Possible Ref to Menu: MAIN_MENU, Item: "Deselect group Gray -"

 

       Ce saut en 0044EED6 nous intéresse beaucoup. Il donne en effet la possibilité de survoler le call en 0044EEDA qui nous amène au message "Available in registered version only". Eh bien nous allons forcer le saut en 0044EED6 (offset 4E4D6).Remplacez dans une copie de winrar.exe ouverte dans winhex le code hexadécimal suivant en rouge.

 

       0044EED6   7411              je 0044EEE9
       remplacé par
       0044EED6   EB11             jmp 0044EEE9

 

       On lance la copie de winrar.exe une fois la modification faite. C'est bien l'option est cochable mais quand on choisit un autre onglet l'option redevient décochée. Le craquage est partiel. On réfléchit : je sais on n'arrête pas de réfléchir mais l'asm c'est que de la réflexion :). Si le programme décoche l'option dans mon dos quand je vais dans un autre onglet de ce menu c'est qu'il sait si je suis enregistré ou pas. Le programme a pris donc soin d'interroger la fameuse adresse du début ie 004A6F94 (celle de la partie 1). Bon voici ce qu'on va faire :

 

       a/ On ferme w32dasm

       b/ On fait les 2 modifications décrites dans les parties 1 et 2 sur winrar.exe (ouvert dans winhex.exe) à savoir
          00 à l'offset 4AABD et EB à l'offset 4E4D6.

       c/ On désassemble winrar.exe qu'on vient juste de modifier dans w32dasm et on met un bp sur les 6 occurences mov byte ptr [004A6F94] pour voir où le programme va faire la vérification du statut d'enregistrement quand on veut cocher les cases du menu Commandes -> Ajouter des fichiers à l'archive. Pour mettre ces bp voici comment procéder.

         -> On lance le debugger de w32dasm par CTRL L.
         -> CTRL S (raccourci pour Goto -> Go to code start)
         -> Search -> Find Text -> mov byte ptr [004A6F94]
         -> F2 sur la ligne trouvée
         -> F3 pour chercher le mov byte ptr [004A6F94] suivant
         -> Alternez F2 et F3 encore 5 fois.

         Voila les bp ont été mis sur les 6 instructions mov byte ptr [004A6F94].

         -> Démarrer le programme winrar dans le débugger avec F9
          -> Le debugger break (vous entendez un bing)
         -> On continue avec F9 puis F9 (F9 veut dire aussi continuer sans s'arrêter)
         -> Winrar est ensuite lancé dans une nouvelle fenêtre
         -> On ferme le nag s'il apparaît
         -> Allez dans le menu Commandes -> Ajouter des fichiers à l'archive.

         Eh là le debugger de w32dasm break sur cette adresse

         0044E66A   C605946F4A0000       mov byte ptr [004A6F94], 00

         Voila la solution est là on fait F9 et Winrar devient disponible. C'est donc le seul endroit où winrar s'arrête sur les 6 bp déposés (sur mov byte ptr [004A6F94]). On fait CTRL T pour terminer le processus winrar.exe et on ferme le debugger de w32dasm. Ce que nous allons faire c'est remplacer dans une copie de winrar ouverte dans winhex le code hexadécimal en rouge suivant :

         0044E66A   C605946F4A0000       mov byte ptr [004A6F94], 00
         remplacé par
         0044E66A   C605946F4A0001       mov byte ptr [004A6F94], 01

         Pour faire ça on utilise le code hexadécimal correspondant aux instructions asm au lieu d'utiliser l'offset comme on fait à chaque fois (c'est une autre méthode valide à condition de prendre suffisament d'octets :)). On remplace avec CTRL ALT H dans winhex la séquence d'octets C605946F4A0000 par C605946F4A0001 (01 = enregistré).

         On lance winrar.exe. Toutes les protections sont retirées. On est totalement enregistré (ça implique que toutes les options sont cochables et le nag-screen a aussi disparu).

 

             b/ Associer un nom à la licence de Winrar.exe

            On peut aller plus loin dans l'enregistrement en assignant un nom pour l'enregistrement.

 

* Reference To: USER32.SetDlgItemTextA, Ord:0000h
 
:00445807E846200500Call 00497852
:0044580C803D946F4A0000cmp byte ptr [004A6F94], 00
:004458137445je 0044585A
:0044581556push esi
:00445816BE90694A00mov esi, 004A6990
:0044581B8DBD18F4FFFFlea edi, dword ptr [ebp+FFFFF418]
:00445821B981010000mov ecx, 00000181
:00445826F3repz
:00445827A5movsd
:004458285Epop esi
 
* Possible Reference to String Resource ID=00960: "Registered to"

 

        On voit que c'est le registre esi qui reçoit le nom d'enregistrement (on dépile avec l'instruction asm pop esi une valeur de la pile en la mettant dans esi en 00445828 juste avant le "Registered to"). La valeur de esi sera accolée derrière la chaîne "Registered to".Ce que nous avons à faire c'est juste remplacer le 004A6990 par l'adresse qui pointera vers le premier octet de notre nom (le nom que j'ai choisi est pifoman).Comment faire ça ?

        Fermons w32dasm et ouvrons winrar.exe dans winhex et cherchons une suite de 00 (zone non utilisée par le programme qui termine une section de l'exécutable). On en trouve une par exemple à la fin du fichier à partir de l'offset D71A0.On se positionne sur l'offset D71A0 par la commande ALT G -> D71A0 et on écrit alors notre nom pifoman.

        On revient à winrar.exe désassemblé dans w32dasm.Comment transformer cet offset D71A0 en adresse ? Car c'est d'une adresse qu'on a besoin pour remplacer le 004A6990 plus haut. Regardez le détail des sections fourni par w32dasm :

 

        Disassembly of File: C:\Program Files\WinRAR 3.50\WinRAR2.exe
        Code Offset = 00000600, Code Size = 00096A00
        Data Offset = 00097000, Data Size = 0000CE00

        Number of Objects = 0007 (dec), Imagebase = 00400000h

        Object01: .text    RVA: 00001000 Offset: 00000600 Size: 00096A00 Flags: 60000020
        Object02: .data   RVA: 00098000 Offset: 00097000 Size: 0000CE00 Flags: C0000040
        Object03: .tls      RVA: 000E3000 Offset: 000A3E00 Size: 00000200 Flags: C0000040
        Object04: .rdata  RVA: 000E4000 Offset: 000A4000 Size: 00000200 Flags: 50000040
        Object05: .idata  RVA: 000E5000 Offset: 000A4200 Size: 00002800  Flags: 40000040
        Object06: .edata RVA: 000E8000 Offset: 000A6A00 Size: 00000200 Flags: 40000040
        Object07: .rsrc    RVA: 000E9000 Offset: 000A6C00 Size: 00030600 Flags: 40000040

 

        Offset 000A6C00 <= offset D71A0 implique que l'offset D71A0 appartient à la section .rsrc.
        offset trouvé - offset début section + RVA début section + Imagebase = adresse cherchée
        D71A0 - 000A6C00 + 000E9000 + 400000 = 005195A0.

        L'adresse équivalente à l'offset D71A0 est donc 005195A0.Pour effectuer l'enregistrement à mon nom pifoman il suffit donc de remplacer à l'offset 44E16 dans winhex le code hexadécimal suivant en rouge :

 

        00445816   BE90694A00          mov esi, 004A6990
        remplacé par
        00445816   BEA0955100          mov esi, 005195A0

 

 

CONCLUSION

 

         Ce cours vous appris à manipuler le débugger fourni avec le désassembleur w32dam en mettant des point d'arrêt sur winrar. Ces points d'arrêt issus de l'étude des string data reférences permettent de localiser l'endroit dans le programme où se fait la vérification du statut d'utilisateur enregistré.C'est ce statut privilégié que nous avons cherché à atteindre pour réactiver des options verrouillées, bloquer un nag-screen et refaire le menu Aide -> A propos de winrar ... A la suite de cette étude avec w32dasm vous avez appris à patcher un exécutable avec winhex en écrivant à des offsets précis du code hexadécimal.Ce code n'est que la traduction d'un code assembleur modifié.Vous avez aussi appris à manipuler des adresses pour enregistrer le logiciel à votre nom en faisant des calculs sur les sections.

 

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



pifoman




Nombre de visites depuis le 30/08/2005