Crack in France
par pifoman

 
 

Ce cours est un reflet fidèle du cours intégré au crack de ma création de ultralingua 4.4.8 fr

 

INFOS SUR LE CRACK

 

Nom du progUltralingua 4.4.8
Disponible surhttp://www.ultralingua.com/fr
Téléchargeablehttp://www2.ultralingua.com/windows/ulef_win.exe
Date du progDimanche 29 février2004
Date du crackMercredi 16 septembre 2004
Réalisé parPifoman
Url site

http://tresordeguerre.free.fr

Url redirectionhttp://www.geocities.com/mitonnes

 

COMMENTAIRES SUR LE PROGRAMME

 

    Ultralingua est une série de dictionnaires de traduction mulitlingue.Il permettent de traduire des mots ou expressions venant de l'anglais, de l'espagnol,de l'italien,duportugais, de l'allemand , du latin et de l'espéranto.Il est composé de modules bilingues et monolingues,de conjugateurs automatiques. Il est disponible en version Mac, Windows, Palm, Pocket PC avec des centaines de milliers d'entrées et effectue la traduction de blocs de texte.Il dispose également d'un module de grammaire et orthographe pour chacune des langues.
 

 

LIMITATIONS

 

    1 - Message"0 jours restants" dans un nag-screen

    2 - Case à cocher "Afficher cet écran au lancement"incochable (quand la protection 1 est enlevée).

    3 - Time-limit de 20 jours (20 jours n'est pas une durée mais le nombre de jours différents pendant lesquels vous pouvez lancer le programme).

 

LES OUTILS

 

Windasm 8.9
Pour désassembler le progamme (transformation en langage d'assemblage) et 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 trouvé dans Windasm 8.9 impliqué dans la protection et 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 un endroit du code.

90
      Code hexadécimal correspondant en assembleur à une instruction à rien (= nop = No OPeration). 

 

LE CRACK

 

         Détail des modifications ultralingua.exe

OctetAdresse OffsetOriginalCrackéEffet
100456B7456B744800On affiche"enregistré" dans le nag-screen.
200459F3659F361100L'option"Afficher cet écran au lancement" estcochable (nag).

3

0044489E4489E7CEBOn retirele time-limit.

 

ANALYSE  DU  PROGRAMME

 

        Ultralingua.exe

 

            Avant propos

           Onva s'attaquer aujourd'hui au dictionnaire français anglais de lasociété ultralingua. Avant de commencer je voudrais faire un petitrappel sur le désassemblage de ultralingua par windasm. Lorsque l'on désassemble le programme et qu'on regarde les string data reference on voit qu'une chaine "registered" est présente. Le programme peut donc être passéde la version "non enregistrée" à la version "enregistrée". On s'en saurait douté car il y a possibilité de saisir une clef d'enregistrement. Mais il faut savoir que dans certains programmes cette chaîne existe sans possibilité de saisir une clef comme winzip 8.1 (fr) ou winrar 3.40 (fr) et donc que le programme peut être enregistré même s'il n'en a pas l'air.Dans mon cours surle craquage de Ultralingua 4.4.8 onva s'appuyer sur la présence de cette chaîne "registered".

 

           Octet1

          Notre but   : afficher "enregistré" dans le nag à la place du nombre de jours restants pour l'évaluation ("days remaining" en anglais).On cherche dans windasm la string data reference "registered" avec search->find text. On arrive ici (1 seule occurence :))

 

:00456B6F837DD4FFcmp dword ptr [ebp-2C], FFFFFFFF
:00456B737548jne 00456BBD
:00456B756A00push 00000000
 
* Possible Reference to String Resource ID=12270: "Registered"
...
 
:00456BBD8B550Cmov edx, dword ptr [ebp+0C]
:00456BC0C60200mov byte ptr [edx], 00
:00456BC36A00push 00000000
 
* Possible Reference to String Resource ID=12810: "<days remaining>"
:00456BC5680A320000push 0000320A

 

          Explication : 00456B737548jne 00456BBD -> àcette adresse le programme saute par dessus "registered" et nous envoie en 00456BBD juste au dessus * Possible Reference to String Resource ID=12810: "<days remaining>".

          Solution     : annuler le saut en 00456B73 en sautant parexemple à l'adresse de l'instruction suivante 00456B75 ce qui s'écrit en asm jne 00 (en hexa cela donne 75 48 remplacé par 75 00).

 

           Octet2

          Notre but   : valider le cochage de l'option "Afficher cet écran au lancement" dans le nag(une fois l'octet 1 modifié).Ce cochage nous permet de fermer le nag en cochant cette case ou bien par la suitele remettre si on a envie. On regarde les string data references dans windasm. Une chaîne nommée "no reminder" est présente. C'est ce qu'on cherche. No reminder = "pas de rappel" en français. On fait avec search->find text->no reminder. On arrive ici (1 seule occurence :))

 

:00459F2A8B4DF4mov ecx, dword ptr [ebp-0C]
:00459F2D81E1FF000000and ecx, 000000FF
:00459F3385C9test ecx, ecx
:00459F357411je 00459F48
 
* Possible Reference to String Resource ID=10147: "No Reminder"
...
 
:00459F48B001mov al, 01
:00459F4AEB02jmp 00459F4E

 

          Explication :  00459F357411je 00459F48-> c'est ce saut qu'il faut annuler pour entrer dans le "noreminder".

          Solution     : le debugger de windasm lancé sur ultralingua saute par dessus "No Reminder" et nous envoie en 00459F48. Solution annuler le saut en 00459F35 en sautant juste à l'adresse qui suit 00459F35 ce qui s'écrit en asm je 00 (en hexa cela donne 74 11 remplacé par 74 00: on remplace le byte (octet) 11par 00).

 

           Octet3

          Notre but   : retirer le time-limit (version évaluable à l'infini).Si on lance le programme après 20 jours d'évaluation les dictionnaires ne sont plus actifs dans la fenêtre qui suit la fenêtre de nag. C'est la protection la plus dure à retirer. On revient sur la string data reference "registered" avec search->find text. On arrive ici (1 seule occurence :))

 

:00456B64E8B9D9FEFFcall 00444522
:00456B6983C404add esp, 00000004
:00456B6C8945D4mov dword ptr [ebp-2C], eax
:00456B6F837DD4FFcmp dword ptr [ebp-2C], FFFFFFFF
:00456B737548jne 00456BBD
:00456B756A00push 00000000
* Possible Reference to String Resource ID=12270: "Registered"

 

          Explication :00456B64E8B9D9FEFFcall 00444522 -> on va decendre dans ce call qui est impliqué dans le time-limit (flèche droite dans windasm après avoir surligné cette ligne)

          Solution     :  le call en 00456B64 est intéressant car il nous enmène dans une zone de code où le programme fait appel à une API windows (enl'occurence l'API nommée ADVAPI32.dll qui se trouve dans votre répertoireC:\windows\system32). Celle-ci gère les accès et les interrogrationsau registre de windows. Dans notre cas le programme va interroger le registre pour voir si on est enregistré (auquel cas le time limit est annulé !).

* Reference To: ADVAPI32.RegOpenKeyExA, Ord:0172h      ->établi une connection au registre.
* Reference To: ADVAPI32.RegQueryValueExA, Ord:017Bh -> récupère la valeur associée à une clé du registre.
* Reference To: ADVAPI32.RegCloseKey, Ord:015Bh           ->ferme la connection au registre.

On va regarder après ces appels pour voir où la comparaison va se faire (le programme a besoin de savoir si on est enregistré ou non). On va utiliser le debugger de windasm. Faites les opérations suivantes pour le lancer sur ultralingua (vous devez avoir ouvert ultralingua avant dans windasm)

    ->CTRL L
    ->Search->find text "registered"
    -> Selectionner la ligne :00456B64E8B9D9FEFFcall 00444522
    -> Mettre un point d'arrêt (breakpoint en anglais) sur cette ligne avec F2. Un carré jaune apparaît devant la ligne.
    ->F9 pour démarrer le débuggage.
    -> Le débugger de windasm break (vous entendez un bing).
    -> Dans la petite fenêtre du debugger vous voyez que windasm est arrêté sur :00456B64E8B9D9FEFFcall 00444522 car l'exécution du programme a necessitél'exécution de cette ligne de code.
    ->On va entrer dans le call et l'exécuter ligne par ligne avec la touche F7
    -> Dans windasm (fenêtre principale) on arrive ici après cettepression sur F7 :0044452255push ebp
    ->Ensuite on fait F8 (exécuter les call sans descendre dedans) un certain nombre de fois (windasm colore en rouge leslignes exécutées dans la fenêtre principale).
    ->On regarde le code des lignes colorées en rouge.
    ->On passe sur les 3 API décrite plus haut.
    -> On continue en appuyant sur F8.
    ->On arrive ici :0044489A837D9014cmp dword ptr [ebp-70], 00000014

          Là on réfléchit. 00000014 c'est quoi ? C'est de l'héxadécimal. Mais encore ? En décimal ça vaut 20 (16x1+4). Ca ne vous rappelle rien ? Souvenez-vous la première fois que vous avez lancé ultralingua il nous mettait 20 jours pour l'évaluation. Vous avez compris ! C'est à cet endroit que le programme compare (instruction cmp) le contenu d'adresse base de pile (ebp=extra base pointer) translatée de 70 octets (ie déplacement de 70 par rapport à ebp) à 14. C'est donc à cet endroit que l'on va craquer. On continue à faire F8 (2 fois).Voicile code assembleur que vous avez dans votre fenêtre (sans les commentaires enblanc que j'ai rajoutés) :

 

            :0044489A837D9014cmp dword ptr [ebp-70], 00000014
                        ->Compare le contenu de ebp-70 à 14 (20 jours d'évaluation)
            :0044489E7C0Cjl 004448AC
                        ->Ne saute pas en 004448AC et passe àl'instruction suivante
            :004448A0C78568FEFFFF00000000mov dword ptr [ebp+FFFFFE68], 00000000
                        ->Met 00000000 à l'adresse ebp+FFFFFE68
            :004448AAEB0Ejmp 004448BA

 

          Le programme ne saute donc pas en004448AC et ilva doncmettre 00000000 dans le contenu de l'adresse ebp+FFFFFE68. On va empêcher ça en forçant le saut en 0044489E.En assembeur cela se traduit par jl 004448AC quiva devenirjmp 004448AC ; ouencore en hexa décimal cela donne 7C0C remplacé par EB0C.

          Rappel     : pour toute modificationphysique de l'exécutable on utilise un éditeur hexa décimal. Moic'est winhex 10.0. On cherche l'offset obtenu dans la barre de statutde windasm (tout en bas) pour l'instruction sélectionnée et on seplace sur cet offset dans winhex (ALT G). Et ensuite on remplacepar exemple 7C par EBdans winhex.

 

          On lance le programme et on voit que le programme est complètement craqué. :).

 

          Le mot de la faim : on a exactement le même schéma de protection avec les mêmes adresses et les mêmes string data références pour la version francais italien, français espagnol, français anglais médical, français définitions, français allemand.En fait chez ultralingua ils ont mis le même exécutable ultralingua.exe pour tous les dictionnaires !

 

Voila c'est fini !
Bonne soirée.

 



pifoman




Nombre de visites depuis le 14/10/2004