---
title: Reverse engineering
tags: REV
---
[TOC]
# Introduction
> "Le reverse c'est comme la cuisine"
# Rappel ASM
**Pour aller plus loin:** le manuel intel (mdr)
## Le langage assembleur (asm)
on ne fera que de la syntaxe intel
operateur op1, op2
Operande de droite vers operande de gauche pour l'assignement des valeurs
## Les registres généraux
liste:
eax (| ax (| ah al))
ebx
ecx
edx
esi
edi
esp
rsp
## Les registres de segment
un segment = un chose qui decrit un esp mem
le code seg va etre utilise pour pouvoir se placer recup le code ?
un registre 16 bits qui pointe vers ne table de descripteur et a partir de la on peut recup les info sur notre segment
Inclut : Une base d'addr + une limite + permitions
Par defaut:
- stack segment
- code segment
- data segment
## Le registre de flags (EFLAGS)
non modifiable directement
il va changer au fur et a mesure des instr qu'on utilise
dans ce registre on a les indicateurs d'etats, de sys, de controle
- flags d'etats
- CF
- PF
- flags de controle
- flags systeme: pas a pas
## Les autres registres
registre de controle (CR0 - CR4)
regisytre de gestion mem (GDTR/LDTR): pour recup info sur le seg
registre d'interruption
registre de debugage: debug
# Les principales instruction assembleur
go check le man pour ca
controle de flux : vont regarder les flags pour savoir s'ils peuvent sauter
JMP
entree/sortie
IN OUT
# L'allocation memoire
la pile: de bas en haut (mais addr hautes vers addr basses)
ESP => stack pointeur, pointe vers fin de pile
EBP => pointe vers debut de frame
## Cadre de la pile
lorsqu'on fait une fonc en asm ce qui est imp:
- debut (prologue): sauvegarder
- push ebp : save ebp
- mov ebp, esp: set stack frame pointer
- sub esp, localbytes: alocated space for locals
- push "register":
- fin (epilogue)
- pop registers : restore registers
- mov esp, ebp
- pop ebp
- ret
## Les convention d'appel
les conventions d'appel methode qui assure lors d'un appel de fonc la coherence entre ce qui est realiser par la fonction appelante
- cdecl: la pile est nettoyée par l’appelant
- stdcall: on passe les arg sur la stack et cest la fonction appeller qui nettoie sauf que la cest moins qui retourne 8
- fastcall: c'est comme stdcall sauf qu'on va passer une partir des arg par les registres
- thiscall: l’appelé nettoie la pile