Vous êtes sur la page 1sur 3

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-déposer 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 lançons 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 opération 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é ;) !

Vous aimerez peut-être aussi