CAPI-EARS

Conseil Audit et Prestation Informatique
Evolution des architectures Réseaux et Systèmes

Nous expliquons dans ce tutoriel comment décrypter des programmes cryptés et fournissons quelques notions de compréhension.

Avant tout, il faut savoir qu’un programme est codé par des développeurs qui emploient un ou plusieurs langages précis. On parle de langages informatiques tels que C++, Visual Basic, etc.. A ce stade du codage, tout développeur peut consulter et modifier ce code, code qui est rédigé dans un langage compréhensible. Une fois le développement du code bien abouti et prêt à être exploité, ce code est converti en langage machine « assembleur ».  Là, le code n’est plus compréhensible par des développeurs, les compétences requises pour interpréter ce code sont toutes autres. On parle d’un code composé d’instructions, le langage machine. Ce code en langage machine est parfois compressé / crypté par des packers dans le but de réduire la taille du programme ou d’en protéger le contenu. C’est l’objet de ce tutoriel : comment décompresser un code / comment supprimer une protection au niveau du langage machine.

Exemple de code VBA : Visual Basic for Accesscode-visual-basic-for-access-600x315

Exemple de code en langage machine (ASM) crypté par un packer
code-asm-packer-OllyDbg-600

Logiciels utilisés dans ce tutoriel : PEiD, OllyDbg, Task Explorer 2, Lord PE, Import REconstructor.

Identification du packer

Pour cela, nous utiliserons le logiciel PEiD, qui va nous permettre d’identifier si un packer est utilisé sinon le logiciel de programmation qui aura permis de concevoir le programme. Exemple de packers : PEPACK, NEOLITE, ASPACK, UPX, …

Un packer sert à compresser et parfois même à protéger un logiciel. L’utilisation de Packers est identifiable lors du désassemblage du programme, car vous ne trouverez pas d’informations interprétables, comme par exemple les « String Data References ».  Pour décompresser ou déprotéger le logiciel et ainsi obtenir un code interprétable, il faudra :

  • soit se munir de l’unpacker (logiciel spécifique)
  • soit dissocier le packer du programme original (un dump)

Exemple d’un packer utilisé dans la compression des données : UPX
capture screen PEiD UPX

Fonctionnement

Une fois votre programme original compressé ou crypté par un packer, ce packer ajoute un code supplémentaire dans le programme original, ce code se nomme le « loader ». Le « loader » est essentiel afin de permettre au programme original d’être interprété par votre ordinateur et ainsi être exécuté. Sans ce dit « loader », votre ordinateur ne peut pas exécuter votre programme original, car votre ordinateur ne peut interpréter la compression ou le cryptage utilisé (c’est le travail du loader).

  • Exécution du progamme
    ex : double clic de souris sur un exécutable
  • EntryPoint (EP)
    Chargment du loader -> exécution du loader -> redirection vers OriginalEntryPoint (OEP)
  • OriginalEntryPoint (OEP)
    Chargement du programme décrypté / déprotégé

Cheminement de l’information lors de l’éxecution d’un programme contenant un packer
processus-programme-instruction-EP-OEP

Pour distinguer le « loader » du  programme original (sans compression, ni protection), nous utilisons un désassembler, comme par exemple le désassembler « OllyDbg ». Lors du chargement du programme, le désassembler OllyDbg nous positionne au lancement du loader (EP).

  • Instruction du début du loader : PUSHAD
  • Instruction de fin du loader : POPAD
  • Instruction du début du programme original : JMP

Après l’instruction « POPAD » se trouve une instruction suivie d’une adresse. Par exemple « JMP 00454B84 ». Cette adresse est notre OriginalEntryPoint (OEP).

Ouverture du programme dans le désassembler OllyDbg OllyDbg-EP-EntryPoint-600

Procédure : créer un DUMP

Les étapes ci-dessous décrivent comment :

  • Atteindre le programme original (programme sans compression / sans cryptage)
  • Copier le programme déprotégé / décrypter, dans un nouvel exécutable
  • Remplacer l’adresse de l’instruction « EP » par l’adresse de l’instruction « OEP »
  • Reconstruire la table IAT

Décrypter

Depuis le désassembler « OllyDbg »

  • Ouvrer votre programme original
  • Rechercher l’instruction de fin du loader « POPAD »
  • Effectuer un Breakpoint « F2 » sur l’instruction « jump » (ex : jmp)
    l’instruction « JMP » qui suit l’instruction « POPAD »
  • Exécuter le débugger
  • Appuyer sur « F7 » (step into)

DUMP

Nous sommes à présent sur l’OEP, votre programme original décompressé et décrypté. La suite de la procédure consiste à faire un « DUMP ». Le DUMP, nous permettra de copier les informations décryptés et déprotégés  de votre programme original dans un nouveau exécutable, ex : winrar-deprotege.exe. Toutes ces informations décryptés et déprotégés se trouvent dans la mémoire de votre ordinateur. Concrètement le DUMP va copier les informations en mémoire (décompressé / décrypté), vers un fichier nouveau fichier exécutable.

Depuis « Task Explorer »

  • Rechercher le processus (nom de l’exécutable du programme original)
  • Effectuer un clic droit sur le processus, puis sélectionner « Dump PE »
  • Enregistrer le fichier

Sélection du processus dans Task Explorer 2 pour effectuer un DUMP

Task-explorer-3-600

Nous avons à présent un programme dumpé. Vous pouvez fermer les différents programmes ouverts jusqu’à présent.

Remplacement des instructions

Depuis le logiciel « LordPe »,

  • Cliquer sur le bouton « PE Editor »
  • Sélectionner le programme dumpé
  • Modifier l’EntryPoint (PE)
    Une soustraction est nécessaire - La valeur à renseigner est OEP (moins) ImageBase.
    exemple : OEP = 00454B84 ; ImageBase= 00400000 ; nouvelle EP à renseigner est 54B84
  • Cliquer sur « Save » puis sur « OK »
  • Fermer l’ensemble des programmes

Aperçu de PE Editor avant modification de l’EntryPoint EP

pe-editor-avant-modification-entry-point

Aperçu de PE Editor après modification de l’EntryPoint EP

pe-editor-apres-modification-entry-point.png

Reconstruite les tables IAT

Les IAT sont des tables de correspondance entre des adresses et des ressources utilisés par le programme. Tout programme contient deux tables de correspondance identiques qui font le lien avec des ressources. Les ressources sont par exemple des fonctions, qui peuvent être stockés dans des dll. Lors de l’utilisation d’un packer qui compresse ou protége un programme, l’un des tableaux est généralement supprimé (compression).

Ces tables de correspondance étant chargé dans le « Loader », que nous venons de supprimer en créant un DUMP,  il est nécessaire de reconstruire ces tables pour finaliser notre « DUMP », et obtenir un programme fonctionnel sans cryptage ou protection.

  • Exécuter votre programme original

Depuis le logiciel « Import REconstructor »,

  • Cliquer sur « Attach to an active process », sélectionner le processus du programme original
  • Dans la zone « IAT Infos needed », modifier l’adresse de l’OEP
    Dans notre exemple, la nouvelle adresse est la suivante : 54B84
  • Cliquer sur le bouton « IAT autosearch
  • Cliquer sur le bouton « Get Imports »
  • Cliquer sur le bouton « Fix Dump »
  • Sélectionner le programme dumpé

Reconstruction des tables IAT à partir d’Import REConstructor

Import RE constructor

Félicitation votre programme est à présent décrypter / déprotégé ! Vous pouvez accéder aux contenus précédemment non disponibles.

Ce tutoriel est réalisé dans le cadre de notre offre Pirates et spécialistes en sécurité informatique


Terminologie informatique : packer, déprotéger un programme, ollydbg, lordpe, OEP, EP, tables IAT, instructions assembleurs, créer un DUMP, EntryPoint (EP), OriginalEntryPoint (OEP), Instruction assembleur, ASM

Categories: Tutoriel

  • Flexibilité

    Vous êtes le client ! A nous de nous adapter ! A nous de vous satisfaire !
  • Performance

    Parce que l’informatique doit être l’accélérateur et non le frein de vos objectifs !
  • Satisfaction

    Notre business model est orienté pour vous apporter plus de satisfaction, plus d'efficacité, plus de rentabilité !
  • Sécurité

    Une sécurité efficace, transparente et économique ! Oui, c’est un paradoxe ! Oui, vous pouvez en bénéficier !
Nos zones d'interventions :Informatique à Amfreville-la-Mi-Voie - Informatique à Bihorel - Informatique à Bonsecours - Informatique à Bois-Guillaume - Informatique à Boos - Informatique à Bosc-le-Hard - Informatique à Darnétal - Informatique à Déville-Lès-Rouen - Informatique à Eslettes - Informatique à Franqueville Saint-Pierre - Informatique à Grand-Couronne - Informatique à Igoville - Informatique à Le Mesnil-Esnard - Informatique à Le Petit Quevilly - Informatique à Mont Saint Aignan - Informatique à Petit-Couronne - Informatique à Rouen - Informatique à St Léger-du-Bourg-Denis - Informatique à St-Etienne du Rouvray