Maintenant que l'on sait qu'un .exe est compressé et avec quoi, voyons un peu plus en détails les manips pour le regénérer dans sa forme originale.
Tout d'abord quelques termes employés dans le domaine des outils de modification/camouflage d'éxécutables:
(Un)Compressor
(Un)Crypter
(Un)Cruncher
(Un)scrambler
(Un)protector
(Un)packer
Autre terme parfois rencontré: Dumper. Ex: DilloDumper pour récupérer un .exe modifié avec Armadillo.
Il faut donc disposer d'un bonne reserve de fioles remplies de unpackers.
De temps en temps il est nécessaire de faire plusieurs essais, ça ne marche pas forcément au premier coup.
Il peut y avoir plusieures raisons:
-Version différente du packer.
-Loader de décompression trafiqué.
-Signature mal identifiée: Tout l'intéret d'utiliser plusieurs analyseurs...
Il existe souvent plusieurs outils pour un méme compresseur, de source différentes.
Il faut donc étre patient et jouer avec les éventuelles options, rechercher les autres versions sur le Net,
relire le Livre Des Ombres.
C'est du Lab, plutot sympa...
Voici quelques packers/crypters courants (il y en a des dizaines).
Les fiches signalétiques de Trend-Micro et Symantec, qui montrent ceux les plus utilisés par les programmeurs de virus, sont une bonne source d'informations.
(J'y traine tout le temps, car mes cibles sont le plus souvent des virus,vers et trojans. Sans oublier les pourritures de Spywares qui deviennent de plus en plus blindés et vicieux.)
S'entrainer à les contourner est un plus:
upx: utilisé à toutes les sauces.
fsg: Un autre standard.
Utilisé par certaines variantes des Worms: SdBot,Agobot,Dumaru,Randex...
Extraction par FSG Dumper et UnFSG.
morphine: Il crypte le .exe (morphine d'après polymorphe?)
Utilisé par des souches Agobot et Sdbot.
Contourné par MorphineKiller.
noodle: La solution est NoodleKiller.
neolite: Utilisé par certains Agobot(encore lui) et par le Backdoor OptixPro.
yoda: Dans des variantes Rbot,MyTob et Opaserv
Soluce: deYoda
mew: On le retrouve dans des éxemplaires de SpyBot,WootBot et Rbot.
Certaines versions de Agobot bien sur...
Decompression par UnMew.
PECompact: Utilisé par RxBot.
Parade: UnPEcompact.
Remarque: Un .exe peut avoir été passé à plusieurs moulinettes à la suite.
Par exemple: upx puis yoda.
Le Marteau de Thor
les Décrypteurs génériques:
Une méthode assez brutale consiste à ne pas se poser de questions et soumettre l'éxécutable à un prog qui va "de débrouiller tout seul" et tenter de regénérer le binaire original.
Il en éxiste plusieurs:
-GuW32
-APE (?)
-Quick Unpack
-Scu (StartupCode Unpacker)
-Un-pack
Procdump intégre également de nombreux Unpackers.
Certains sont en fait une collection de unpackers invoqués depuis une méme interface, alors que d'autres utilisent une méthode plus heuristique et éxécutent le prog et tentent de le stopper puis de le dumper juste aprés le Loader de décompression en guettant l'apparition des premiers opcodes en clair.
Ils recherchent souvent des signatures de compilos...
Sites à consulter pour faire le plein de potions:
http://www.absolutelock.de/construction/releases.html
http://www.openrce.org/reference_library/packer_database
http://ftp.elf.stuba.sk/packages/pub/pc/pack/
http://www.enib.fr/~minos/download.php
http://www.yates2k.net/filepu.html
http://doom.scene-gods.de/unpacker.htm
http://myhome.hanafos.com/~comgod/packing%20&%20unpacking.htm
http://reversing.kulichki.com/files/unpack/unpack.htm
http://www.secretashell.com/codomain/peid/plugins/
http://www.softpedia.com/get/Programming/Packers-Crypters-Protectors/
Magie Noire
Lorsque tous les essais "automatiques" grace aux utilitaires de décompression ont échoué, on se retrouve dans le méme cas qu'avec un loader inconnu: Il faut invoquer Odin et Dumper en Manuel.
On reviendra plus en détail sur ces manips au sujet des debuggers, mais en attendant voici les grandes lignes:
-On charge le prog crypté dans le debugger (Olly,GoVest,SoftIce...)
-On identifie (à force, on les reconnait) la routine de décompression/décryptage.
-On laisse celle-ci s'éxécuter: Elle regénére le binaire original en mémoire.
-Méfiance elle peut flinguer le debugger, ben oui: C'est plus drole...
-On Stoppe avant de donner la main au code décompressé.
-On Dump l'image mémoire ainsi décompressée.
-Le dump obtenu doit étre ensuite modifié(patché) pour constituer un .exe valide: On doit,entre autre, renseigner la nouvelle adresse de début de programme (Entry Point) pour que l'OS sache lancer le prog.
C'est cette derniére étape qui pose souvent le plus de problémes.
Elle n'est par contre pas obligatoire si on veut juste récupérer l'image mémoire du programme pour la
désassembler ou la ripper: extraire les images, les sons, textes et autres.
Le but du reverse n'est pas forcément d'obtenir un nouveau programme éxécutable, mais de l'analyser.
On retrouve ici nos potes ProcDump et LordPE.
De trés bon Tutos éxistent sur le sujet: Recherche Google avec "manual unpacking" "procdump" et Hop!
Aliens
Des scripts/Plugins pour Olly Debugger pour faire du pseudo-manual Dump, Ils automatisent le process précédent.
Je trouve cette solution trés élégante et trop rarement mentionnée.
Voir la page: http://tuts4you.com/ollyscript/
On constate là une analogie entre:
Disassembler(Dead Listing)/Unpacker
et
Debugger(Live Code)/Memory Dumper
Dans le premier cas, on fait du statique (sur disque), dans l'autre du dynamique (en mémoire).
Voila, cet article a été écrit vite fait, en évitant de répéter ce qui est décrit dans d'excellents tutos présents sur le Net.
Commentaires