Page de mes tutoriels
UnNagMe n°1 Solution

Cliquez pour téléchargerCliquez sur l'icone pour télécharger le Dump et L'UnNagMe final.

Salut, aujourd'hui on s'attaque à un UnNagMe, réalisé par GoldoCrack. Rien de très compliqué, mais interessant pour ceux qui débute ou qui manquent de pratique dans le manual unpacking. Bon, je vous livre une solution parmis tant d'autres, en aucun cas je vous dirais que cette solution est la meilleure, loin de là. L'objectif, n'oublions pas est de supprimer les deux Nags Screen de cet UnNagMe.

Sommaire :


 Analyse préliminaire :
Accéder à cette sectionUnpacker l'UnNagMe :
 Supprime moi ces nags !!! :
 Analyse préliminaire :

GoldoCrack nous préviens que l'analyse avec PEiD et StudPe peut nous indiquer Armadillo 4.x, ce qui serait une erreur et totalement faux. Point de peur, on lance une analyse avec RDG Packer Detector v0.7.6.2017. Pour que l'analyse soit concluante pensez à cliquez sur M-B :

RDG nous indique PolyEnE. Vous pouvez utiliser aussi PEiD-0.95-20081103

Vous pouvez aussi insérer manuellement la signature dans le fichier inserdb.txt :


inserdb.txt

[PolyEnE 0.01+ => Lennart Hedlund]
signature = 50 6F 6C 79 45 6E 45 00 4D 65 73 73 61 67 65 42 6F 78 41 00 55 53 45 52 33 32 2E 64 6C 6C
ep_only = false

PolyEnE permet de compresser et de crypter un executable. Retenons simplement les fontions principales de PolyEne :

  • Code polymorphe (génération d'un loader différent à chaque fois),

  • Compression par QPC,

  • Ajout de Junk Code (en l'occurence des jump un peu partout);

A noter que l'ajout de Junk Code et du Scramble loader est optionnel, ainsi Goldo n'a pas ajouté de junkcode pour ne pas embrouiller les débutants en unpacking. PolyEnE est surtout efficace sur de petit executable (i.e qui a tendance à faire planter des exe plus gros ;-), de plus c'est un projet gratuit et abandonné depuis un petit moment. Donc ne vous attendez pas à quelque chose d'insurmontable ;-). Allez, on y va...

Remonter en haut Unpacker l'UnNagMe :

Aujourd'hui on va pas y aller par quatres chemins. On va tracer l'UnNagMe en freestyle, on verra bien ou ça nous mène. On drag'n'drop l'UnNagMe dans Olly. Vous arrivez ici :

Après le passage de PolyEnE il est générallement normal de tomber sur un PUSHAD pour la première instruction (observation personnelle). On se pose pas trop de question on lance direct le debugging (F9). olly se stoppe ici :

On va commencer à tracer en step over (F8), histoire d'éviter d'entrer dans les CALL si il y en a qui apparaisse. Passé le RETN on arrive ici :

On y voit pas grand chose. On va forcer Olly à analyser la section de code en faisant CTRL+A, et là magique vous obtenez ça :

Le code complètement décrypté du log apparait. On voit que le JMP va en 00401010 (juste en dessous quoi). On est si prêt du but, on va donc tenter de s'approcher le plus près possible de la première MessageBox avant de dumper. Comme auparavant on trace en Step Over (F8), on JMP, puis on passe le 1er CALL puis le 2nd. Et on arrive sur la 1ère instruction de l'API MessageBoxA (qui affiche la 1ere fenêtre du log) :

Ok, on se fait un petit dump avec OllyScript [PolyEnE 0.01+.txt] inclu dans le pack OllyScripts_pack.zip si vous ne l'avez pas.

On remplace l'ancienne valeur de l'OEP par l'EIP (offset en cours, i.e 00401036), et on laisse la CheckBox Rebuild import cochée pour que Olly nous reconstruise automatiquement l'IAT (on a commencé en freestyle, on va finir en freestyle, pas besoin de ImpREC ;-). Une fois le dump enregistré, vous pouvez le lancer. Il est fonctionnel.


Remonter en haut Supprime moi ces nags !!! :

Lancez le dump fonctionnel sous Olly :

Vous voyez les 3 MessageBox qui se chevauchent. Bon, à partir de là, vu qu'aucune contrainte n'a été spécifiée;, il y a environ 36 000 façon différentes de faire pour que seule la 2ème Form apparaisse. Je vous fais un exemple, pas très subtil je vous l'accorde, mais qui marche impec :

Je JMP d'abord en 00401049 pour sauter la 1ere MessageBox et pour afficher directement la 2ème. Une fois la deuxième affichée je refais un JMP en 0040106F pour sauter vers la 2ème MessageBox et pour attérir sur l'API ExitProcess qui permet de quitter le programme. Je note le code hexa modifié :

Offset

Code Hexa Avant

Code Hexa Après

004010366A10EB11
0040105C6A31EB11

On passe sous un éditeur hexadécimal (Hex Workshop dans mon cas) et on modifie les octets correspondants :

On enregistre les modifications et voilà. Vous avez vaincue l''UnNagMe, les 2 nags ont disparue et seule la 2ème fenêtre s'affiche.

Allez ciao, et à la prochaine dans un prochain tuto 1

Je veux remonter !!

Des questions ? direction le forum

(`'·.¸(`'·.¸*¤*¤*¤*¸.·'´)¸.·'´)
«´¨`·..¤:BUSHIDO:¤..·´¨`»
(¸.·'´(¸.·'´*¤*¤*¤*`'·.¸)`'·.¸)

La connaissance est la seule chose qui s'accroit lorsqu'on la partage
[Sacha Boudjema]

Copyright (C)- xtx Team (2021)

Valid XHTML 1.1 CSS Valide !