Titre

---------------------------------------- Chapitre IX - Les packers ----------------------------------------

ASPACK

 

Cible :

Goldo8

Outils nécessaires :

OllyDbg (by Oleh Yuschuk)
ChimpRec
Peid 0.95

(Tous les programmes et outils de ce tutoriel sont stockés dans le répertoire Pack).

 

1 - Observations

Il faut savoir qu'Aspack tout comme Upx n'est qu' un compresseur d'exécutable c'est à dire un programme qui réduit la taille d'un fichier qu'il soit .exe ou .dll. Certes il empêche de voir les strings datas, modifie le PE header et ajoute 2 sections nommées .adata et .aspack.

Regardons sa signature dans Peid (1) :

Peid

On remarque que l'Entry- Point se trouve à l'offset 5F001h et qu'il se trouve dans la section .aspack (2) alors qu'en général un fichier non compressé a son Entry-Point à l'offset 100h0 et se trouve dans la section .text.

Regardons un screenshot de la cible dans Peid :

Peid

 

2 - Même principe de base qu'Upx

Aspack tout comme Upx commence toujours par un PUSHAD et se termine toujours par un POPAD et ce y compris la dernière version du jour, la 2.29, que j'ai utilisée pour compresser la cible !
Il va pousser sur la pile le contenu de tous les registres afin d'exécuter la décompression du programme original en mémoire et remettre les registres comme ils étaient avec son POPAD une fois terminé pour ensuite utiliser un JMP vers l'Entry-Point de la cible décompressée en mémoire !
Sauf qu'à la différence d'Upx, Aspack PUSH l' adresse de l'OEP sur la pile directement suivi par un RET ce qui en programmation assembleur équivaut à un JMP !

Une petite image vaut mieux qu'un long discours ;-)

Olly

 

3 - Lançons la cible dans Ollydbg :

Toujours vous assurer avant de faire quoi que ce soit, que vous êtes bien dans le module exécutable et non ailleurs !

Si vous voulez ne plus être embêté avec ce genre de cible, il vous suffit d'aller dans Olly, onglet option/rubrique, debugging/start et vous cochez comme ci-dessous, vous faites OK, redémarrez Olly et vous tomberez directement sur le point d'entrée actuel de votre cible !

Olly

Lançons notre cible dans Olly et nous sommes enfin au bon endroit c'est à dire l'Entry-Point d'Aspack et son PUSHAD :

Olly

Vous remarquerez que j'ai coupé la vue de Olly afin de diminuer la taille en octets des images et de réduire la taille du tutoriel global car si tout le monde met des grands screen-shots, on va vite se retrouver avec un tutoriel de plusieurs centaines de méga à télécharger !

Sachant qu'Aspack comme UPX commence par un PUSHAD et se termine par un POPAD, cherchons ce fameux POPAD sauf qu'ici nous allons y arriver par une autre technique qui fonctionne pour quasi tout les packers basiques, même pour UPX, sissi :-)

Regardez l'image ci-dessus et plus précisément la valeur du registre ESP qui actuellement a pour valeur 18FF8Ch.

Nous savons que les instructions Pushad/Popad servent d'abord à sauver les registres tels qu'ils sont avant la décompression par le packer puis de les restaurer à leur état initial après que le packer ait terminé son job et donne la main à la cible .

Nous allons donc faire une seule instruction afin que Aspack modifie les registres, puis poser un Hardware breakpoint sur la valeur dword du registre ESP afin qu'une fois que le packer veuille les restaurer, Olly breake juste avant et que nous puissions arriver à l' OEP de la cible décompressée !

Ce qui, je le rappelle, est le but de ce tutoriel.... ben oui on ne sait jamais, des fois que vous auriez oublié !!!

Bon on appuie sur F7 et on constate que la valeur d'ESP a changé , on clique donc droit sur ESP puis sur follow in dump :

Olly

Nous voyons bien que nous sommes à l'adresse d'ESP dans la fenêtre de dump de Olly.

Nous allons poser un Hardware BreakPoint sur la valeur Dword de ESP, pour ce faire vous sélectionnez les 4 doubles 0 avec votre souris puis clic droit, breakpoint/hardware.

Olly

Vous laissez coché on Access R/W, Dword et la 3è empty, Olly y mettra la valeur automatiquement !

Olly

Clic sur OK !

Une fois le Hardware BreakPoint placé, vous avez l'offset qui est en rouge pour vous indiquer qu'il y a un breakpoint sur cette ligne !

Olly

Une fois posé lançons Olly en pressant F9 afin qu'il breake comme nous lui avons demandé !

Nous constatons 3 choses :

1) Olly s'est bien arrêté suite à notre breakpoint (1)
2) On est bien à la fin de la routine de décompression d'Aspack, voir le POPAD (2)
3) Le POPAD a bien remis la valeur d'ESP d'origine, voir valeur plus haut avant notre F7 (3)

Olly

Maintenant qu'Olly a breaké, appuyons sur F7 jusqu'au RETN + 1fois F7 et nous atterrissons à l'Entry-Point original ou OEP du programme décompressé !

Olly

Contrairement à mon tut avant celui-ci sur UPX, pour dumper et fixer les imports, je vais utiliser un seul programme qui fait tout au lieu de LordPe et ImpRec. Ce programme s'appelle ChimpRec !

Lançons le afin de sauver/dumper notre cible décompressée sur le disque dur !

1) Sélectionnons notre fichier cible (1)
2) Cliquons sur dump pour le sauver sur le disque dur (2)

ChimpRec

Si tout s'est bien passé, vous avez un fichier nommé goldo8-.exe sur votre disque dur, ce fichier n'est pas encore fonctionnel car les imports sont encore dirigés vers les sections Aspack et sont donc invalides !

Pour terminer le travail correctement et avoir un fichier valide, il faut rediriger les imports.

Nous sommes toujours dans ChimpRec, cette fois nous allons remettre la bonne valeur de notre OEP et non celle d'Aspack !

Remember :

OEP Aspack : 45F001h - 400000h (imagebase) = 5F001h (regardez la valeur OEP RVA dans le bas de l'image ci dessus, c'est exactement çà !)
OEP cible originale avant Aspack : 401000h - 400000h ( imagebase) = 1000h, c'est la valeur que nous devons mettre dans OEP RVA de ChimpRec !

ChimpRec

Une fois fait, cliquons sur IAT AutoSearch, normalement il doit trouver quelque chose et cliquons sur OK !

ChimpRec

ChimpRec nous confirme, et nous dit d'essayer GetImports, ce que nous allons faire !

1) On voit que tous les imports sont résolus (1)
2) 0 unresolved pointers, confirme que tout est ok ! (2)

ChimpRec

Il n'y a plus qu'à fixer notre dump !

Lorsque vous cliquez sur FixDump, sélectionnez bien votre fichier dump et non le fichier original ou autre !!!

Par défaut, ChimpRec reprend le fichier dump qu'il a créé mais vérifiez bien que ce soit le bon !

ChimpRec

Une fois OK :

ChimpRec

ChimpRec vous a créé un 3eme exécutable cette fois fonctionnel et sans Aspack.

Si tout s'est bien passé, vous devriez avoir la même ligne bleue que moi, saved succesfully !

On teste, l'exe fonctionne, un petit coup dans Peid pour voir si Aspack apparaît toujours? Eh non, on voit de nouveau la fausse signature faite par Goldocrack (1) !

L'Entry-Point a été remis à son origine en 1000h et la section où il se trouve est bien la .text (2) :

Peid

Merci de m'avoir suivi jusqu'au bout !

 

 

Precedent        Sommaire        Suivant