Cours n°1 - Adieu YouNAG

       

        Bienvenue dans la cité du crack! ;)

        J'utiliserai au début des crackmes, c'est-à-dire des programmes prévus exclusivement pour être crackés. Cela évite les problèmes de droits d'auteurs et permet de cibler plus facilement la protection ;) .

        Ce dont vous avez besoin : Olly, PEID, LordPE (prenez la version deluxe par yoda + mise à jour) et le crackme : UnNagMe1

 

        Certains programmes utilisent comme "protection" ce que l'on appelle un NAG screen, c'est à dire un message indésirable qui s'affiche par exemple au démarrage du programme pour nous rappeler de nous enregistrer ou d'autres choses désagréables du genre.

 

 

Analyse du logiciel

        Certaines étapes du cracking doivent devenir un réflexe. L'analyse du logiciel en est une.

        Nous ouvrons donc PEID, puis nous chargeons notre UnNagMe1 soit par glisser-deposer soit par le bouton ouvrir (1) .

        Si la signature d'un compilateur ou d'une protection est trouvée, PEID l'affichera (2)

       

        Dans notre cas PEID ne trouve rien. En fait, le programme est tellement petit qu'il ne trouve pas de signature connue.

        Ce n'est pas grave, prenons Olly et voyons de quoi il retourne.

        Lancez Olly, ouvrez l'UnNagMe en cliquant sur la petite icône représentant un dossier   

        Nous pouvons maintenant commencer l'observation.

 

Observation

        Si nous lancons l'exécutable, nous voyons que nous avons deux MessageBox. Une NAG et une OK. Il ne faut donc garder que la 2eme.

Analyse du code

       

        Grâce à Olly, nous voyons directement les appels aux deux MessageBox.

        MessageBox est une API Windows qui permet d'afficher une petite fenêtre préfabriquée pour afficher des messages d'informations comme un message d'erreur par exemple.       

        Voici la définition de l'API MessageBox (vous pouvez aller voir vous-même dans l'API-Guide ou le W32 SDK Reference pour plus d'infos)

        int MessageBox(
                                    HWND             hWnd,             // handle de la fenetre propriétaire
                                    LPCTSTR       lpText,            // adresse du texte de la message box
                                    LPCTSTR       lpCaption,     // adresse du titre de la message box
                                    UINT                uType            // style de la message box
                                    );

        En asm, les paramètres sont passés à l'envers. Retenez bien cela car vous y aurez souvent affaire. Grâce à Olly, vous voyez bien à quoi correspondent ces paramètres.

 

Patching

        Pour ne pas afficher la première MessageBox (le NAG) plusieures solutions s'offrent à nous :

        ¤ Nopper le CALL de la première MessageBox

            Pour cela, cliquez sur la ligne du CALL en 40100E, ensuite tapez "nop" (qui signifie no operation en asm, c'est à dire on ne fait rien!), vérifiez que la case "Fill with NOP's" est bien cochée(cette case sert à remplir les bytes qui resteraient avec des NOPs) et cliquez sur "Assemble". En noppant le CALL (en le remplaçant par des NOP si vous préférez ;) ) , on n'appelle plus la fonction pour afficher la MessageBox et donc elle ne s'affiche plus. Cette solution n'est pas très élégante vu que les PUSHs des paramètres de la MessageBox sont toujours dans la pile et ne seront pas dépilés. Dans un programme comme celui-ci ça n'aura pas de conséquence mais dans un programme un peu plus important cela pourrait être désastreux, imaginez qu'on ait poussé quelque chose dans la pile pour le récupérer après, on ne va plus récupérer notre valeur mais le dernier paramètre de la MessageBox! Il faut donc nopper les 4 PUSHs de paramètres(le style, le titre, le message et le propriétaire de la messagebox) si on ne veut pas avoir de problèmes.

        ¤ Sauter à la bonne MessageBox

            A l'EP (Entry Point, endroit où démarre le programme - ici en 401000), plutot que d'afficher le NAG, on va sauter directement à la bonne MessageBox. Mais attention, la deuxième MessageBox commence avec son premier paramètre en 401013. Nous allons donc écrire JMP 401013 en 401000 (L'EP). Nous écrasons ainsi des données mais ce n'est pas grave puisqu'elles ne serviront plus. Au final nous avons ceci(en rouge ce qui a été modifié) :

            Si vous voulez enregistrer les changements (Olly modifie en mémoire seulement) : clic droit > Copy to executable>All modifications>Copy All. Une nouvelle fenêtre s'ouvre, fermez-la et enregistrez.

        ¤ Modifier l'EP

            C'est pour moi la meilleure méthode. Si on dit au programme de démarrer non plus en 401000 mais en 401013, il n'affichera plus le NAG.

            Pour faire cela, je préfère utiliser LordPE qu'un éditeur hexa, il y a moins de risques de se tromper.

            Pensez à fermer Olly et tous les programmes qui pourraient utiliser l'UnNagMe sinon vous ne pourrez pas le modifier.

            On lance LordPE, on clique sur PE Editor et on choisit notre UnNagMe.

            LordPE nous affiche une quantité d'informations sur l'exe mais nous n'allons ici nous intéresser qu'aux deux premières : EntryPoint et ImageBase. Notre EP dans le programme était de 401000 ce qui est en fait EntryPoint+ImageBase. Nous voulons démarrer en 401013 donc il suffit de changer la valeur 1000 de l'EntryPoint en 1013. Cliquez sur Save et le tour est joué!

 

            Voilà vous pouvez être fier de vous, vous avez déjà pas mal travaillé ;) !

 

Bon crack,                  

Crisanar         

[ << Introduction à OllyDBG ] [ Cours n°2 >> ]

 

Dernière mise à jour le 13/08/2004 18:45