SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
OBFUSCATION 101
Ou :  Pourquoi faire simple quand on peut faire compliqu´e ? 
Ninon Eyrolles
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Plan
1 Introduction
Qu’est-ce que l’obfuscation ?
2 Obfuscation du flot de contrˆole
3 Obuscation du flot de donn´ees
4 Obfuscation Python
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ?
Pr´elude
1 def checkauth(password):
2 if (password == chunkybacon ):
3 print(Here ’s some super private information ...)
4 else:
5 print(Wrong password , go away!)
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ?
L’obfuscation, ou  obscurcissement  de code
D´efinition
L’obfuscation consiste `a rendre l’analyse de code la plus complexe et la
plus coˆuteuse possible, tout en conservant le comportement original (la
s´emantique observable) du programme.
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ?
L’obfuscation, ou  obscurcissement  de code
D´efinition
L’obfuscation consiste `a rendre l’analyse de code la plus complexe et la
plus coˆuteuse possible, tout en conservant le comportement original (la
s´emantique observable) du programme.
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ?
L’obfuscation, ou  obscurcissement  de code
D´efinition
L’obfuscation consiste `a rendre l’analyse de code la plus complexe et la
plus coˆuteuse possible, tout en conservant le comportement original (la
s´emantique observable) du programme.
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ?
D´efinition plus formelle
On peut d´efinir obfuscateur id´eal O ainsi (pour tout programme P) :
1. Fonctionnalit´e : P et sa version obfusqu´ee O(P) doivent avoir le
mˆeme comportement au niveau des entr´ees / sorties.
2. Efficacit´e : le temps d’ex´ecution et la taille de O(P) ne doivent pas
ˆetre 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 entr´ees et sorties.
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ?
D´efinition plus formelle
On peut d´efinir obfuscateur id´eal O ainsi (pour tout programme P) :
1. Fonctionnalit´e : P et sa version obfusqu´ee O(P) doivent avoir le
mˆeme comportement au niveau des entr´ees / sorties.
2. Efficacit´e : le temps d’ex´ecution et la taille de O(P) ne doivent pas
ˆetre 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 entr´ees et sorties.
→ Un tel obfuscateur n’existe pas pour tous les programmes ! a
aOn the (Im)possibility of Obfuscating Programs, Barack et al.
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ?
Pourquoi, o`u et comment obfusquer ?
Motivations
protection du code sensible : dissimuler des cl´es embarqu´ees dans le
code par exemple
protection d’algorithme : question de propri´et´e intellectuelle
Diff´erents niveaux
Probl`emes pos´es
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ?
Pourquoi, o`u et comment obfusquer ?
Motivations
Diff´erents niveaux
code source
langage interm´ediaire (IR)
code assembleur
Probl`emes pos´es
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ?
Pourquoi, o`u et comment obfusquer ?
Motivations
Diff´erents niveaux
Probl`emes pos´es
→ on veut obfusquer de fa¸con automatique
→ il faut trouver un compromis performances / obfuscation
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ?
Plusieurs types d’obfuscation
obfuscation du flot de contrˆole (control flow)
obfuscation du flot de donn´ees (data flow)
r´e´ecriture des symboles : nom de variable, de fonction...
chiffrement du code, packing...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ?
Plusieurs types d’obfuscation
obfuscation du flot de contrˆole (control flow)
obfuscation du flot de donn´ees (data flow)
r´e´ecriture des symboles : nom de variable, de fonction...
chiffrement du code, packing...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Plan
1 Introduction
2 Obfuscation du flot de contrˆole
D´efinitions
Obfuscation du control flow
Applatissement de code
3 Obuscation du flot de donn´ees
4 Obfuscation Python
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
D´efinitions
Le flot de contrˆole (control flow)
repr´esente le flot d’ex´ecution d’un programme : les diff´erents
chemins possibles lors de l’ex´ecution
on retrouve les boucles (for, while), les conditions (if), les
appels `a d’autres fonctions...
on le mod´elise grˆace `a un Control Flow Graph (CFG), qui repr´esente
les basic blocks et les liaisons entre eux
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
D´efinitions
Le flot de contrˆole (control flow)
x = 10
y = 0
while(x ≥ 0)
y = y + 2
x = x − 1
return y
true false
Figure : CFG de pseudo-code source
Figure : CFG de code assembleur
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation du control flow
Diverses techniques
On cherche `a transformer le CFG :
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation du control flow
Diverses techniques
On cherche `a transformer le CFG :
d´eroulage des boucles for
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation du control flow
Diverses techniques
On cherche `a transformer le CFG :
d´eroulage des boucles for
inlining de fonctions
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation du control flow
Diverses techniques
On cherche `a transformer le CFG :
d´eroulage des boucles for
inlining de fonctions
insertion de junk code
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation du control flow
Diverses techniques
On cherche `a transformer le CFG :
d´eroulage des boucles for
inlining de fonctions
insertion de junk code
pr´edicats opaques
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation du control flow
Diverses techniques
On cherche `a transformer le CFG :
d´eroulage des boucles for
inlining de fonctions
insertion de junk code
pr´edicats opaques
applatissement de flot de contrˆole (ou control flow flattening)
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Applatissement de code
D´efinition
Applatissement de flot de contrˆole
transformer la structure du programme pour rendre la reconstruction
du CFG plus difficile
coder les informations du flot de contrˆole et cacher le r´esultat dans
le flot de donn´ees
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Applatissement de code
Principe
Impl´ementation
les basic blocks sont num´erot´es
un dispatcher g`ere l’ex´ecution
une variable d´etermine quel
bloc doit ˆetre ex´ecut´e apr`es le
bloc courant
`a chaque fin de bloc, cette
variable est remise `a jour, et on
va vers le dispatcher qui
redirige vers le bloc suivant.
INIT
val = 1
DISPATCHER
switch(val)
block 1
some code
val = 2
block 2
some code
val = 3
block 3
some code
return
Figure : Principe de l’applatissement de
code
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Applatissement de code
Exemple
Figure : CFG original
Figure : CFG apr`es applatissement du
flot de contrˆole
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Plan
1 Introduction
2 Obfuscation du flot de contrˆole
3 Obuscation du flot de donn´ees
D´efinition
Quelques techniques d’obfuscation du flot de donn´ees
La Whitebox
4 Obfuscation Python
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
D´efinition
Analyse du flot de donn´ees
Plusieurs axes
informations fournies par les donn´ees du programme : chaˆınes de
caract`eres, entiers...
relations entre les donn´ees ou entre les entr´ees et sorties (du
programme, d’une fonction, d’un basic block)
interactions entre le programme et les donn´ees : lectures, ´ecritures,
emplacement des donn´ees dans la m´emoire...
notions plus formelles : variables  vivantes (live), ´equations de flot
de donn´ees, analyse avant et arri`ere...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques techniques d’obfuscation du flot de donn´ees
Exemples
Pour complexifier l’analyse des donn´ees :
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques techniques d’obfuscation du flot de donn´ees
Exemples
Pour complexifier l’analyse des donn´ees :
encoder les constantes (chaˆınes de caract`eres par exemple)
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques techniques d’obfuscation du flot de donn´ees
Exemples
Pour complexifier l’analyse des donn´ees :
encoder les constantes (chaˆınes de caract`eres par exemple)
insertion de donn´ees inutiles (proche du junk code)
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques techniques d’obfuscation du flot de donn´ees
Exemples
Pour complexifier l’analyse des donn´ees :
encoder les constantes (chaˆınes de caract`eres par exemple)
insertion de donn´ees inutiles (proche du junk code)
complexification des op´erations arithm´etiques sur les donn´ees
x + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques techniques d’obfuscation du flot de donn´ees
Exemples
Pour complexifier l’analyse des donn´ees :
encoder les constantes (chaˆınes de caract`eres par exemple)
insertion de donn´ees inutiles (proche du junk code)
complexification des op´erations arithm´etiques sur les donn´ees
x + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)
modifier la fa¸con dont sont stock´ees / manipul´ees les donn´ees :
´eclater les tableaux, changer la convention d’appel des fonctions...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques techniques d’obfuscation du flot de donn´ees
Exemples
Pour complexifier l’analyse des donn´ees :
encoder les constantes (chaˆınes de caract`eres par exemple)
insertion de donn´ees inutiles (proche du junk code)
complexification des op´erations arithm´etiques sur les donn´ees
x + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)
modifier la fa¸con dont sont stock´ees / manipul´ees les donn´ees :
´eclater les tableaux, changer la convention d’appel des fonctions...
encoder les donn´ees lors des lectures et ´ecritures
f (x)
MEMORYx xf f −1
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
La Whitebox
D´efinition d’une Whitebox
Algorithme cryptographique
prend en entr´ee un message et une cl´e
fournit un message chiffr´e en sortie
Whitebox
Whitebox attack context (WBAC)
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
La Whitebox
D´efinition d’une Whitebox
Algorithme cryptographique
Whitebox
impl´ementation particuli`ere d’un algorithme cryptographique
la cl´e est incorpor´ee dans l’algorithme
Whitebox attack context (WBAC)
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
La Whitebox
D´efinition d’une Whitebox
Algorithme cryptographique
Whitebox
Whitebox attack context (WBAC)
l’attaquant a tous les privil`eges, il a acc`es `a l’impl´ementation de
l’algorithme
il peut observer l’ex´ecution du programme (avec des cl´es instanci´ees)
les d´etails internes de l’algorithme sont visibles et modifiables
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
La Whitebox
D´efinition d’une whitebox
White-box AES
´etapes de l’AES = SubBytes, ShiftRows, MixColumns et
AddRoundKey
on d´ecrit les ´etapes de l’AES avec des tables (lookup-tables)
on applique des encodages pour masquer les entr´ees et les sorties
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
La Whitebox
D´efinition d’une whitebox
White-box AES
´etapes de l’AES = SubBytes, ShiftRows, MixColumns et
AddRoundKey
on d´ecrit les ´etapes de l’AES avec des tables (lookup-tables)
on applique des encodages pour masquer les entr´ees et les sorties
S(x ⊕ kr−1
i,j )F−1
G G−1 MC(x) H
Figure : Principe d’encodage des lookup-tables
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
La Whitebox
D´efinition d’une whitebox
White-box AES
´etapes de l’AES = SubBytes, ShiftRows, MixColumns et
AddRoundKey
on d´ecrit les ´etapes de l’AES avec des tables (lookup-tables)
on applique des encodages pour masquer les entr´ees et les sorties
F−1
◦ S(x ⊕ kr−1
i,j ) ◦ G G−1
◦ MC(x) ◦ H
Figure : Principe d’encodage des lookup-table
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Plan
1 Introduction
2 Obfuscation du flot de contrˆole
3 Obuscation du flot de donn´ees
4 Obfuscation Python
Pourquoi obfusquer du code Python ?
Comment obfusquer du code Python ?
Obfuscation source `a source
Quelques codes d’exemples
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Pourquoi obfusquer du code Python ?
Contexte
applications d´evelopp´ees en Python (DropBox par exemple) : un
interpr´eteur modifi´e est livr´e avec l’application
cr´eations de  packeurs pour complexifier l’acc`es de l’utilisateur au
code source
trois axes d’obfuscation :
- l’interpr´eteur modifi´e pour rendre difficile l’analyse des fichiers
compil´es
- diff´erentes mesures pour rendre la d´ecompilation plus difficile
- l’obfuscation source `a source dans le cas o`u le code est retrouv´e
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Comment obfusquer du code Python ?
Obfuscations propres `a Python
Modification de l’interpr´eteur
compilation statique du programme et des modules n´ecessaires
permutation des opcodes du code compil´e
Pr´evention de la d´ecompilation
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Comment obfusquer du code Python ?
Obfuscations propres `a Python
Modification de l’interpr´eteur
Pr´evention de la d´ecompilation
insertion d’opcodes inutiles
transformation des op´erateurs lors de l’ex´ecution
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation source `a source
L’arbre syntaxique abstrait
Arbre syntaxique abstrait (ou Abstract
Syntax Tree) : repr´esentation abstraite d’un
programme par un arbre.
les nœuds repr´esentent les op´erateurs
les feuilles repr´esentent les op´erandes
×
+
x y
z
Figure : Repr´esentation de
l’AST de (x + y) × z
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation source `a source
Le module ast
def func(x):
a = 0;
for i in range (0 ,10):
a = a + x
return 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 (simplifi´e) obtenu avec le module
ast
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees 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
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation source `a source
Le source `a source en Python
Principe
Exemples d’obfuscation
transformation du flot de contrˆole : boucles for en boucles
while, instructions if en boucles while, modification de la cr´eation
de certains objets comme les list comprehension
transformation du flot de donn´ees : encodage des chaˆınes de
caract`eres, insertion d’expressions bool´eennes-arithm´etiques
transformation des symboles : remplacement des noms de
fonctions et variables par des chaˆınes de caract`eres al´eatoires
transformation  fa¸con programmation fonctionnelle  : les
fonctions sont remplac´ees par des fonctions lambda
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques codes d’exemples
Obfuscation de flot de contrˆole
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
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques codes d’exemples
Obfuscation de flot de contrˆole
1 res = [i[0] for i in
2 [j for j in
3 [[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 uskewh
11
12 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 pass
21 return ueovat
22 res = rphfuq ()
Figure : Exemple d’obfuscation de d´eclaration de list comprehension
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques codes d’exemples
Obfuscation fa¸con programmation fonctionnelle
def ack1(M, N):
if M == 0:
return N + 1
elif 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
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Conclusion
L’obfuscation
utilis´ee pour rendre l’analyse de code plus difficile
obfuscation de flot de contrˆole, de flot de donn´ees
obfuscation Python : mise en pratique des techniques
Travaux futurs
g´en´erateur d’expressions bool´eennes-arithmetiques
mise au point d’un module d’obfuscation
nouvelles techniques d’obfuscation Python ?
contact@quarkslab.com I @quarkslab.com
Questions?
Remerciements : Serge Guelton pour l’obfuscation Python, et toute
l’´equipe de Quarkslab
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Table des mati`eres
1 Introduction
Qu’est-ce que l’obfuscation ?
2 Obfuscation du flot de contrˆole
D´efinitions
Obfuscation du control flow
Applatissement de code
3 Obuscation du flot de donn´ees
D´efinition
Quelques techniques d’obfuscation du flot de donn´ees
La Whitebox
4 Obfuscation Python
Pourquoi obfusquer du code Python ?
Comment obfusquer du code Python ?
Obfuscation source `a source
Quelques codes d’exemples

Contenu connexe

Tendances

Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage PythonAziz Darouichi
 
Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Emeric Tapachès
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesECAM Brussels Engineering School
 
Partie 14: Entrée/Sortie — Programmation orientée objet en C++
Partie 14: Entrée/Sortie — Programmation orientée objet en C++Partie 14: Entrée/Sortie — Programmation orientée objet en C++
Partie 14: Entrée/Sortie — Programmation orientée objet en C++Fabio Hernandez
 
Partie 10: Classes Génériques — Programmation orientée objet en C++
Partie 10: Classes Génériques — Programmation orientée objet en C++Partie 10: Classes Génériques — Programmation orientée objet en C++
Partie 10: Classes Génériques — Programmation orientée objet en C++Fabio Hernandez
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Aziz Darouichi
 
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++Fabio Hernandez
 
Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)Innobec
 
PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensionsjulien pauli
 
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++Fabio Hernandez
 
Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++Fabio Hernandez
 
Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++Fabio Hernandez
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPjulien pauli
 

Tendances (20)

Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
 
Formation python
Formation pythonFormation python
Formation python
 
Python après 15 ans de JAVA
Python après 15 ans de JAVAPython après 15 ans de JAVA
Python après 15 ans de JAVA
 
Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
 
Partie 14: Entrée/Sortie — Programmation orientée objet en C++
Partie 14: Entrée/Sortie — Programmation orientée objet en C++Partie 14: Entrée/Sortie — Programmation orientée objet en C++
Partie 14: Entrée/Sortie — Programmation orientée objet en C++
 
Partie 10: Classes Génériques — Programmation orientée objet en C++
Partie 10: Classes Génériques — Programmation orientée objet en C++Partie 10: Classes Génériques — Programmation orientée objet en C++
Partie 10: Classes Génériques — Programmation orientée objet en C++
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
 
Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)
 
PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensions
 
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++
Partie 3: Contrôle d'Exécution — Programmation orientée objet en C++
 
Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++
 
Tp5 chaines
Tp5 chainesTp5 chaines
Tp5 chaines
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHP
 

En vedette

Les menaces applicatives
Les menaces applicativesLes menaces applicatives
Les menaces applicativesBee_Ware
 
ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...
ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...
ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...Cyber Security Alliance
 
CustomerGauge B2b Net Promoter Score Measurement
CustomerGauge B2b Net Promoter Score MeasurementCustomerGauge B2b Net Promoter Score Measurement
CustomerGauge B2b Net Promoter Score MeasurementCustomerGauge
 
Présentation Identités Actives
Présentation Identités ActivesPrésentation Identités Actives
Présentation Identités ActivesFing
 
FINANCEMENT DES ENTREPRISES IT AU SENEGAL
FINANCEMENT DES ENTREPRISES IT AU SENEGALFINANCEMENT DES ENTREPRISES IT AU SENEGAL
FINANCEMENT DES ENTREPRISES IT AU SENEGALGroupe IDYAL
 
Chroniques de Fouesnant - nr-wlu3
Chroniques de Fouesnant -   nr-wlu3Chroniques de Fouesnant -   nr-wlu3
Chroniques de Fouesnant - nr-wlu3Foenizella.com
 
10 erreurs à ne pas commettre quand vous organisez un évènement !
10 erreurs à ne pas commettre quand vous organisez un évènement !10 erreurs à ne pas commettre quand vous organisez un évènement !
10 erreurs à ne pas commettre quand vous organisez un évènement !Davy Courteaux
 
Evaluación antecedentes
Evaluación antecedentesEvaluación antecedentes
Evaluación antecedentesAdalberto
 
Eglises du Pays de Fouesnant - p-pgiv1
Eglises du Pays de Fouesnant - p-pgiv1Eglises du Pays de Fouesnant - p-pgiv1
Eglises du Pays de Fouesnant - p-pgiv1Foenizella.com
 
PresentacióN Un DíA En La MontañA
PresentacióN Un DíA En La MontañAPresentacióN Un DíA En La MontañA
PresentacióN Un DíA En La MontañANestor Ballesteros
 
Reporte Preliminar TA390
Reporte Preliminar TA390Reporte Preliminar TA390
Reporte Preliminar TA390Juan Pablo Mata
 
Haiti -ctry overview-15022013-1
Haiti -ctry overview-15022013-1Haiti -ctry overview-15022013-1
Haiti -ctry overview-15022013-1marcelaedita
 
Diaporama fanny, manon, anaïs, alex
Diaporama fanny, manon, anaïs, alexDiaporama fanny, manon, anaïs, alex
Diaporama fanny, manon, anaïs, alexyoyobig
 
Mairies communes du Pays de Fouesnant --php nzleko
Mairies communes du Pays de Fouesnant --php nzlekoMairies communes du Pays de Fouesnant --php nzleko
Mairies communes du Pays de Fouesnant --php nzlekoFoenizella.com
 
Interculture 17 faut-il refuder le developpement?
Interculture 17 faut-il refuder le developpement?Interculture 17 faut-il refuder le developpement?
Interculture 17 faut-il refuder le developpement?Eldoux
 
Langages des nous robert vachon et all
Langages des nous  robert vachon et allLangages des nous  robert vachon et all
Langages des nous robert vachon et allEldoux
 
Entornos De Aprendizaje
Entornos De AprendizajeEntornos De Aprendizaje
Entornos De AprendizajeAdalberto
 
Marche automobile francais pour slideshare
Marche automobile francais pour slideshareMarche automobile francais pour slideshare
Marche automobile francais pour slidesharephbrendel
 
Le nouveau jouet
Le nouveau jouetLe nouveau jouet
Le nouveau jouetbrunojoni
 

En vedette (20)

Java Bytecodes by Example
Java Bytecodes by ExampleJava Bytecodes by Example
Java Bytecodes by Example
 
Les menaces applicatives
Les menaces applicativesLes menaces applicatives
Les menaces applicatives
 
ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...
ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...
ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...
 
CustomerGauge B2b Net Promoter Score Measurement
CustomerGauge B2b Net Promoter Score MeasurementCustomerGauge B2b Net Promoter Score Measurement
CustomerGauge B2b Net Promoter Score Measurement
 
Présentation Identités Actives
Présentation Identités ActivesPrésentation Identités Actives
Présentation Identités Actives
 
FINANCEMENT DES ENTREPRISES IT AU SENEGAL
FINANCEMENT DES ENTREPRISES IT AU SENEGALFINANCEMENT DES ENTREPRISES IT AU SENEGAL
FINANCEMENT DES ENTREPRISES IT AU SENEGAL
 
Chroniques de Fouesnant - nr-wlu3
Chroniques de Fouesnant -   nr-wlu3Chroniques de Fouesnant -   nr-wlu3
Chroniques de Fouesnant - nr-wlu3
 
10 erreurs à ne pas commettre quand vous organisez un évènement !
10 erreurs à ne pas commettre quand vous organisez un évènement !10 erreurs à ne pas commettre quand vous organisez un évènement !
10 erreurs à ne pas commettre quand vous organisez un évènement !
 
Evaluación antecedentes
Evaluación antecedentesEvaluación antecedentes
Evaluación antecedentes
 
Eglises du Pays de Fouesnant - p-pgiv1
Eglises du Pays de Fouesnant - p-pgiv1Eglises du Pays de Fouesnant - p-pgiv1
Eglises du Pays de Fouesnant - p-pgiv1
 
PresentacióN Un DíA En La MontañA
PresentacióN Un DíA En La MontañAPresentacióN Un DíA En La MontañA
PresentacióN Un DíA En La MontañA
 
Reporte Preliminar TA390
Reporte Preliminar TA390Reporte Preliminar TA390
Reporte Preliminar TA390
 
Haiti -ctry overview-15022013-1
Haiti -ctry overview-15022013-1Haiti -ctry overview-15022013-1
Haiti -ctry overview-15022013-1
 
Diaporama fanny, manon, anaïs, alex
Diaporama fanny, manon, anaïs, alexDiaporama fanny, manon, anaïs, alex
Diaporama fanny, manon, anaïs, alex
 
Mairies communes du Pays de Fouesnant --php nzleko
Mairies communes du Pays de Fouesnant --php nzlekoMairies communes du Pays de Fouesnant --php nzleko
Mairies communes du Pays de Fouesnant --php nzleko
 
Interculture 17 faut-il refuder le developpement?
Interculture 17 faut-il refuder le developpement?Interculture 17 faut-il refuder le developpement?
Interculture 17 faut-il refuder le developpement?
 
Langages des nous robert vachon et all
Langages des nous  robert vachon et allLangages des nous  robert vachon et all
Langages des nous robert vachon et all
 
Entornos De Aprendizaje
Entornos De AprendizajeEntornos De Aprendizaje
Entornos De Aprendizaje
 
Marche automobile francais pour slideshare
Marche automobile francais pour slideshareMarche automobile francais pour slideshare
Marche automobile francais pour slideshare
 
Le nouveau jouet
Le nouveau jouetLe nouveau jouet
Le nouveau jouet
 

Similaire à StHack 2014 - Ninon Eyrolles Obfuscation 101

Formation python
Formation pythonFormation python
Formation pythonj_lipaz
 
Alphorm.com Formation Python pour les pentesteurs
Alphorm.com Formation Python pour les pentesteursAlphorm.com Formation Python pour les pentesteurs
Alphorm.com Formation Python pour les pentesteursAlphorm
 
Analyse formelle des protocoles cryptographiques
Analyse formelle des protocoles cryptographiquesAnalyse formelle des protocoles cryptographiques
Analyse formelle des protocoles cryptographiquesPolytechnique Montréal
 
2018 06 nouvelles APIs checkpoint e-Xpert solutions
2018 06 nouvelles APIs checkpoint e-Xpert solutions2018 06 nouvelles APIs checkpoint e-Xpert solutions
2018 06 nouvelles APIs checkpoint e-Xpert solutionse-Xpert Solutions SA
 
Techdays 2010 : comment hacker PHP sans se fatiguer
Techdays 2010 : comment hacker PHP sans se fatiguerTechdays 2010 : comment hacker PHP sans se fatiguer
Techdays 2010 : comment hacker PHP sans se fatiguerDamien Seguy
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptxLamissGhoul1
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPhalleck45
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_finalagnes_crepet
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_finalDuchess France
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSSAyoubElmrabet6
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French CourseHaytam EL YOUSSFI
 
Langage de Programmation.pdf
Langage de Programmation.pdfLangage de Programmation.pdf
Langage de Programmation.pdfAboubacarDiarra10
 
m103-resume-cours-theorique-6156f136c407b.pdf
m103-resume-cours-theorique-6156f136c407b.pdfm103-resume-cours-theorique-6156f136c407b.pdf
m103-resume-cours-theorique-6156f136c407b.pdfFootballLovers9
 
Formation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptxFormation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptxbetalab
 

Similaire à StHack 2014 - Ninon Eyrolles Obfuscation 101 (20)

Formation python
Formation pythonFormation python
Formation python
 
Alphorm.com Formation Python pour les pentesteurs
Alphorm.com Formation Python pour les pentesteursAlphorm.com Formation Python pour les pentesteurs
Alphorm.com Formation Python pour les pentesteurs
 
Php seance1
Php seance1Php seance1
Php seance1
 
Analyse formelle des protocoles cryptographiques
Analyse formelle des protocoles cryptographiquesAnalyse formelle des protocoles cryptographiques
Analyse formelle des protocoles cryptographiques
 
2018 06 nouvelles APIs checkpoint e-Xpert solutions
2018 06 nouvelles APIs checkpoint e-Xpert solutions2018 06 nouvelles APIs checkpoint e-Xpert solutions
2018 06 nouvelles APIs checkpoint e-Xpert solutions
 
Techdays 2010 : comment hacker PHP sans se fatiguer
Techdays 2010 : comment hacker PHP sans se fatiguerTechdays 2010 : comment hacker PHP sans se fatiguer
Techdays 2010 : comment hacker PHP sans se fatiguer
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
 
Comprendre la securite web
Comprendre la securite webComprendre la securite web
Comprendre la securite web
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Langage de Programmation.pdf
Langage de Programmation.pdfLangage de Programmation.pdf
Langage de Programmation.pdf
 
m103-resume-cours-theorique-6156f136c407b.pdf
m103-resume-cours-theorique-6156f136c407b.pdfm103-resume-cours-theorique-6156f136c407b.pdf
m103-resume-cours-theorique-6156f136c407b.pdf
 
Formation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptxFormation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptx
 
cours1.ppt
cours1.pptcours1.ppt
cours1.ppt
 
cours2.ppt
cours2.pptcours2.ppt
cours2.ppt
 
cours1.ppt
cours1.pptcours1.ppt
cours1.ppt
 
Rmll.securite
Rmll.securiteRmll.securite
Rmll.securite
 

Plus de StHack

Sthack 2015 - Ramon Vicens & Victor Acin - Cyber threats "the reality"
Sthack 2015 - Ramon Vicens & Victor Acin - Cyber threats "the reality"Sthack 2015 - Ramon Vicens & Victor Acin - Cyber threats "the reality"
Sthack 2015 - Ramon Vicens & Victor Acin - Cyber threats "the reality"StHack
 
Sthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cash
Sthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cashSthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cash
Sthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cashStHack
 
Sthack 2015 - Wilfrid "@WilfridBlanc" Blanc & Adrien Revol - Cybersécurité In...
Sthack 2015 - Wilfrid "@WilfridBlanc" Blanc & Adrien Revol - Cybersécurité In...Sthack 2015 - Wilfrid "@WilfridBlanc" Blanc & Adrien Revol - Cybersécurité In...
Sthack 2015 - Wilfrid "@WilfridBlanc" Blanc & Adrien Revol - Cybersécurité In...StHack
 
Sthack 2015 - Aris "@aris_ada" Adamantiadis - DUAL_EC_DRBG : Une histoire de ...
Sthack 2015 - Aris "@aris_ada" Adamantiadis - DUAL_EC_DRBG : Une histoire de ...Sthack 2015 - Aris "@aris_ada" Adamantiadis - DUAL_EC_DRBG : Une histoire de ...
Sthack 2015 - Aris "@aris_ada" Adamantiadis - DUAL_EC_DRBG : Une histoire de ...StHack
 
Sthack 2015 - Jonathan "@JonathanSalwan" Salwan - Dynamic Behavior Analysis U...
Sthack 2015 - Jonathan "@JonathanSalwan" Salwan - Dynamic Behavior Analysis U...Sthack 2015 - Jonathan "@JonathanSalwan" Salwan - Dynamic Behavior Analysis U...
Sthack 2015 - Jonathan "@JonathanSalwan" Salwan - Dynamic Behavior Analysis U...StHack
 
Sthack 2015 - Renaud "@nono2357" Lifchitz - Quantum computing in practice
Sthack 2015 - Renaud "@nono2357" Lifchitz - Quantum computing in practiceSthack 2015 - Renaud "@nono2357" Lifchitz - Quantum computing in practice
Sthack 2015 - Renaud "@nono2357" Lifchitz - Quantum computing in practiceStHack
 
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFGStHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFGStHack
 
StHack 2013 - Florian "@agixid" Gaultier No SQL injection but NoSQL injection
StHack 2013 - Florian "@agixid" Gaultier No SQL injection but NoSQL injectionStHack 2013 - Florian "@agixid" Gaultier No SQL injection but NoSQL injection
StHack 2013 - Florian "@agixid" Gaultier No SQL injection but NoSQL injectionStHack
 
StHack 2013 - Nicolas "@baldanos" Oberli Please insert inject more coin
StHack 2013 - Nicolas "@baldanos" Oberli Please insert inject more coinStHack 2013 - Nicolas "@baldanos" Oberli Please insert inject more coin
StHack 2013 - Nicolas "@baldanos" Oberli Please insert inject more coinStHack
 
StHack 2014 - Benjamin "@gentilkiwi" Delpy Mimikatz
StHack 2014 - Benjamin "@gentilkiwi" Delpy MimikatzStHack 2014 - Benjamin "@gentilkiwi" Delpy Mimikatz
StHack 2014 - Benjamin "@gentilkiwi" Delpy MimikatzStHack
 
StHack 2014 - Jerome "@funoverip" Nokin Turning your managed av into my botnet
StHack 2014 - Jerome "@funoverip" Nokin  Turning your managed av into my botnetStHack 2014 - Jerome "@funoverip" Nokin  Turning your managed av into my botnet
StHack 2014 - Jerome "@funoverip" Nokin Turning your managed av into my botnetStHack
 

Plus de StHack (11)

Sthack 2015 - Ramon Vicens & Victor Acin - Cyber threats "the reality"
Sthack 2015 - Ramon Vicens & Victor Acin - Cyber threats "the reality"Sthack 2015 - Ramon Vicens & Victor Acin - Cyber threats "the reality"
Sthack 2015 - Ramon Vicens & Victor Acin - Cyber threats "the reality"
 
Sthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cash
Sthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cashSthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cash
Sthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cash
 
Sthack 2015 - Wilfrid "@WilfridBlanc" Blanc & Adrien Revol - Cybersécurité In...
Sthack 2015 - Wilfrid "@WilfridBlanc" Blanc & Adrien Revol - Cybersécurité In...Sthack 2015 - Wilfrid "@WilfridBlanc" Blanc & Adrien Revol - Cybersécurité In...
Sthack 2015 - Wilfrid "@WilfridBlanc" Blanc & Adrien Revol - Cybersécurité In...
 
Sthack 2015 - Aris "@aris_ada" Adamantiadis - DUAL_EC_DRBG : Une histoire de ...
Sthack 2015 - Aris "@aris_ada" Adamantiadis - DUAL_EC_DRBG : Une histoire de ...Sthack 2015 - Aris "@aris_ada" Adamantiadis - DUAL_EC_DRBG : Une histoire de ...
Sthack 2015 - Aris "@aris_ada" Adamantiadis - DUAL_EC_DRBG : Une histoire de ...
 
Sthack 2015 - Jonathan "@JonathanSalwan" Salwan - Dynamic Behavior Analysis U...
Sthack 2015 - Jonathan "@JonathanSalwan" Salwan - Dynamic Behavior Analysis U...Sthack 2015 - Jonathan "@JonathanSalwan" Salwan - Dynamic Behavior Analysis U...
Sthack 2015 - Jonathan "@JonathanSalwan" Salwan - Dynamic Behavior Analysis U...
 
Sthack 2015 - Renaud "@nono2357" Lifchitz - Quantum computing in practice
Sthack 2015 - Renaud "@nono2357" Lifchitz - Quantum computing in practiceSthack 2015 - Renaud "@nono2357" Lifchitz - Quantum computing in practice
Sthack 2015 - Renaud "@nono2357" Lifchitz - Quantum computing in practice
 
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFGStHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
 
StHack 2013 - Florian "@agixid" Gaultier No SQL injection but NoSQL injection
StHack 2013 - Florian "@agixid" Gaultier No SQL injection but NoSQL injectionStHack 2013 - Florian "@agixid" Gaultier No SQL injection but NoSQL injection
StHack 2013 - Florian "@agixid" Gaultier No SQL injection but NoSQL injection
 
StHack 2013 - Nicolas "@baldanos" Oberli Please insert inject more coin
StHack 2013 - Nicolas "@baldanos" Oberli Please insert inject more coinStHack 2013 - Nicolas "@baldanos" Oberli Please insert inject more coin
StHack 2013 - Nicolas "@baldanos" Oberli Please insert inject more coin
 
StHack 2014 - Benjamin "@gentilkiwi" Delpy Mimikatz
StHack 2014 - Benjamin "@gentilkiwi" Delpy MimikatzStHack 2014 - Benjamin "@gentilkiwi" Delpy Mimikatz
StHack 2014 - Benjamin "@gentilkiwi" Delpy Mimikatz
 
StHack 2014 - Jerome "@funoverip" Nokin Turning your managed av into my botnet
StHack 2014 - Jerome "@funoverip" Nokin  Turning your managed av into my botnetStHack 2014 - Jerome "@funoverip" Nokin  Turning your managed av into my botnet
StHack 2014 - Jerome "@funoverip" Nokin Turning your managed av into my botnet
 

Dernier

Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...Infopole1
 
Les Metiers de l'Intelligence Artificielle
Les Metiers de l'Intelligence ArtificielleLes Metiers de l'Intelligence Artificielle
Les Metiers de l'Intelligence ArtificielleErol GIRAUDY
 
KIT-COPILOT and more Article du 20240311
KIT-COPILOT and more Article du 20240311KIT-COPILOT and more Article du 20240311
KIT-COPILOT and more Article du 20240311Erol GIRAUDY
 
The Importance of Indoor Air Quality (French)
The Importance of Indoor Air Quality (French)The Importance of Indoor Air Quality (French)
The Importance of Indoor Air Quality (French)IES VE
 
Mes succès sur Microsoft LEARN et examens
Mes succès sur Microsoft LEARN et examensMes succès sur Microsoft LEARN et examens
Mes succès sur Microsoft LEARN et examensErol GIRAUDY
 
Installation de Sylius 2.0 et découverte du nouveau backoffice en Bootstrap
Installation de Sylius 2.0 et découverte du nouveau backoffice en BootstrapInstallation de Sylius 2.0 et découverte du nouveau backoffice en Bootstrap
Installation de Sylius 2.0 et découverte du nouveau backoffice en BootstrapMaxime Huran 🌈
 

Dernier (6)

Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...
 
Les Metiers de l'Intelligence Artificielle
Les Metiers de l'Intelligence ArtificielleLes Metiers de l'Intelligence Artificielle
Les Metiers de l'Intelligence Artificielle
 
KIT-COPILOT and more Article du 20240311
KIT-COPILOT and more Article du 20240311KIT-COPILOT and more Article du 20240311
KIT-COPILOT and more Article du 20240311
 
The Importance of Indoor Air Quality (French)
The Importance of Indoor Air Quality (French)The Importance of Indoor Air Quality (French)
The Importance of Indoor Air Quality (French)
 
Mes succès sur Microsoft LEARN et examens
Mes succès sur Microsoft LEARN et examensMes succès sur Microsoft LEARN et examens
Mes succès sur Microsoft LEARN et examens
 
Installation de Sylius 2.0 et découverte du nouveau backoffice en Bootstrap
Installation de Sylius 2.0 et découverte du nouveau backoffice en BootstrapInstallation de Sylius 2.0 et découverte du nouveau backoffice en Bootstrap
Installation de Sylius 2.0 et découverte du nouveau backoffice en Bootstrap
 

StHack 2014 - Ninon Eyrolles Obfuscation 101

  • 1. OBFUSCATION 101 Ou : Pourquoi faire simple quand on peut faire compliqu´e ? Ninon Eyrolles
  • 2. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Plan 1 Introduction Qu’est-ce que l’obfuscation ? 2 Obfuscation du flot de contrˆole 3 Obuscation du flot de donn´ees 4 Obfuscation Python
  • 3. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? Pr´elude 1 def checkauth(password): 2 if (password == chunkybacon ): 3 print(Here ’s some super private information ...) 4 else: 5 print(Wrong password , go away!)
  • 4. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? L’obfuscation, ou obscurcissement de code D´efinition L’obfuscation consiste `a rendre l’analyse de code la plus complexe et la plus coˆuteuse possible, tout en conservant le comportement original (la s´emantique observable) du programme.
  • 5. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? L’obfuscation, ou obscurcissement de code D´efinition L’obfuscation consiste `a rendre l’analyse de code la plus complexe et la plus coˆuteuse possible, tout en conservant le comportement original (la s´emantique observable) du programme.
  • 6. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? L’obfuscation, ou obscurcissement de code D´efinition L’obfuscation consiste `a rendre l’analyse de code la plus complexe et la plus coˆuteuse possible, tout en conservant le comportement original (la s´emantique observable) du programme.
  • 7. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? D´efinition plus formelle On peut d´efinir obfuscateur id´eal O ainsi (pour tout programme P) : 1. Fonctionnalit´e : P et sa version obfusqu´ee O(P) doivent avoir le mˆeme comportement au niveau des entr´ees / sorties. 2. Efficacit´e : le temps d’ex´ecution et la taille de O(P) ne doivent pas ˆetre 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 entr´ees et sorties.
  • 8. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? D´efinition plus formelle On peut d´efinir obfuscateur id´eal O ainsi (pour tout programme P) : 1. Fonctionnalit´e : P et sa version obfusqu´ee O(P) doivent avoir le mˆeme comportement au niveau des entr´ees / sorties. 2. Efficacit´e : le temps d’ex´ecution et la taille de O(P) ne doivent pas ˆetre 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 entr´ees et sorties. → Un tel obfuscateur n’existe pas pour tous les programmes ! a aOn the (Im)possibility of Obfuscating Programs, Barack et al.
  • 9. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? Pourquoi, o`u et comment obfusquer ? Motivations protection du code sensible : dissimuler des cl´es embarqu´ees dans le code par exemple protection d’algorithme : question de propri´et´e intellectuelle Diff´erents niveaux Probl`emes pos´es
  • 10. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? Pourquoi, o`u et comment obfusquer ? Motivations Diff´erents niveaux code source langage interm´ediaire (IR) code assembleur Probl`emes pos´es
  • 11. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? Pourquoi, o`u et comment obfusquer ? Motivations Diff´erents niveaux Probl`emes pos´es → on veut obfusquer de fa¸con automatique → il faut trouver un compromis performances / obfuscation
  • 12. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? Plusieurs types d’obfuscation obfuscation du flot de contrˆole (control flow) obfuscation du flot de donn´ees (data flow) r´e´ecriture des symboles : nom de variable, de fonction... chiffrement du code, packing...
  • 13. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? Plusieurs types d’obfuscation obfuscation du flot de contrˆole (control flow) obfuscation du flot de donn´ees (data flow) r´e´ecriture des symboles : nom de variable, de fonction... chiffrement du code, packing...
  • 14. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Plan 1 Introduction 2 Obfuscation du flot de contrˆole D´efinitions Obfuscation du control flow Applatissement de code 3 Obuscation du flot de donn´ees 4 Obfuscation Python
  • 15. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python D´efinitions Le flot de contrˆole (control flow) repr´esente le flot d’ex´ecution d’un programme : les diff´erents chemins possibles lors de l’ex´ecution on retrouve les boucles (for, while), les conditions (if), les appels `a d’autres fonctions... on le mod´elise grˆace `a un Control Flow Graph (CFG), qui repr´esente les basic blocks et les liaisons entre eux
  • 16. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python D´efinitions Le flot de contrˆole (control flow) x = 10 y = 0 while(x ≥ 0) y = y + 2 x = x − 1 return y true false Figure : CFG de pseudo-code source Figure : CFG de code assembleur
  • 17. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation du control flow Diverses techniques On cherche `a transformer le CFG :
  • 18. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation du control flow Diverses techniques On cherche `a transformer le CFG : d´eroulage des boucles for
  • 19. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation du control flow Diverses techniques On cherche `a transformer le CFG : d´eroulage des boucles for inlining de fonctions
  • 20. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation du control flow Diverses techniques On cherche `a transformer le CFG : d´eroulage des boucles for inlining de fonctions insertion de junk code
  • 21. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation du control flow Diverses techniques On cherche `a transformer le CFG : d´eroulage des boucles for inlining de fonctions insertion de junk code pr´edicats opaques
  • 22. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation du control flow Diverses techniques On cherche `a transformer le CFG : d´eroulage des boucles for inlining de fonctions insertion de junk code pr´edicats opaques applatissement de flot de contrˆole (ou control flow flattening)
  • 23. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Applatissement de code D´efinition Applatissement de flot de contrˆole transformer la structure du programme pour rendre la reconstruction du CFG plus difficile coder les informations du flot de contrˆole et cacher le r´esultat dans le flot de donn´ees
  • 24. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Applatissement de code Principe Impl´ementation les basic blocks sont num´erot´es un dispatcher g`ere l’ex´ecution une variable d´etermine quel bloc doit ˆetre ex´ecut´e apr`es le bloc courant `a chaque fin de bloc, cette variable est remise `a jour, et on va vers le dispatcher qui redirige vers le bloc suivant. INIT val = 1 DISPATCHER switch(val) block 1 some code val = 2 block 2 some code val = 3 block 3 some code return Figure : Principe de l’applatissement de code
  • 25. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Applatissement de code Exemple Figure : CFG original Figure : CFG apr`es applatissement du flot de contrˆole
  • 26. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Plan 1 Introduction 2 Obfuscation du flot de contrˆole 3 Obuscation du flot de donn´ees D´efinition Quelques techniques d’obfuscation du flot de donn´ees La Whitebox 4 Obfuscation Python
  • 27. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python D´efinition Analyse du flot de donn´ees Plusieurs axes informations fournies par les donn´ees du programme : chaˆınes de caract`eres, entiers... relations entre les donn´ees ou entre les entr´ees et sorties (du programme, d’une fonction, d’un basic block) interactions entre le programme et les donn´ees : lectures, ´ecritures, emplacement des donn´ees dans la m´emoire... notions plus formelles : variables vivantes (live), ´equations de flot de donn´ees, analyse avant et arri`ere...
  • 28. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques techniques d’obfuscation du flot de donn´ees Exemples Pour complexifier l’analyse des donn´ees :
  • 29. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques techniques d’obfuscation du flot de donn´ees Exemples Pour complexifier l’analyse des donn´ees : encoder les constantes (chaˆınes de caract`eres par exemple)
  • 30. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques techniques d’obfuscation du flot de donn´ees Exemples Pour complexifier l’analyse des donn´ees : encoder les constantes (chaˆınes de caract`eres par exemple) insertion de donn´ees inutiles (proche du junk code)
  • 31. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques techniques d’obfuscation du flot de donn´ees Exemples Pour complexifier l’analyse des donn´ees : encoder les constantes (chaˆınes de caract`eres par exemple) insertion de donn´ees inutiles (proche du junk code) complexification des op´erations arithm´etiques sur les donn´ees x + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)
  • 32. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques techniques d’obfuscation du flot de donn´ees Exemples Pour complexifier l’analyse des donn´ees : encoder les constantes (chaˆınes de caract`eres par exemple) insertion de donn´ees inutiles (proche du junk code) complexification des op´erations arithm´etiques sur les donn´ees x + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y) modifier la fa¸con dont sont stock´ees / manipul´ees les donn´ees : ´eclater les tableaux, changer la convention d’appel des fonctions...
  • 33. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques techniques d’obfuscation du flot de donn´ees Exemples Pour complexifier l’analyse des donn´ees : encoder les constantes (chaˆınes de caract`eres par exemple) insertion de donn´ees inutiles (proche du junk code) complexification des op´erations arithm´etiques sur les donn´ees x + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y) modifier la fa¸con dont sont stock´ees / manipul´ees les donn´ees : ´eclater les tableaux, changer la convention d’appel des fonctions... encoder les donn´ees lors des lectures et ´ecritures f (x) MEMORYx xf f −1
  • 34. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python La Whitebox D´efinition d’une Whitebox Algorithme cryptographique prend en entr´ee un message et une cl´e fournit un message chiffr´e en sortie Whitebox Whitebox attack context (WBAC)
  • 35. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python La Whitebox D´efinition d’une Whitebox Algorithme cryptographique Whitebox impl´ementation particuli`ere d’un algorithme cryptographique la cl´e est incorpor´ee dans l’algorithme Whitebox attack context (WBAC)
  • 36. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python La Whitebox D´efinition d’une Whitebox Algorithme cryptographique Whitebox Whitebox attack context (WBAC) l’attaquant a tous les privil`eges, il a acc`es `a l’impl´ementation de l’algorithme il peut observer l’ex´ecution du programme (avec des cl´es instanci´ees) les d´etails internes de l’algorithme sont visibles et modifiables
  • 37. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python La Whitebox D´efinition d’une whitebox White-box AES ´etapes de l’AES = SubBytes, ShiftRows, MixColumns et AddRoundKey on d´ecrit les ´etapes de l’AES avec des tables (lookup-tables) on applique des encodages pour masquer les entr´ees et les sorties
  • 38. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python La Whitebox D´efinition d’une whitebox White-box AES ´etapes de l’AES = SubBytes, ShiftRows, MixColumns et AddRoundKey on d´ecrit les ´etapes de l’AES avec des tables (lookup-tables) on applique des encodages pour masquer les entr´ees et les sorties S(x ⊕ kr−1 i,j )F−1 G G−1 MC(x) H Figure : Principe d’encodage des lookup-tables
  • 39. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python La Whitebox D´efinition d’une whitebox White-box AES ´etapes de l’AES = SubBytes, ShiftRows, MixColumns et AddRoundKey on d´ecrit les ´etapes de l’AES avec des tables (lookup-tables) on applique des encodages pour masquer les entr´ees et les sorties F−1 ◦ S(x ⊕ kr−1 i,j ) ◦ G G−1 ◦ MC(x) ◦ H Figure : Principe d’encodage des lookup-table
  • 40. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Plan 1 Introduction 2 Obfuscation du flot de contrˆole 3 Obuscation du flot de donn´ees 4 Obfuscation Python Pourquoi obfusquer du code Python ? Comment obfusquer du code Python ? Obfuscation source `a source Quelques codes d’exemples
  • 41. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Pourquoi obfusquer du code Python ? Contexte applications d´evelopp´ees en Python (DropBox par exemple) : un interpr´eteur modifi´e est livr´e avec l’application cr´eations de packeurs pour complexifier l’acc`es de l’utilisateur au code source trois axes d’obfuscation : - l’interpr´eteur modifi´e pour rendre difficile l’analyse des fichiers compil´es - diff´erentes mesures pour rendre la d´ecompilation plus difficile - l’obfuscation source `a source dans le cas o`u le code est retrouv´e
  • 42. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Comment obfusquer du code Python ? Obfuscations propres `a Python Modification de l’interpr´eteur compilation statique du programme et des modules n´ecessaires permutation des opcodes du code compil´e Pr´evention de la d´ecompilation
  • 43. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Comment obfusquer du code Python ? Obfuscations propres `a Python Modification de l’interpr´eteur Pr´evention de la d´ecompilation insertion d’opcodes inutiles transformation des op´erateurs lors de l’ex´ecution
  • 44. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation source `a source L’arbre syntaxique abstrait Arbre syntaxique abstrait (ou Abstract Syntax Tree) : repr´esentation abstraite d’un programme par un arbre. les nœuds repr´esentent les op´erateurs les feuilles repr´esentent les op´erandes × + x y z Figure : Repr´esentation de l’AST de (x + y) × z
  • 45. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation source `a source Le module ast def func(x): a = 0; for i in range (0 ,10): a = a + x return 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 (simplifi´e) obtenu avec le module ast
  • 46. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees 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
  • 47. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation source `a source Le source `a source en Python Principe Exemples d’obfuscation transformation du flot de contrˆole : boucles for en boucles while, instructions if en boucles while, modification de la cr´eation de certains objets comme les list comprehension transformation du flot de donn´ees : encodage des chaˆınes de caract`eres, insertion d’expressions bool´eennes-arithm´etiques transformation des symboles : remplacement des noms de fonctions et variables par des chaˆınes de caract`eres al´eatoires transformation fa¸con programmation fonctionnelle : les fonctions sont remplac´ees par des fonctions lambda
  • 48. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques codes d’exemples Obfuscation de flot de contrˆole 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
  • 49. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques codes d’exemples Obfuscation de flot de contrˆole 1 res = [i[0] for i in 2 [j for j in 3 [[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 uskewh 11 12 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 pass 21 return ueovat 22 res = rphfuq () Figure : Exemple d’obfuscation de d´eclaration de list comprehension
  • 50. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques codes d’exemples Obfuscation fa¸con programmation fonctionnelle def ack1(M, N): if M == 0: return N + 1 elif 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
  • 51. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Conclusion L’obfuscation utilis´ee pour rendre l’analyse de code plus difficile obfuscation de flot de contrˆole, de flot de donn´ees obfuscation Python : mise en pratique des techniques Travaux futurs g´en´erateur d’expressions bool´eennes-arithmetiques mise au point d’un module d’obfuscation nouvelles techniques d’obfuscation Python ?
  • 52. contact@quarkslab.com I @quarkslab.com Questions? Remerciements : Serge Guelton pour l’obfuscation Python, et toute l’´equipe de Quarkslab
  • 53. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Table des mati`eres 1 Introduction Qu’est-ce que l’obfuscation ? 2 Obfuscation du flot de contrˆole D´efinitions Obfuscation du control flow Applatissement de code 3 Obuscation du flot de donn´ees D´efinition Quelques techniques d’obfuscation du flot de donn´ees La Whitebox 4 Obfuscation Python Pourquoi obfusquer du code Python ? Comment obfusquer du code Python ? Obfuscation source `a source Quelques codes d’exemples