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

CALL (registre)

CALL (stack)

IDA

Tips & Trick

C'est utilisé où ?

C'est utilisé où ?

C'est utilisé où ?

Vues

Vues

Questions ?

Exercice

Made with Slides.com