sthack 2014 - ninon eyrolles obfuscation 101

53
OBFUSCATION 101 Ou : Pourquoi faire simple quand on peut faire compliqu´ e? Ninon Eyrolles

Upload: sthack

Post on 09-Jun-2015

355 views

Category:

Technology


2 download

DESCRIPTION

The general purpose of software obfuscation is to make the analysis of software as difficult and expensive as possible, while keeping the original behaviour of the program. Its main applications are the protection of sensitive code and/or intellectual property. This talk will show you the two major types of obfuscation (control flow, data flow), several techniques of these two categories, and then concrete examples of "source-to-source" obfuscation applied to the Python langage. Bio : Native of Bordeaux, Ninon Eyrolles completed her studies at Bordeaux 1 University (Master Cryptologie et Sécurité Informatique), and did an internship in the LaBRI. Then she exiled herself to Paris for her final internship, and stayed there to start a thesis on software obfuscation.

TRANSCRIPT

Page 1: StHack 2014 - Ninon Eyrolles Obfuscation 101

OBFUSCATION 101Ou : � Pourquoi faire simple quand on peut faire complique ? �

Ninon Eyrolles

Page 2: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Plan

1 IntroductionQu’est-ce que l’obfuscation ?

2 Obfuscation du flot de controle

3 Obuscation du flot de donnees

4 Obfuscation Python

Page 3: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Qu’est-ce que l’obfuscation ?

Prelude

1 def checkauth(password):2 if (password == "chunkybacon"):3 print("Here’s some super private information ...")4 else:5 print("Wrong password , go away!")

Page 4: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Qu’est-ce que l’obfuscation ?

L’obfuscation, ou � obscurcissement � de code

Definition

L’obfuscation consiste a rendre l’analyse de code la plus complexe et laplus couteuse possible, tout en conservant le comportement original (lasemantique observable) du programme.

Page 5: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Qu’est-ce que l’obfuscation ?

L’obfuscation, ou � obscurcissement � de code

Definition

L’obfuscation consiste a rendre l’analyse de code la plus complexe et laplus couteuse possible, tout en conservant le comportement original (lasemantique observable) du programme.

Page 6: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Qu’est-ce que l’obfuscation ?

L’obfuscation, ou � obscurcissement � de code

Definition

L’obfuscation consiste a rendre l’analyse de code la plus complexe et laplus couteuse possible, tout en conservant le comportement original (lasemantique observable) du programme.

Page 7: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Qu’est-ce que l’obfuscation ?

Definition plus formelle

On peut definir obfuscateur ideal O ainsi (pour tout programme P) :

1. Fonctionnalite : P et sa version obfusquee O(P) doivent avoir lememe comportement au niveau des entrees / sorties.

2. Efficacite : le temps d’execution et la taille de O(P) ne doivent pasetre trop grands par rapport a ceux de P.

3. Obfuscation : on ne peut pas apprendre plus de l’analyse de O(P)que de l’observation de ses entrees et sorties.

Page 8: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Qu’est-ce que l’obfuscation ?

Definition plus formelle

On peut definir obfuscateur ideal O ainsi (pour tout programme P) :

1. Fonctionnalite : P et sa version obfusquee O(P) doivent avoir lememe comportement au niveau des entrees / sorties.

2. Efficacite : le temps d’execution et la taille de O(P) ne doivent pasetre trop grands par rapport a ceux de P.

3. Obfuscation : on ne peut pas apprendre plus de l’analyse de O(P)que de l’observation de ses entrees et sorties.

→ Un tel obfuscateur n’existe pas pour tous les programmes ! a

aOn the (Im)possibility of Obfuscating Programs, Barack et al.

Page 9: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Qu’est-ce que l’obfuscation ?

Pourquoi, ou et comment obfusquer ?

Motivations

protection du code sensible : dissimuler des cles embarquees dans lecode par exemple

protection d’algorithme : question de propriete intellectuelle

Differents niveaux

Problemes poses

Page 10: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Qu’est-ce que l’obfuscation ?

Pourquoi, ou et comment obfusquer ?

Motivations

Differents niveaux

code source

langage intermediaire (IR)

code assembleur

Problemes poses

Page 11: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Qu’est-ce que l’obfuscation ?

Pourquoi, ou et comment obfusquer ?

Motivations

Differents niveaux

Problemes poses

→ on veut obfusquer de facon automatique→ il faut trouver un compromis performances / obfuscation

Page 12: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Qu’est-ce que l’obfuscation ?

Plusieurs types d’obfuscation

obfuscation du flot de controle (control flow)

obfuscation du flot de donnees (data flow)

reecriture des symboles : nom de variable, de fonction...

chiffrement du code, packing...

Page 13: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Qu’est-ce que l’obfuscation ?

Plusieurs types d’obfuscation

obfuscation du flot de controle (control flow)

obfuscation du flot de donnees (data flow)

reecriture des symboles : nom de variable, de fonction...

chiffrement du code, packing...

Page 14: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Plan

1 Introduction

2 Obfuscation du flot de controleDefinitionsObfuscation du control flowApplatissement de code

3 Obuscation du flot de donnees

4 Obfuscation Python

Page 15: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Definitions

Le flot de controle (control flow)

represente le flot d’execution d’un programme : les differentschemins possibles lors de l’execution

on retrouve les boucles (for, while), les conditions (if), lesappels a d’autres fonctions...

on le modelise grace a un Control Flow Graph (CFG), qui representeles basic blocks et les liaisons entre eux

Page 16: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Definitions

Le flot de controle (control flow)

x = 10y = 0

while(x ≥ 0)

y = y + 2x = x − 1

return y

true false

Figure : CFG de pseudo-code source

Figure : CFG de code assembleur

Page 17: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Obfuscation du control flow

Diverses techniques

On cherche a transformer le CFG :

deroulage des boucles for

inlining de fonctions

insertion de junk code

predicats opaques

applatissement de flot de controle (ou control flow flattening)

Page 18: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Obfuscation du control flow

Diverses techniques

On cherche a transformer le CFG :

deroulage des boucles for

inlining de fonctions

insertion de junk code

predicats opaques

applatissement de flot de controle (ou control flow flattening)

Page 19: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Obfuscation du control flow

Diverses techniques

On cherche a transformer le CFG :

deroulage des boucles for

inlining de fonctions

insertion de junk code

predicats opaques

applatissement de flot de controle (ou control flow flattening)

Page 20: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Obfuscation du control flow

Diverses techniques

On cherche a transformer le CFG :

deroulage des boucles for

inlining de fonctions

insertion de junk code

predicats opaques

applatissement de flot de controle (ou control flow flattening)

Page 21: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Obfuscation du control flow

Diverses techniques

On cherche a transformer le CFG :

deroulage des boucles for

inlining de fonctions

insertion de junk code

predicats opaques

applatissement de flot de controle (ou control flow flattening)

Page 22: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Obfuscation du control flow

Diverses techniques

On cherche a transformer le CFG :

deroulage des boucles for

inlining de fonctions

insertion de junk code

predicats opaques

applatissement de flot de controle (ou control flow flattening)

Page 23: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Applatissement de code

Definition

Applatissement de flot de controle

transformer la structure du programme pour rendre la reconstructiondu CFG plus difficile

coder les informations du flot de controle et cacher le resultat dansle flot de donnees

Page 24: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Applatissement de code

Principe

Implementation

les basic blocks sont numerotes

un dispatcher gere l’execution

une variable determine quelbloc doit etre execute apres lebloc courant

a chaque fin de bloc, cettevariable est remise a jour, et onva vers le dispatcher quiredirige vers le bloc suivant.

INITval = 1

DISPATCHERswitch(val)

block 1

some codeval = 2

block 2

some codeval = 3

block 3

some codereturn

Figure : Principe de l’applatissement decode

Page 25: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Applatissement de code

Exemple

Figure : CFG original

Figure : CFG apres applatissement duflot de controle

Page 26: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Plan

1 Introduction

2 Obfuscation du flot de controle

3 Obuscation du flot de donneesDefinitionQuelques techniques d’obfuscation du flot de donneesLa Whitebox

4 Obfuscation Python

Page 27: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Definition

Analyse du flot de donnees

Plusieurs axes

informations fournies par les donnees du programme : chaınes decaracteres, entiers...

relations entre les donnees ou entre les entrees et sorties (duprogramme, d’une fonction, d’un basic block)

interactions entre le programme et les donnees : lectures, ecritures,emplacement des donnees dans la memoire...

notions plus formelles : variables � vivantes �(live), equations de flotde donnees, analyse avant et arriere...

Page 28: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Quelques techniques d’obfuscation du flot de donnees

Exemples

Pour complexifier l’analyse des donnees :

encoder les constantes (chaınes de caracteres par exemple)

insertion de donnees inutiles (proche du junk code)

complexification des operations arithmetiques sur les donneesx + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)

modifier la facon dont sont stockees / manipulees les donnees :eclater les tableaux, changer la convention d’appel des fonctions...

encoder les donnees lors des lectures et ecritures

f (x)

MEMORYx xf f −1

Page 29: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Quelques techniques d’obfuscation du flot de donnees

Exemples

Pour complexifier l’analyse des donnees :

encoder les constantes (chaınes de caracteres par exemple)

insertion de donnees inutiles (proche du junk code)

complexification des operations arithmetiques sur les donneesx + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)

modifier la facon dont sont stockees / manipulees les donnees :eclater les tableaux, changer la convention d’appel des fonctions...

encoder les donnees lors des lectures et ecritures

f (x)

MEMORYx xf f −1

Page 30: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Quelques techniques d’obfuscation du flot de donnees

Exemples

Pour complexifier l’analyse des donnees :

encoder les constantes (chaınes de caracteres par exemple)

insertion de donnees inutiles (proche du junk code)

complexification des operations arithmetiques sur les donneesx + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)

modifier la facon dont sont stockees / manipulees les donnees :eclater les tableaux, changer la convention d’appel des fonctions...

encoder les donnees lors des lectures et ecritures

f (x)

MEMORYx xf f −1

Page 31: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Quelques techniques d’obfuscation du flot de donnees

Exemples

Pour complexifier l’analyse des donnees :

encoder les constantes (chaınes de caracteres par exemple)

insertion de donnees inutiles (proche du junk code)

complexification des operations arithmetiques sur les donneesx + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)

modifier la facon dont sont stockees / manipulees les donnees :eclater les tableaux, changer la convention d’appel des fonctions...

encoder les donnees lors des lectures et ecritures

f (x)

MEMORYx xf f −1

Page 32: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Quelques techniques d’obfuscation du flot de donnees

Exemples

Pour complexifier l’analyse des donnees :

encoder les constantes (chaınes de caracteres par exemple)

insertion de donnees inutiles (proche du junk code)

complexification des operations arithmetiques sur les donneesx + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)

modifier la facon dont sont stockees / manipulees les donnees :eclater les tableaux, changer la convention d’appel des fonctions...

encoder les donnees lors des lectures et ecritures

f (x)

MEMORYx xf f −1

Page 33: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Quelques techniques d’obfuscation du flot de donnees

Exemples

Pour complexifier l’analyse des donnees :

encoder les constantes (chaınes de caracteres par exemple)

insertion de donnees inutiles (proche du junk code)

complexification des operations arithmetiques sur les donneesx + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)

modifier la facon dont sont stockees / manipulees les donnees :eclater les tableaux, changer la convention d’appel des fonctions...

encoder les donnees lors des lectures et ecritures

f (x)

MEMORYx xf f −1

Page 34: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

La Whitebox

Definition d’une Whitebox

Algorithme cryptographique

prend en entree un message et une cle

fournit un message chiffre en sortie

Whitebox

Whitebox attack context (WBAC)

Page 35: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

La Whitebox

Definition d’une Whitebox

Algorithme cryptographique

Whitebox

implementation particuliere d’un algorithme cryptographique

la cle est incorporee dans l’algorithme

Whitebox attack context (WBAC)

Page 36: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

La Whitebox

Definition d’une Whitebox

Algorithme cryptographique

Whitebox

Whitebox attack context (WBAC)

l’attaquant a tous les privileges, il a acces a l’implementation del’algorithme

il peut observer l’execution du programme (avec des cles instanciees)

les details internes de l’algorithme sont visibles et modifiables

Page 37: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

La Whitebox

Definition d’une whitebox

White-box AES

etapes de l’AES = SubBytes, ShiftRows, MixColumns etAddRoundKey

on decrit les etapes de l’AES avec des tables (lookup-tables)

on applique des encodages pour masquer les entrees et les sorties

Page 38: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

La Whitebox

Definition d’une whitebox

White-box AES

etapes de l’AES = SubBytes, ShiftRows, MixColumns etAddRoundKey

on decrit les etapes de l’AES avec des tables (lookup-tables)

on applique des encodages pour masquer les entrees et les sorties

S(x ⊕ k r−1i,j )F−1 G G−1 MC(x) H

Figure : Principe d’encodage des lookup-tables

Page 39: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

La Whitebox

Definition d’une whitebox

White-box AES

etapes de l’AES = SubBytes, ShiftRows, MixColumns etAddRoundKey

on decrit les etapes de l’AES avec des tables (lookup-tables)

on applique des encodages pour masquer les entrees et les sorties

F−1 ◦ S(x ⊕ k r−1i,j ) ◦ G G−1 ◦MC(x) ◦ H

Figure : Principe d’encodage des lookup-table

Page 40: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Plan

1 Introduction

2 Obfuscation du flot de controle

3 Obuscation du flot de donnees

4 Obfuscation PythonPourquoi obfusquer du code Python ?Comment obfusquer du code Python ?Obfuscation source a sourceQuelques codes d’exemples

Page 41: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Pourquoi obfusquer du code Python ?

Contexte

applications developpees en Python (DropBox par exemple) : uninterpreteur modifie est livre avec l’application

creations de � packeurs �pour complexifier l’acces de l’utilisateur aucode source

trois axes d’obfuscation :

- l’interpreteur modifie pour rendre difficile l’analyse des fichierscompiles

- differentes mesures pour rendre la decompilation plus difficile- l’obfuscation source a source dans le cas ou le code est retrouve

Page 42: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Comment obfusquer du code Python ?

Obfuscations propres a Python

Modification de l’interpreteur

compilation statique du programme et des modules necessaires

permutation des opcodes du code compile

Prevention de la decompilation

Page 43: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Comment obfusquer du code Python ?

Obfuscations propres a Python

Modification de l’interpreteur

Prevention de la decompilation

insertion d’opcodes inutiles

transformation des operateurs lors de l’execution

Page 44: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Obfuscation source a source

L’arbre syntaxique abstrait

Arbre syntaxique abstrait (ou AbstractSyntax Tree) : representation abstraite d’unprogramme par un arbre.

les nœuds representent les operateurs

les feuilles representent les operandes

×

+

x y

z

Figure : Representation del’AST de (x + y) × z

Page 45: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Obfuscation source a source

Le module ast

def func(x):a = 0;for i in range (0,10):

a = a + xreturn a

Module(body=[

FunctionDef(name=’func’,args=Name(id=’x’)body=[

Assign(Name(id=’a’), value=Num(n=0)),For(

Name(id=’i’),Call(Name(id=’range’),

args=[Num(n=0), Num(n=10)])body=[

Assign(Name(id=’a’), value=BinOp(

left=Name(id=’a’),op=Add(),right=Name(id=’x’)))])

Return(value=Name(id=’a’)])

Figure : Exemple de code Python et son AST (simplifie) obtenu avec le moduleast

Page 46: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Obfuscation source a source

Le source a source en Python

Principe

Figure : Flot de compilation pour le source-a-source Python

Exemples d’obfuscation

Page 47: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Obfuscation source a source

Le source a source en Python

Principe

Exemples d’obfuscation

transformation du flot de controle : boucles for en boucleswhile, instructions if en boucles while, modification de la creationde certains objets comme les list comprehension

transformation du flot de donnees : encodage des chaınes decaracteres, insertion d’expressions booleennes-arithmetiques

transformation des symboles : remplacement des noms defonctions et variables par des chaınes de caracteres aleatoires

transformation � facon programmation fonctionnelle � : lesfonctions sont remplacees par des fonctions lambda

Page 48: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Quelques codes d’exemples

Obfuscation de flot de controle

1 for i in range (0,10):2 a = a + x

1 uijjpf = (range(0, 10)).__iter__ ()2 try:3 while 1:4 i = uijjpf.next()5 a = (a + x)6 except StopIteration:7 pass

Figure : Exemple d’obfuscation de boucle for

Page 49: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Quelques codes d’exemples

Obfuscation de flot de controle

1 res = [i[0] for i in2 [j for j in3 [[1 ,2] ,[3 ,4] ,[5 ,6]]]]

1 def baizvc ():2 uskewh = []3 fyxvcb = ([[1, 2], [3, 4], [5,

6]]).__iter__ ()4 try:5 while 1:6 j = fyxvcb.next()7 uskewh.append(j)8 except StopIteration:9 pass

10 return uskewh1112 def rphfuq ():13 ueovat = []14 gmivjw = baizvc ().__iter__ ()15 try:16 while 1:17 i = gmivjw.next()18 ueovat.append(i[0])19 except StopIteration:20 pass21 return ueovat22 res = rphfuq ()

Figure : Exemple d’obfuscation de declaration de list comprehension

Page 50: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Quelques codes d’exemples

Obfuscation facon programmation fonctionnelle

def ack1(M, N):if M == 0:

return N + 1elif N == 0:

return ack1(M - 1, 1)else:

return ack1(M - 1,ack1(M, N - 1))

ack1 = (lambda M, N: (lambda _: ((lambda _: (_.__setitem__(’$’,((_[’N’] if (’N’ in _) else

N) + 1)), _)[(-1)])(_) if ((_[’M’] if (’M’ in _) else M)== 0) else (lambda _: ((lambda _: (_.__setitem__(’$’,(_[’ack1’] if (’ack1’ in _)

else ack1)(((_[’M’] if (’M’in _) else M) - 1), 1)), _)[(-1)])(_) if ((_[’N’] if (’N’ in _) else N) == 0) else (lambda _: (_.__setitem__(’$’,(_[’ack1’] if (’ack1’ in _)

else ack1)(((_[’M’] if (’M’in _) else M) - 1), (_[’ack1’] if (’ack1’ in _) else ack1)((_[’M’] if (’M’ in _) else M), ((_[’N’] if (’N’ in _)else N) - 1)))), _)[(-1)])(_)))(_)))({’M’: M, ’N’: N, ’$’:None})[’$’])

Figure : Obfuscation de la fonction d’Ackermann

Page 51: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Conclusion

L’obfuscation

utilisee pour rendre l’analyse de code plus difficile

obfuscation de flot de controle, de flot de donnees

obfuscation Python : mise en pratique des techniques

Travaux futurs

generateur d’expressions booleennes-arithmetiques

mise au point d’un module d’obfuscation

nouvelles techniques d’obfuscation Python ?

Page 52: StHack 2014 - Ninon Eyrolles Obfuscation 101

[email protected] I @quarkslab.com

Questions?

Remerciements : Serge Guelton pour l’obfuscation Python, et toutel’equipe de Quarkslab

Page 53: StHack 2014 - Ninon Eyrolles Obfuscation 101

Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python

Table des matieres

1 IntroductionQu’est-ce que l’obfuscation ?

2 Obfuscation du flot de controleDefinitionsObfuscation du control flowApplatissement de code

3 Obuscation du flot de donneesDefinitionQuelques techniques d’obfuscation du flot de donneesLa Whitebox

4 Obfuscation PythonPourquoi obfusquer du code Python ?Comment obfusquer du code Python ?Obfuscation source a sourceQuelques codes d’exemples