Déprotection semi-automatique de binaire



Documents pareils
Déprotection semi-automatique de binaire

SSTIC Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques...

Désobfuscation automatique de binaire - The Barbarian Sublimation

Architecture des ordinateurs

Programmation assembleur : aperçu

Le Projet BINSEC. Automatiser l analyse de sécurité au niveau binaire. Airbus group, CEA, IRISA, LORIA, Uni. Joseph Fourier. p.

Structure d un programme

Logiciel de base. Première année ENSIMAG

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Résumé Génération de code Le code intermédiaire

Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155)

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

Traduction binaire dynamique de l extension SIMD Néon de l ARMv7 dans Qemu

Les techniques de protection du logiciel

GlobalScape Secure FTP Server Buffer Overflow

Compilation (INF 564)

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

Réalisation d un OS 32 bits pour PC(x86)

4. Initiation à l'assembleur

Comprendre telock 0.98 et private versions.

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Initiation à la sécurité

AVERTISSEMENT. D'autre part, toute contrefaçon, plagiat, reproduction encourt une poursuite pénale. LIENS

Architecture des ordinateurs

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

Département informatique de l université d Angers

Introduction aux Machines Virtuelles avec VMKit

Jeu d instructions NIOS II

Solution du challenge SSTIC Emilien Girault ANSSI/COSSI/DTO/BAI 06/06/13

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Introduction...6. Assembleur, philosophieet atouts...8. Avantages et inconvénients de l assembleur...9. Que programmer en Assembleur?.

Recompilation dynamique de codes binaires hostiles

Conception de circuits numériques et architecture des ordinateurs

CONFIGURATION DE L AUTOMATE SIEMENS

Triton : Framework d exécution concolique et d analyses en runtime

Introduction Damien Nouvel

Rappels d architecture

Transmission d informations sur le réseau électrique

Traduction des Langages : Le Compilateur Micro Java

DG-ADAJ: Une plateforme Desktop Grid

Évaluation et implémentation des langages

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Conventions d écriture et outils de mise au point

Playing with ptrace() for fun and profit

Cryptographie : attaques tous azimuts Comment attaquer la cryptographie sans cryptanalyse intensive

CM2 L architecture MIPS32

Matrice d accès. Master SEMS, Pierre Paradinas. October 16, 2013

ARBRES BINAIRES DE RECHERCHE

Vérification formelle de la plate-forme Java Card

Quatrième partie IV. Test. Test 15 février / 71

Codage d information. Codage d information : -Définition-

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

Ordinateurs, Structure et Applications

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

1 Description générale de VISFIELD

Cryptologie et physique quantique : Espoirs et menaces. Objectifs 2. distribué sous licence creative common détails sur

Initiation à la Programmation en Logique avec SISCtus Prolog

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Machines virtuelles Cours 1 : Introduction

ASR1 TD7 : Un microprocesseur RISC 16 bits

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Christophe CANDILLIER Cours de DataMining mars 2004 Page 1

Programmer en JAVA. par Tama

Principe de fonctionnement des périphériques des ordinateurs en vue de la programmation. Patrick Cégielski

Gestion mémoire et Représentation intermédiaire

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

HERVÉ SCHAUER CONSULTANTS Cabinet de Consultants en Sécurité Informatique depuis 1989 Spécialisé sur Unix, Windows, TCP/IP et Internet

Exécution des instructions machine

Informatique UE 102. Jean-Yves Antoine. Architecture des ordinateurs et Algorithmique de base. UFR Sciences et Techniques Licence S&T 1ère année

Java Licence Professionnelle CISII,

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours 1 : La compilation

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Plan global Outils de développement et compilation. Plan. Objectifs des outils présentés. IDE, GCC/Clang, ASAN, perf, valgrind, GDB.

ÉCOLE POLYTECHNIQUE DE MONTRÉAL. Département de Génie Électrique. La technologie de TEXAS INSTRUMENTS DSP pour le cours Analyse des Signaux ELE2700

Optimisations des SGBDR. Étude de cas : MySQL

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Plan du cours. Historique du langage Nouveautés de Java 7

Les portes logiques. Voici les symboles des trois fonctions de base. Portes AND. Portes OR. Porte NOT

Systèmes d exploitation

Approche Contract First

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Objets et Programmation. origine des langages orientés-objet

Reconstruction de bâtiments en 3D à partir de nuages de points LIDAR

Licence Sciences et Technologies Examen janvier 2010

Architecture des ordinateurs. Loïc Cuvillon. 20 novembre 2013

Chapitre VI- La validation de la composition.

Cours de Programmation 2

Représentation des Nombres

Programmation C. Apprendre à développer des programmes simples dans le langage C

DNS Server RPC Interface buffer overflow. Céline COLLUMEAU Nicolas BODIN

Architecture des ordinateurs Introduction à l informatique

Sélection du contrôleur

Les arbres binaires de recherche

GenDbg : un débogueur générique. Didier Eymery Jean-Marie Borello Jean-Marie Fraygefond Odile Eymery Philippe Bion

Simulation centrée individus

Excel avancé. Frédéric Gava (MCF)

Transcription:

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 1/49 Déprotection semi-automatique de binaire avec : celui qui fond dans la bouche et pas dans la main. Alexandre Gazet Yoann Guillot

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 2/49 Plan 1 2 3 4

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 3/49 Plan Les désassembleurs classiques Binding Backtracing 1 Les désassembleurs classiques Binding Backtracing 2 3 4

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 4/49 Les désassembleurs classiques Binding Backtracing

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 5/49 Les désassembleurs classiques Binding Backtracing

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 6/49 Désassemblage Les désassembleurs classiques Binding Backtracing La référence : IDA Pro Excellent sur du code clair : binaire MS Inadapté sur un binaire protégé Pas d interprétation du code Des hypothèses trop contraignantes Des hypothèses Les deux branches d un saut conditionnel sont exécutées Deux instructions ne se superposent pas Un appel retourne

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 6/49 Désassemblage Les désassembleurs classiques Binding Backtracing La référence : IDA Pro Excellent sur du code clair : binaire MS Inadapté sur un binaire protégé Pas d interprétation du code Des hypothèses trop contraignantes Des hypothèses Les deux branches d un saut conditionnel sont exécutées Deux instructions ne se superposent pas Un appel retourne

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 7/49 Hypothèse : un appel retourne Les désassembleurs classiques Binding Backtracing. text :00403 E9F loc 403E9F : ; CODE XREF:.text:loc_40CDEF.text :00403 E9F push ebp.text :00403EA0 push ecx.text :00403EA1 push ebp.text :00403EA2 c a l l sub 40BECD.text :00403EA7 outsb.text :00403EA8 cmp edx, esp.text :00403EAA push esp.text :00403EAB inc esi

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 8/49 Mise en échec Les désassembleurs classiques Binding Backtracing. text :0040BECD sub 40BECD proc near ; CODE XREF:.text:00403EA2.text :0040BECD cmp eax, ebp.text :0040BECF add dword ptr [ esp +0], 1.text :0040BED4 test ebx, 1E2h.text :0040BEDA retn 0Ch.text :0040BEDA sub 40BECD endp

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 9/49 Binding Les désassembleurs classiques Binding Backtracing Définition Expression symbolique des effets d une instruction; à chaque instruction est associée sa sémantique. Instruction ADD : a = di. i nstruction. args.map res = Expression [ [ a [ 0], :&, mask ], :+, [ a [ 1], :&, mask ] ] binding [ : eflag z ] = Expression [ [ res, :&, mask ], :==, 0] binding [ : e fla g s ] = sign [ res ] binding [ : eflag c ] = Expression [ res, :>, mask ] binding [ : eflag o ] = Expression [ [ sign [ a [ 0 ] ], :==, sign [ a [ 1 ] ] ], : &&, [ sign [ a [ 0 ] ], :!=, sign [ res ] ] ] binding [ i n s t r ] ={ a [ 0 ] => res }

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 10/49 Binding Les désassembleurs classiques Binding Backtracing Instruction CALL : addrreturn = Expression [ Expression [ di. address, :+, di. bin length ]. reduce ] } binding = { : esp => Expression [ : esp, :, opsz ], I ndirection [ : esp, opsz, di. address ] => addrreturn } En pratique : dword ptr [ esp ] = 0x4010CE esp = esp 4 Instruction RDTSC : binding = { : eax => Expression : : Unknown, : edx => Expression : : Unknown }

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 10/49 Binding Les désassembleurs classiques Binding Backtracing Instruction CALL : addrreturn = Expression [ Expression [ di. address, :+, di. bin length ]. reduce ] } binding = { : esp => Expression [ : esp, :, opsz ], I ndirection [ : esp, opsz, di. address ] => addrreturn } En pratique : dword ptr [ esp ] = 0x4010CE esp = esp 4 Instruction RDTSC : binding = { : eax => Expression : : Unknown, : edx => Expression : : Unknown }

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 10/49 Binding Les désassembleurs classiques Binding Backtracing Instruction CALL : addrreturn = Expression [ Expression [ di. address, :+, di. bin length ]. reduce ] } binding = { : esp => Expression [ : esp, :, opsz ], I ndirection [ : esp, opsz, di. address ] => addrreturn } En pratique : dword ptr [ esp ] = 0x4010CE esp = esp 4 Instruction RDTSC : binding = { : eax => Expression : : Unknown, : edx => Expression : : Unknown }

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 11/49 Backtracing, la théorie Les désassembleurs classiques Binding Backtracing Définition Émulation symbolique par remontée du flot d instructions.

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 12/49 Backtracing, la pratique Les désassembleurs classiques Binding Backtracing Flot d exécution : c a l l loc 40becdh ; @403ea2h e826800000 cmp eax, ebp ; @40becdh 39 e8 add dword p tr [ esp +0], 1 ; @40becfh 8344240001 t e s t ebx, 1e2h ; @40bed4h f7c3e2010000 r e t 0ch ; @40bedah c20c00 Backtracing x dword ptr [esp] for 40bedah ret 0ch 1 backtrace 40becfh add dword ptr [esp+0], 1 dword ptr [esp] => dword ptr [esp]+1 2 backtrace up 40becdh->403ea2h dword ptr [esp]+1 3 backtrace 403ea2h call loc 40becdh dword ptr [esp]+1 403ea8h 4 backtrace result : 403ea8h

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 13/49 Les désassembleurs classiques Binding Backtracing Listing produit : loc 403e9fh : push ebp ; @403e9fh 55 push ecx ; @403ea0h 51 push ebp ; @403ea1h 55 c a l l loc 40becdh ; @403ea2h e826800000 noreturn db 6eh ; @403ea7h // Xrefs : 40bedah loc 403ea8h : cmp edx, esp ; @403ea8h 39 e2 push esp ; @403eaah 54 [... ] // Xrefs : 403ea2h loc 40becdh : cmp eax, ebp ; @40becdh 39 e8 add dword p tr [ esp +0], 1 ; @40becfh 8344240001 t e s t ebx, 1e2h ; @40bed4h f7c3e2010000 r e t 0ch ; @40bedah c20c00 x: loc_403ea8h

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 14/49 Plan Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection 1 2 Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection 3 4

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 15/49 Securitech 2006 - Challenge 10 Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection Poeut.exe Binaire massivement obfusqué IDA dépassé désassemble parfaitement mais : Reordonnancement des blocs d instructions nécessité de développer un front-end graphique yed - Graph Editor Visualisation de graphes Utilise un fichier graphml Objets internes de les InstructionBlock

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 16/49 Graphe sauvage Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 17/49 Prédicats biaisés Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection Prédicats obscurs La fonction prédicat renvoie toujours vrai ou toujours faux Prédicats résistants à une analyse manuelle/statique Une des deux branches n est jamais exécutée i f ( xˆ4 (x 5)ˆ2 >= 0){ goto real code ; } else{ goto no where ; } fstp qword ptr [ esp +8] fstp qword ptr [ esp ] c a l l thunk pow fstp qword ptr [ ebp 0x20 ] mov eax, dword ptr [ ebp 0ch ] sub eax, 5 push eax f i l d dword ptr [ esp ] lea esp, dword ptr [ esp+4] fld qword ptr [ xref 8048590h ] fstp qword ptr [ esp +8] fstp qword ptr [ esp ] c a l l thunk pow fld qword ptr [ ebp 20h ] fmulp ST(1)

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 18/49 Prédicats biaisés Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection Aléa total La fonction prédicat renvoie indifféremment vrai ou toujours faux Les sémantiques des deux branches sont équivalentes i f ( rand () %2 ) { real code A ; } else { real code B ; }

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 19/49 Duplication de flot Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection Insertion massive d aléa total : Constructions en diamant.

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 20/49 Éléments neutres Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection Définition Instruction ou groupe d instructions ayant une sémantique nulle : aucun impact réel sur le contexte d exécution.

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 21/49 Éléments neutres : aléa apparent Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection Implémentation : test esp, ebx ; @402039h 85e3 cmp ebx, edx ; @40203bh 39 d3 mov byte p tr [ edx ], a l ; @40203dh 8802 add dword p tr [ esp +0], 6 ; @40203fh 8344240006 inc edx ; @402044h 42 jmp loc 40b25dh ; @402045h e913920000 Réponse au problème Utilisation du binding des instructions Incohérences du data flow au niveau des flags : Deux écritures successives Écriture mais pas de lecture

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 22/49 Éléments neutres : faux appels Implémentation : Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection push eax ; @408dadh 50 push ecx ; @408daeh 51 push ebp ; @408dafh 55 [... ] c a l l loc 4037f2h ; @40932fh [... ] push esp ; @4037f4h 54 push ecx ; @4037f5h 51 [... ] add dword p tr [ esp +8], 9 ; @4037f9h 8344240809 add esp, 8 ; @403800h 83 c408 [... ] r e t 0ch ; @403808h c20c00 x: loc_40933dh Réponse au problème Création du flot d exécution Simulation d une pile Pattern particulier : modifie l adresse de retour

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 23/49 Épilogue brut Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 24/49 Analyse des flots d exécution Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection Réponse au problème 1 Parcours de l arbre d objets internes InstructionBlock 2 Inline de fonction si nécessaire 3 Recherche de constructions en diamant 4 Création, nettoyage puis comparaison des flots 5 Factorisation si nécessaire

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 25/49 Épilogue avec flots factorisés Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 26/49 Épilogue réordonné Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 27/49 Vue finale Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 28/49 Touche finale Présentation Complexification du graphe de contrôle Insertion d éléments neutres Déprotection Nettoyage de tout le graphe du binaire Production d un listing assembleur propre Utilisation du compilateur compris dans pour produire un binaire dépourvu de la protection

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 29/49 Plan Introduction Obfuscation Machine virtuelle Résolution 1 2 3 Introduction Obfuscation Machine virtuelle Résolution 4

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 30/49 T2 2007 Introduction Obfuscation Machine virtuelle Résolution t207.exe http://www.t2.fi/challenge/ But : trouver un mot de passe pour deverouiller le programme Binaire très simple [demo/1] Charge un driver obfusqué [demo/2]

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 31/49 Désobfuscation Introduction Obfuscation Machine virtuelle Résolution Les types d obfuscation Junk code Opérations obfusquées Anti ring3 Duplication de code

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 32/49 Junk code Introduction Obfuscation Machine virtuelle Résolution junk ror edi, 0dh xchg ebx, edi ror ebx, 13h xchg ebx, edi

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 33/49 Opérations obfusquées Introduction Obfuscation Machine virtuelle Résolution rotation de bits push eax push ecx r o l dword ptr [ esp +4], c l pop ecx pop eax

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 34/49 Anti ring3 Introduction Obfuscation Machine virtuelle Résolution test ring0 pushfd push eax xor eax, eax mov ax, cs cmp eax, 9 j l e loc 131d5h rdtsc imul eax, ecx jmp eax ; x : unknown loc 131d5h : pop eax popfd

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 35/49 Duplication de code Introduction Obfuscation Machine virtuelle Résolution duplication push e s i push ebx pushfd rdtsc imul ecx, ebx cmp cl, 7 fh jnb loc 21aba popfd pop ebx pop e s i loc 21abah : popfd pop ebx pop e s i

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 36/49 Machine virtuelle Introduction Obfuscation Machine virtuelle Résolution Structure de handler Des opérations simples Des constructions similaires Opérations paramétrées par [ebp] [demo/3]

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 37/49 Addition virtuelle Introduction Obfuscation Machine virtuelle Résolution Handler d addition loc 15336 : mov ecx, dword p t r [ ebp+0ch ] x o r ecx, 842 b1208h mov ecx, dword ptr [ ebx+ecx ] mov eax, dword p t r [ ebp +8] x o r eax, 842 b1208h add dword ptr [ ebx+eax ], ecx

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 38/49 Transition entre handlers Introduction Obfuscation Machine virtuelle Résolution transition au handler suivant mov ecx, dword p t r [ ebp +0] xor ecx, 149 f0c63h mov ebp, dword ptr [ ebp+4] xor ebp, 842b1208h add ebp, dword ptr [ ebx+14h ] add ecx, dword p t r [ ebx+14h ] jmp ecx ; x : unknown

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 39/49 Architecture virtuelle Introduction Obfuscation Machine virtuelle Résolution handler mov eax, [ebp+8] xor eax, h1_key_2 mov [ebx+eax], 0 mov eax, [ebp] xor eax, h1_key_1 mov ebp, [ebp+4] xor ebp, h1_key_2 add eax, [ebx+14h] add ebp, [ebx+14h] jmp eax ciphered instruction next_handler next_instr arg0 key_1 key_2 handler mov eax, [ebp+8] xor eax, h2_key_2 mov ecx, [ebp+12] xor ecx, h2_key_2 mov ecx, [ebx+ecx] add [ebx+eax], ecx ciphered instruction next_handler next_instr arg0 key_1 key_2 arg1

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 40/49 Énumération des handlers Introduction Obfuscation Machine virtuelle Résolution Énumération directe impossible Nécessite de suivre le flot virtuel pas à pas La taille du binaire indique la présence de nombreux handlers Analyse comportementale de chaque handler par backtrack [demo/4]

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 41/49 Résultat de l analyse Introduction Obfuscation Machine virtuelle Résolution Binding du handler handler 13491h : // reg0 < Expression [ reg0, :+, reg1 ] // handler type : add reg, reg mov eax, dword p t r [ ebp+0ch ] xor eax, 8d3f5d8bh mov eax, dword ptr [ ebx+eax ] mov ecx, dword p t r [ ebp +8] xor ecx, 8d3f5d8bh add dword ptr [ ebx+ecx ], eax

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 42/49 Code virtuel basique Introduction Obfuscation Machine virtuelle Résolution Les premières instructions virtuelles entrypoint 219feh 21ea6h : nop mov r68, 28h add r68, host esp mov r64, dword ptr [ r68 ] mov dword ptr [ esp ], r64 mov r64, 4 add esp, r64 mov r68, 2ch add r68, host esp mov r64, dword ptr [ r68 ] mov dword ptr [ esp ], r64 mov r64, 4 add esp, r64 trap

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 43/49 Macro-instructions virtuelles Introduction Obfuscation Machine virtuelle Résolution Niveau d abstraction supérieur Reconnaissance de patterns caractéristiques Reconstruction d un assembleur plus haut niveau Apparition des fonctions (call, ret)

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 44/49 Macro-code virtuel Introduction Obfuscation Machine virtuelle Résolution Les premières instructions virtuelles entrypoint 219feh 21ea6h : mov dword ptr [ esp ], dword ptr [ host esp+28h ] add esp, 4 mov dword ptr [ esp ], dword ptr [ host esp+2ch ] add esp, 4 mov ebp, esp add esp, 234h mov r64, dword ptr [ ebp+200h ] xor r64, 1 j r z loc 2d630h 2d8ffh, r64 s y s c a l l a l l o c p t r r64, 0ch mov dword ptr [ ebp+200h ], r64 loc 2d630h 2d8ffh :

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 45/49 Décompilation Introduction Obfuscation Machine virtuelle Résolution La sémantique des instructions est très simple La forme du code fait penser à du C Vérifions

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 46/49 Validation Introduction Obfuscation Machine virtuelle Résolution Résolution purement statique

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 47/49 Plan 1 2 3 4

s générale A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 48/49 Poeut : application inverses de transformations Suppression d éléments neutres ajoutés. Factorisation de flots dupliqués, Réduction du graphe de contrôle, Niveau d abstraction constant. T2 : remontée des niveaux d abstraction Quelques millions d instructions dans un driver, une machine virtuelle, 112 handlers, 800 lignes de macro-assembleur, 300 lignes de C, Extraction progressive de la sémantique.

A. Gazet & Y. Guillot Déprotection semi-automatique de binaire 49/49 Remerciements L infâme Serpillierre, Le(s) concepteur(s) du T2. http://esec.fr.sogeti.com/blog Vos questions?