Sie sind auf Seite 1von 4

30/10/2017 Cracking : Thérie du Manual Unpacking

Menu  Manual Unpacking : Théorie Land-Of-Bork0


News
_

Forum Bienvenue à vous joyeux crackers !

Liens
Aujourd'hui commence une nouvelle ère, fini les keygenmes a 2 balles, on arrete
de jouer. Mais je te previens, une fois commencé, tu ne pourras plus revenir en
arrière... Nooon, ne vas pas te pendre !!! je blaguais...
Outils
Bon sérieusement, vous devez tous vous demander pas mal de questions : C'est
Livre d'or quoi le Manuale Unpaquing ? Que va t'il encore nous sortir ?
Tutoriaux
Autant vous prevenir tout de suite, vous allez surement avoir du mal à
comprendre la théorie, mais une fois que vous aurez fait la pratique et que vous
Flash Decompiler
vous serez entrainé sur d'autres UnPackMe, ça deviendra presque amusant à faire.
Je me base de mon expérience personelle, j'étais septique mais je me suis quand
Cracking
meme lancé. Malheureusement, je faisais une fausse manip dans la pratique, et
pendant une bonne semaine de travail acharné, j'essayais encore et encore,
Photoshop
finalement j'ai trouvé, et maintenant, c'est que du plaisir... (meme si je suis
encore débutant hein, m'enfin, à force, je connais la technique par coeur )

Assez blablaté, Let's Go !

------------------------------------------------------------------------

Compilation des logs necessaires pour le Manual Unpacking (Lord PE, ProcDump,
ImpRec)
Plugin OllyDump
(facultatif) Patch pour PEiD qui ajoute 1888 signatures - By Bushido

Voici la procédure pour installer tout ces joyaux :

Pour la compil des 3 logs, extraire simplement dans un dossier "Manual


Unpacking", à noter que Lord Pe et ProcDump font..exactement la meme chose !

Pour installer OllyDump, il vous suffit de l'extraire dans le path (dossier racine) ou
est installé Olly.

Quand au patch pour Peid, lancez le, cliquez sur Hardcore unpacker puis sur Ok et
le tour est joué !!

Nous ne nous servirons pas de ces logs pour la théorie, mais gardez les, ils
peuvent servir pour la pratique

------------------------------------------------------------------------

Introduction :

Vous avez peut-etre deja rencontré des logiciels qui n'ont aucune String Data
References et qui, lorsqu'on les ouvrent avec PEiD indiquent des packers tels que
UPX, Armadillo, ASPack, PEcompact... Vous avez, soit abandonné ce crackme, soit
chercher un log spécifique a ce packer qui vous permet de le decompresser, sans
bien comprendre ce qu'il faisait et souvent très dur a trouver

Rappel = Un Packer permet de compresser (réduire la taille de l'éxécutable)


et/ou de protéger un logiciel. Pour votre premier UnPackMe, on va travailler sur
UPX, c'est un packer qui ne fait que compresser, meme s'il empeche de voir les
SDR (relatif à tout les autres packer, nous verrons pourquoi par la suite) il n'a pas
du tout un but de protection, puisqu'il fournit meme l'unpacker gratuitement,
contrairement à Armadillo qui lui à un but de protection et meme s'il est loin d'etre

http://bork0.dl2.free.fr/php/cracking/manual-unpacking_theorie.php 1/4
30/10/2017 Cracking : Thérie du Manual Unpacking

infaillible, c'est tout de meme d'un niveau bien supérieur a UPX pour le
décompresser.

Voila, je pense que vous aurez compris la notion de packer, analysons en détail ce
que fait un Packer et comment unpacker !

Action du Packer :

Que fait exactement le packer ? C'est une question existentielle me direz vous
... Bon, je vais essayer d'etre le plus compréhensif possible =

Le packer crypte d'abord le programme, ca vous l'aurez compris, mais ce n'est pas
très important, en effet, LA chose à retenir c'est que le packer greffe à ce
programme préalablement crypté ce qu'on appelle le "loader". Crypté le
programme c'est bien beau, seuleument il faut pouvoir le decrypter afin de lancer
le programme sans embrouille, c'est la que le loader intervient.
Le packer va faire en sorte que le loader se lance en premier - en changeant
l'EntryPoint (l'EP) - puis le loader s'execute, decrypte le programme et
finalement le lance à partir de L'OriginalEntryPoint (OEP).
Notre but sera de retrouver cet OEP puis de faire tout un tas de petites manips...
Seuleument, un autre problème intervient : Comment trouver le début du loader
ainsi que la fin. Pour trouver le début, je vous laisse 10 sec, quand à la fin, ben
vous pouvez pas inventer

Réponse = Rappelez vous, le loader va se lancer en premier, donc si on lance le


programme avec Olly, on tombera direct sur le début du loader caractérisé par
l'instruction PUSHAD, quand à la fin, elle est marquée par l'instruction POPAD.
Après ce POPAD, on tombera sur un JMP et... tadam.. c'est magique, l'adresse ou
pointe le JMP sera notre OEP !!!

Encore un dernier point qui risque de faire souffrir vos méninges : PUSHAD,
POPAD, ces instructions ne vous rappellent vaguement rien ?! Certains l'auront
trouvé, on retrouve dedans les instructions PUSH et POP qui servent à
pousser/sortir des valeurs de la pile (le stack). En fait, le Loader, bien qu'il
decrypte le programme, doit quand meme garder toutes les valeurs de "bases" du
programme, ainsi au début du Loader, il pousse toutes les valeurs dans la pile et à
la fin, il les ressort toutes. Facile nan

Relisez bien attentivement 2 ou 3 fois. Cependant, comme je suis de bonne


humeur, je vous ai fait un petit shéma pour resumer :

Bon, j'avoue que ça peut paraitre assez abstrait aux premiers abords (surtout que
mon shéma est pas brillant) mais, c'est rien comparé au reste.

----------------------------------------------------

Comment Decrypter :

Nous allons maintenant nous attaquer a la décompression (manuel). Comme je l'ai


expliqué vaguement plus haut, la première étape sera de trouver l'OEP, jusqu'à la
rien de bien dur puisqu'il suffit de trouver le POPAD, et regarder l'adresse ou
pointe le JMP qui suit. Voici exactement la procédure à suivre : Vous lancez votre
log avec Olly et vous tombez sur le PUSHAD, cherchez le POPAD puis posez un
BreakPoint sur le JMP. Lancez le débugger et appuyez sur F7 (Step Into) pour
arriver directement à l'OEP. Maintenant, on va faire ce qu'on appelle un "dump".

http://bork0.dl2.free.fr/php/cracking/manual-unpacking_theorie.php 2/4
30/10/2017 Cracking : Thérie du Manual Unpacking

Nous avons vu que une fois le Loader executé, le programme était décrypté. Grace
au débugger d'Olly, nous arrivons sur l'OEP, le programme est donc décrypté.
Grace au dump, nous copions ce qui se trouve en mémoire après l'action du
Loader, ainsi, nous aurons dans un fichier xxx.exe le code du programme tel qu'il
est après l'action du loader (donc decrypté) ainsi que le Loader. N'est ce pas
magnifique

Malheureusement, le Loader s'accroche au programme et si on essaye de lancer le


programme telquel, ça nous fait une superbe erreur. Le problème est que le
programme se lance toujours à l'adresse de L'EP qui se trouve au début du
Loader. Il va donc falloir remplacer L'EP par l'OEP pour que le programme saute le
Loader et se lance directement vers L'OEP, sachant que le programme est
décrypté, on aura plus de problème (enfin, si ). Pour trouver l'EP (le bon), on
fait OEP - ImageBase. mais on verra ça plus en détail lors de la pratique

On aborde maintenant le truc le plus compliqué à comprendre...mais le plus


simple à faire : La reconstruction de l'IAT. Moi même n'ayant pas tout à fait
compris, je préfère recopier l'explication de ce site :

L’IAT c’est en fait la table des imports, grosso modo c’est un tableau qui récapitule les .dll utilisées par le programme, ainsi que
leurs adresses et celles des fonctions utilisées.

Petite précision sur l’IAT : En réalité, l’IAT compte deux tableaux, et non pas un seul. Le premier tableau contient le nom des
fonctions importées, et le deuxième contient la même chose :P

Donc au lancement du programme, celui-ci va regarder les noms des fonctions importées dans le 1er tableau et en déduire (grâce à
certaines API) leurs adresses réelles et stockera tout ça dans le 2ème tableau (écrasant ainsi les données qu’il contenait). En
général lorsqu’un fichier est packé, le packer supprime le premier tableau pour gagner de la place

Mais comment on fait alors pour trouver les adresses réelles ?

Ben en fait on utilise le 2ème tableau, puis on utilise les API pour obtenir les adresses réelles, qui se stockeront dans ce même
tableau, écrasant donc ces données.

Et là vous me demandez : mais à quoi ça sert de reconstruire l’IAT d’un programme si ça peut marcher sans le premier ? Là on va
réfléchir un peu ! J’ai donc dis tout à l’heure qu’un dump était une copie d’un programme tournant en mémoire, il y a rien qui fait
tilt ? Si le programme tourne en mémoire, c’est qu’il a déjà été exécuté, donc le tableau 2 contient les adresses réelles et plus le
nom des fonctions ! et lorsqu’on va lancer notre dump, le prog va chercher le nom des fonctions et va se retrouver avec des
adresses, alors il va pas comprendre et va planter ! C’est pour cela qu’on doit remettre le nom des fonctions importées.

Voila, mais vous verrez que c'est bien plus facile à faire qu'à comprendre, tout
comme toutes les autres manips à faire lors d'un manual unpacking...

Un dernier supplice :

Maintenant, votre programme doit etre fonctionnel, lorsqu'on le lance avec PEid, il
vous dit le vrai programme d'origine, seuleument avec Olly, ça se corse !

En effet, vous ne verrez toujours aucune SDR, et bien qu'en se baladant un peu on
les trouve, vous ne pourrez pas placer de breakpoint dessus. Pourquoi ?! Olly vous
repondra que vous essayez de poser un BreakPoint sur une partie de code qui est
a l'extérieur du programme... Le problème vient du fait que les sections ne sont
pas alignés !

Un log est divisé en plusieurs sections. Lorsque UPX modifie l'EP, il change aussi
les sections (qu'il renomme par ailleurs en UPX0, UPX1...). Et quand nous on
rechange l'EP, on ne réaligne pas les sections. Je m'explique : l'EP généré par Olly
se trouve généralement dans le 2° secteur, voir plus. Quand à notre EP, il se site
généralement dans le 1er secteur (pour savoir il suffit juste de faire Voffset
(adresse) du 1er secteur < PE < Voffset du 2eme secteur... Si c'est le cas, L'EP est
dans le 1er secteur). Il existe une valeur dans le PE (sans rentrer dans le détail, le
PE contient des variables tels que l'ImageBase, l'EP...) qui se nomme BaseOfCode.
Comme UPX a mis son EP dans la 2° section (à titre d'exemple), il change
l'adresse de BaseOfCode par l'adresse de la 2° section. Si, après changement, l'EP
se trouve dans la 1ere section, il suffit juste de remplacer l'adresse de BaseOfCode
par l'adresse de la 1ere section. Ainsi vous pourrez poser des BreakPoint sans
soucis et les SDR auront miraculeusement réapparu !

-------------------------------------

Voila, après tant de réflexion et de souffrance, je vais vous faire un avoeu qui va
surement vous mettre (très) en rogne contre moi :

Il existe un plugin pour Olly qui fait tout ça automatiquement.

Il s'agit d'OllyDump que vous pourrez trouver un peu plus haut. Youpi, nous
sommes sauvés, on aura pas à faire tout ces trucs de tyran... Malheureusement
http://bork0.dl2.free.fr/php/cracking/manual-unpacking_theorie.php 3/4
30/10/2017 Cracking : Thérie du Manual Unpacking

pour vous, dans la pratique, nous ferons d'abord la méthode longue et ensuite
nous utiliserons OllyDump afin de savourer le plaisir du manual unpacking en 5
secondes chrono... (bon, ça reste du UPX aussi hein ).

Voila, vous savez tout, relisez attentivement jusqu'à pouvoir me ressortir chaque
étape ainsi que sa description spontanément .

N'oubliez pas :

1. Trouver l'OEP grace au jump qui se situe à la fin du Loader


2. faire le dump = Copier le programme decrypté dans un fichier
3. Modifier l'EP afin que le programme ne se lance plus sur le loader
4. Reconstruire l'IAT pour eviter un plantage spéctaculaire des API
5. Réaligner les sections pour pouvoir debugger avec Olly
6. Enjoy :-)

Voila, vous en avez chier... moi aussi (mes poignets crient Au secours !!!)

Assimilez bien tout ça et lancez vous dans la pratique !

Merci d'avoir lu ce tuto !

Analyse du code d'un crackme / Manual Unpacking : Pratiquer sur UPX

RETOUR EN HAUT / INDEX DU CRACKING / INDEX DU SITE / FORUM

http://bork0.dl2.free.fr/php/cracking/manual-unpacking_theorie.php 4/4

Das könnte Ihnen auch gefallen