---
# System prepended metadata

title: Reverse engineering
tags: [REV]

---

---
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


