• STATISTIQUES
  • Il y a eu un total de 1 membres et 918 visiteurs sur le site dans les dernières 24h pour un total de 919 personnes!


    Membres: 2 097
    Discussions: 3 554
    Messages: 32 736
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] Lost-chall
    Site de challenge présenté sous la forme de différente saison. Pour passer une saison vous devez avoir accumul...
    Challenges
    [FR] Comment ca marche
     Gratuit et accessible à tous, ce site de communauté permet de se dépanner, se faire aider ...
    Webmaster
    [EN] Big-Daddy
    Big-Daddy est site internet communautaire avec un effectif diversifié, y compris des artistes, des programmeur...
    Hacking
    [EN] xda-developers
    Très bon site pour les gros bidouilleurs de smartphone de windows à androïd et de Apple jusqu'...
    Phreaking
    [FR] Root-Me
    Notre équipe se base sur un constat : à l'heure actuelle ou l'information tend à devenir...
    Hacking
    [EN] Packet Storm
    Packet Storm est un site qui combine nouvelles de la sécurité informatique, téléchargemen...
    Vulnérabilités
    [EN] wechall
    Pour les gens n'étant pas familiers avec les sites de challenges, un site de challenges est un site propos...
    Hacking

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Unpack un binaire packé avec UPX

Unpack UPX

0x00 Introduction :

Salut les poneys alors aujourd’hui j'ai décidé de faire un petit tutoriel sur, " comment unpacker un binaire packé avec UPX " Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici., bon il n'est pas nécessaire d'avoir des connaissances en langage ASM.

0x01 Pré-requis :
  • OllyDbg Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici. /WinDasm Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.
  • LordPE Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici. /PE Tools Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.
  • Import Reconstructor Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.
  • PEid Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici. / StudPE Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.
  • Crackme packé avec UPX Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici. Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.

0x02 Try to unpack me !

C'est partit donc comme tout bon cracker Big Grin un petit reflex doit vous venir à l'esprit qui est de passer le binaire dans PEid ou StudPE.

Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.

Comme on peut le voir ici PEid ne nous apprends rien nous essayons donc avec StudPE.

Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.

Avec StudPE on voit qu'il détecte le packer UPX il nous faut donc l'unpacker si on veut pouvoir travailler sur notre binaire. Maintenant que nous savons qu'il est packé nous le lançons dans ODBG puis on tombe nez-à-nez avec un PUSHAD qui est le debut de la routine du loader qui va être lancé pour pouvoir déchiffrer le programme.

Ici nous avons notre EP (Entry Point) c'est lui que nous allons changer pour que le programme puisse commencer sur le programme et non le loader.
Adresse de l'EP : 00466290, gardons cela en tête pour plus tard.

Il nous faut maintenant trouver un POPAD qui signifie la fin de la routine de déchiffrement. L'instruction POPAD a une valeur hexadécimal de 61 on fait donc un CTRL + B puis dans la case Hex + 00 on y met le nombre 61.

On tombe ensuite sur cette ligne, la ligne du POPAD :

Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.

Ici comme nous pouvons l'observer il y a, à l'adresse 00466413 un JMP Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici. qui va jumper sur l'OEP (Original Entry Point) ce qui nous amèneras au début du programme unpacké. Donc on appui sur F9 on vois une fenêtre qui s'ouvre puis on clique sur la ligne du JMP et on appui sur Entrer. Normalement on arrive ici :

Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.

On note l'adresse à laquel on tombe qui est 00401280 puis on ouvre LordPE on cherche notre programme (débuggé) puis on clique droit dessus puis on fait un "dump full".

Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.

On se retrouve donc avec un programme du nom de dumped.exe mais si vous le lancez il ne marchera pas puisqu'il manque touts les DLL et les librairies il va donc falloir les reconstruire.

Il faudra aussi changer l'EP (Entry Point) pour que le programme aille directement à l'OEP (où le programme est unpack) et non sur le loader.

Donc on ouvre ImportRec puis on cherche notre programme en cour qui est unpacké (dans OllyDbg) :


Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.

On voit sur la dernière ligne que l'Image Base est 00040000 on note ça quelque part puis la il va nous falloir faire une petite soustraction pour trouver l'OEP qui n'est autre que EP - Image Base = OEP. On a donc 00401280 - 00400000 = 00001280, on écrit cette valeur dans OEP puis on clique sur IAT AutoSearch, ça devrait vous affichez un jolie message qui dit que l'adresse a bien était trouvée.

Il nous dit ensuite de cliquer sur Get Import.
On a maintenant nos DLL puis nos Import Tables recrée, nous pouvons donc fixer le dump en cliquant sur Fix Dump puis en choisissant le fichier dumped.exe.

Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.

Là encore une fois un beau message disant que l'opération c'est bien passée, ImportRec vient de crée un fichier Dumped_.exe qui est votre fichier final unpack.

Aperçu des strings sur le binaire packé :

Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.

Et voilà le fichier dumped_.exe crée par ImpRec avec les imports tables et les DLLs et bien sûr unpacké :

[Image: 3qt9dn.jpg]

Voilà on arrive à la fin de ce tutoriel entièrement rédigé par moi-même, et ça m'a pris pas mal de temps donc j'espère qu'il vous plairas, surtout si vous avez des questions n'hésitez car pour des débutants ça peut tout de suite devenir assez technique.
08-09-2012, 08h32
Message : #1
supersnail Hors ligne
Éleveur d'ornithorynques
*****



Messages : 1,588
Points: 465
Inscription : Jan 2012
RE: Unpack un binaire packé avec UPX
Pas mal ton tuto Smile

Sinon pour les flemmards... upx -d :>

Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
08-09-2012, 13h05
Message : #2
Di0Sasm Hors ligne
Chimiste
*******



Messages : 902
Points: 91
Inscription : Aug 2011
RE: Unpack un binaire packé avec UPX
Je lui ai dit hier soir pour "upx -d" plus rapide.

Je déplace dans tuto reverse.
08-09-2012, 15h03
Message : #3
Swissky Absent
Bon membre
*



Messages : 523
Points: 96
Inscription : Apr 2012
RE: Unpack un binaire packé avec UPX
Merci c'est cool Smile
Mais quand je sais que c'est packé avec UPX j'utilise upx -d 1.exe en nommant mon fichier 1.exe .
Comme le disent DiosAsm et Supersnail c'est plus rapide mais ta rapide est plus manuelle Tongue
08-09-2012, 15h04
Message : #4
supersnail Hors ligne
Éleveur d'ornithorynques
*****



Messages : 1,588
Points: 465
Inscription : Jan 2012
RE: Unpack un binaire packé avec UPX
Ça fait surtout un bon entraînement à l'unpacking Smile

Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
08-09-2012, 15h07
Message : #5
Swissky Absent
Bon membre
*



Messages : 523
Points: 96
Inscription : Apr 2012
RE: Unpack un binaire packé avec UPX
Je n'ai pas encore testé mais est-ce que sa marche contre d'autre type de packer comme Aspack ou c'est seulement dédié à UPX ?
08-09-2012, 15h18
Message : #6
supersnail Hors ligne
Éleveur d'ornithorynques
*****



Messages : 1,588
Points: 465
Inscription : Jan 2012
RE: Unpack un binaire packé avec UPX
Bah généralement les packers font des pushad/popad pour préserver les valeurs des registres sur la pile (étant donné que la plupart de ces registres seront modifiés par les opération de décompression/remplissage de l'IAT (si elle a été aussi packée).
Donc à la sortie du popad, on peut s'attendre à ce qu'on trouve un saut vers l'OEP Wink.
Après t'as d'autres packers qui jouent avec les SEH ou d'autres trucs tricky pour essayer de paumer les débuggers, mais y'aura dans 99% des cas un popad suivi d'un saut vers l'OEP.

Après vient le cas des "crypters" RunPE, qui fonctionnent différement: ces crypters créent un processus en "suspended", avant de le défoncer pour remplacer son code par celui de l'exécutable chiffré par le crypter, et laisser le loader win32 faire le reste (remplissage d'IAT, etc). Bref, ça reste traçable (j'ai d'ailleurs codé un p'tit tool nommé Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici. qui permet justement de tracer les écritures dans un autre processus).

Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
08-09-2012, 16h59 (Ce message a été modifié le : 08-09-2012 17h00 par crown.)
Message : #7
crown Hors ligne
Membre actif
*



Messages : 52
Points: 18
Inscription : Oct 2011
RE: Unpack un binaire packé avec UPX
C'est sur que comme vous dîtes upx -d est beaucoup plus rapide mais au moins vous saurez le faire à la main. Après pour ce qui est des autres packer j'ai eu l'occasion de tomber sur ARM protector et yoda's protector qui eux n'utilise pas cette méthode (PUSHAD/POPAD).
08-09-2012, 17h17
Message : #8
supersnail Hors ligne
Éleveur d'ornithorynques
*****



Messages : 1,588
Points: 465
Inscription : Jan 2012
RE: Unpack un binaire packé avec UPX
Perso, je vois bien des pushad dans ARM unpacker (ils sont juste difficiles à trouver du fait des tricks anti-désassembleur/débugger), mais ils sont là Wink

Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
11-09-2012, 17h59
Message : #9
Horgh Hors ligne
Membre actif
*



Messages : 197
Points: 91
Inscription : Mar 2012
RE: Unpack un binaire packé avec UPX
Hum c'est assez sale la méthode de la recherche par opcode. Ca marche bien sur upx parce que le loader est court & qu'il n'y a aucun trick, mais dès que ça devient élaboré on se retrouve en général face à du déchiffrement dynamique de code au cours de l'exécution & donc impossible de trouver le popad dès le début. Sans compter que sur un vrai protector, il n'y aura pas qu'une seule occurrence pour 0x61 mais des dizaines voire des centaines. La recherche d'une suite de commande / de bytes est plus fiable dans ce cas là, même si cette méthode montre vite aussi ces limites.
Pour conclure : ESP Trick > *

Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.
23-09-2012, 21h04
Message : #10
sakiir Hors ligne
[sakiir@Ubuntu]:~$ ./ExploitMe ShellC0de
*



Messages : 411
Points: 34
Inscription : Sep 2012
RE: Unpack un binaire packé avec UPX
merci bon tutoriel !!

Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.
31-05-2013, 19h31
Message : #11
0pc0deFR Hors ligne
Membre actif
*



Messages : 161
Points: 35
Inscription : May 2013
RE: Unpack un binaire packé avec UPX
Un packer va simplement compresser le code. Un protector va compresser le code mais aussi le protéger via des systèmes de chiffrement, d'anti-debugging. Dans certains cas, le binaire est même émulé. Certains protector intègre aussi un système de licence.

MPRESS s'unpack de la même manière (PUSHAD/POPAD).

Yoda's Protector est open source donc le mieux (je pense) pour l'unpacker est de regarder les sources pour comprendre son fonctionnement et donc l'unpack assez simplement.

Twitter: Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.
Blog: Veuillez vous enregistrer pour visualiser l'ensemble du forum en cliquant ici.
02-06-2013, 18h04
Message : #12
WizOut Hors ligne
Black Slave Coder
*



Messages : 111
Points: 14
Inscription : Apr 2012
RE: Unpack un binaire packé avec UPX
Merci du tutoriel ! Smile intéressant !

"Il existe deux choses infinies : l'univers et la bêtise humaine" Einstein.
PHP/MySQL (POO & PDO) : OK
HTML5/CSS3 : OK
JAVA : En cours
08-05-2014, 11h46
Message : #13
Atlas Hors ligne
Membre actif
*



Messages : 69
Points: 3
Inscription : Aug 2012
RE: Unpack un binaire packé avec UPX
Merci pour le tutoriel !
mais pourrais tu mettre à jour le lien du crack-me ?
Merci d'avance Big Grin

New Project News White Hat Hacker V2.3
Accueil | Challenges | Tutoriels | Téléchargements | Forum