Introduction au reverse engineering (analyse statique)
Structure d'un exécutable
Imports
Exports
Segments
Les 2 segments les plus intéressants sont :
- TEXT
- RODATA / DATA
Assembleur
Syntaxe
- Intel
- AT&T
http://en.wikipedia.org/wiki/X86_assembly_language#Syntax
Registres
-
On peut voir ça comme des variables
-
Exemple : eax, rsp, edi, ebp, ax, etc.
- Préfixe : e, r ou rien
- Indique si on accède en 64 bits, 32-bits ou 16-bits
- Fin : deux lettres (ex.: ax, di, sp)
- Indique le nom du registre
- Exception :
- al, ah
- Accède au 8 bits "low" ou "high" de ax.
Stack
- Segment continue de mémoire dans lequel on peut empiler et dépiler de l'information
- PUSH / POP
- Registre «SP» et «BP»
MOV
- Assignation de variable
Pointeur
Condition
- Deux instructions
- TEST ou CMP
- JUMP Conditionnel
if(rax) ...
if(var_b8 > 0) ...
Variable locale
CALL
- Le passage de paramètre dépend de la convention d'appel. On peut les regrouper en 2 catégories.
- Par registre (généralement x64)
- Par la stack (généralement x86)
- Le «return» se fait toujours par le registre RAX/EAX/AX
- Référence
- http://en.wikipedia.org/wiki/X86_calling_conventions
#List_of_x86_calling_conventions
- http://en.wikipedia.org/wiki/X86_calling_conventions
CALL (registre)
CALL (stack)
IDA
Tips & Trick
C'est utilisé où ?
C'est utilisé où ?
C'est utilisé où ?
Vues
Vues
Questions ?
Exercice
Introduction au reverse engineering
By Olivier Arteau
Introduction au reverse engineering
- 1,369