Beruflich Dokumente
Kultur Dokumente
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 )
------------------------------------------------------------------------
Compilation des logs necessaires pour le Manual Unpacking (Lord PE, ProcDump,
ImpRec)
Plugin OllyDump
(facultatif) Patch pour PEiD qui ajoute 1888 signatures - By Bushido
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
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
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
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 :
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
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
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 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 :
Voila, vous en avez chier... moi aussi (mes poignets crient Au secours !!!)
http://bork0.dl2.free.fr/php/cracking/manual-unpacking_theorie.php 4/4