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


    Membres: 2 433
    Discussions: 3 585
    Messages: 32 831
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Le site du zero
    Découvrez gratuitement la programmation (C, C++, PHP, MySQL, XHTML, CSS...), Linux, le Mapping, la modé...
    Programmation
    [FR] Cyber-Hacker
    CH - Cyber Hacker est un jeu par navigateur de simulation de hack, programmez et envoyez vos virus et piratez les aut...
    Hacking
    [FR] Developpez.net
    Un forum communautaire qui se veut pour les développeurs en générale. Avec presque 500 000 membr...
    Programmation
    [FR] µContest
    µContest est un site de challenges de programmation, c'est à dire qu'il propose des épreu...
    Hacking
    [FR] dcode
    dcode.fr est le site indispensable pour décoder des messages, tricher aux jeux de lettres, résoudre des énigmes...
    Outils / Add-on
    [EN] Listbrain Version 3
    Site proposant 66 challenges présentés dans une liste mélangée.
    Challenges
    [EN] Exploit-db
    Une base de données d'exploits triés par genre (GHDB, Remote, Local, Web, DOS, ShellCode) à ...
    Vulnérabilités

  • 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!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Unpack un binaire packé avec UPX
07-09-2012, 23h02 (Modification du message : 08-09-2012, 02h39 par crown.)
Message : #1
crown Hors ligne
Membre actif
*



Messages : 52
Sujets : 5
Points: 18
Inscription : Oct 2011
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 " [1], bon il n'est pas nécessaire d'avoir des connaissances en langage ASM.

0x01 Pré-requis :

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.

[Image: 636853peid.png]

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

[Image: 656420studpe.png]

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 :

[Image: 982990popad.png]

Ici comme nous pouvons l'observer il y a, à l'adresse 00466413 un JMP [10] 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 :

[Image: 945858ollycall.png]

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".

[Image: 268031lordpe.png]

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) :


[Image: 484323ImportRec.png]

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.

[Image: 740473success.png]

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é :

[Image: 292282patchme.png]

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.
+1 (6) -1 (1) Répondre
08-09-2012, 08h32
Message : #2
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,613
Sujets : 72
Points: 466
Inscription : Jan 2012
RE: Unpack un binaire packé avec UPX
Pas mal ton tuto Smile

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

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

"VIM est merveilleux" © supersnail
+1 (1) -1 (0) Répondre
08-09-2012, 13h05
Message : #3
Di0Sasm Hors ligne
Chimiste
*******



Messages : 924
Sujets : 56
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.
+1 (1) -1 (0) Répondre
08-09-2012, 15h03
Message : #4
Swissky Absent
Bon membre
*



Messages : 523
Sujets : 32
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
+1 (0) -1 (0) Répondre
08-09-2012, 15h04
Message : #5
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,613
Sujets : 72
Points: 466
Inscription : Jan 2012
RE: Unpack un binaire packé avec UPX
Ça fait surtout un bon entraînement à l'unpacking Smile
Mon blog

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

"VIM est merveilleux" © supersnail
+1 (0) -1 (0) Répondre
08-09-2012, 15h07
Message : #6
Swissky Absent
Bon membre
*



Messages : 523
Sujets : 32
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 ?
+1 (0) -1 (0) Répondre
08-09-2012, 15h18
Message : #7
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,613
Sujets : 72
Points: 466
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é Stalker qui permet justement de tracer les écritures dans un autre processus).
Mon blog

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

"VIM est merveilleux" © supersnail
+1 (0) -1 (0) Répondre
08-09-2012, 16h59 (Modification du message : 08-09-2012, 17h00 par crown.)
Message : #8
crown Hors ligne
Membre actif
*



Messages : 52
Sujets : 5
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).
+1 (0) -1 (0) Répondre
08-09-2012, 17h17
Message : #9
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,613
Sujets : 72
Points: 466
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
Mon blog

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

"VIM est merveilleux" © supersnail
+1 (0) -1 (0) Répondre
11-09-2012, 17h59
Message : #10
Horgh Hors ligne
Membre actif
*



Messages : 197
Sujets : 4
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 > *
+1 (0) -1 (0) Répondre
23-09-2012, 21h04
Message : #11
sakiir Hors ligne
[sakiir@Ubuntu]:~$ ./ExploitMe ShellC0de
*



Messages : 411
Sujets : 51
Points: 34
Inscription : Sep 2012
RE: Unpack un binaire packé avec UPX
merci bon tutoriel !!
+1 (0) -1 (0) Répondre
31-05-2013, 19h31
Message : #12
0pc0deFR
Non-enregistré



 
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.
positive (1) negative (0) Répondre
02-06-2013, 18h04
Message : #13
WizOut Hors ligne
Black Slave Coder
*



Messages : 111
Sujets : 13
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
+1 (0) -1 (0) Répondre
08-05-2014, 11h46
Message : #14
Atlas Hors ligne
Membre actif
*



Messages : 69
Sujets : 7
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
+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  Débuter en reverse engineering avec 0$ 0x41 9 2,749 14-09-2012, 19h55
Dernier message: LR-6

Atteindre :


Utilisateur(s) parcourant ce sujet : 8 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut