Ici, seront toutes mes notes liées au reverse, notamment suite au cours disponible sur reverse.zip
Trouver l'emplacement d'un binaire (ou programme).
which /usr/bin/xclockVoir l'entête d'un exécutable :
xxd /usr/bin/xclock | headUne chose qu'on peut remarquer avec un xxd, c'est qu'on trouve parfois des lettres, parfois des . :
┌──(naxyl㉿kali)-[~]
└─$ xxd /usr/bin/xclock | head
00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............
00000010: 0300 3e00 0100 0000 6049 0000 0000 0000 ..>.....`I......
00000020: 4000 0000 0000 0000 d0cf 0000 0000 0000 @...............Tout ce qui est en-dessous de
0x20(espace) ou au-dessus de0x7E(tilde~) est remplacé par.car non représentable dans l'ASCII simple.
Afficher les segments d'un ELF :
readelf -l /usr/bin/xclockAfficher les sections d'un PE :
readpe hello.exeA noter qu'il faut préinstaller :
sudo apt install mingw-w64
sudo apt install readpeVoir l'architecture de son PC :
Linux.
lscpu | grep ArchWindows.
$env:PROCESSOR_ARCHITECTUREOn télécharge le .run depuis ici.
Puis, on lui ajoute les permissions d'être exécuté :
┌──(naxyl㉿kali)-[~/Downloads]
└─$ chmod +x ida-free-pc_91_x64linux.runOn le run :
┌──(naxyl㉿kali)-[~/Downloads]
└─$ ./ida-free-pc_91_x64linux.run On finit l'installation, et ça nous dit qu'on a besoin d'une license. On la récupère ici.
Une fois qu'on a le fichier .hexclic, on le met dans le dossier de l'installation :
┌──(naxyl㉿kali)-[~/Downloads]
└─$ mv idafree_96-51DE-DD49-FF.hexlic ~/ida-free-pc-9.1Et c'est installé, on peut le lancer via le menu démarrer !
Ici, un tableau qui compare les différentes architectures matérielles (ISA).
| Architecture | Registres connus | Exemples d'utilisation |
|---|---|---|
| x86 | eax, ebx, ecx, edx | PC, serveurs, anciens systèmes |
| x86-64 / AMD64 | rax, rbx, rcx, rdx | Tous les PC modernes |
| ARM | r0, r1, r2, … | Smartphones, Raspberry Pi |
| MIPS | $t0, $s0, … | Routeurs, systèmes embarqués |
| RISC-V | x0, x1, x2, … | Open Source, recherche |
On retrouve deux façon d'écrire une instruction en assembleur.
A noter qu'en AT&T, les registres sont préfixés par
%et les constantes par$
| Syntaxe | Ordre des opérandes | Exemple | Format des pointeurs | Exemple |
|---|---|---|---|---|
| Intel | destination, source |
mov eax, 1 |
placés entre crochets | [ebp+8] |
| AT&T | source, destination |
movl $1, %eax |
placés entre parenthèses et les offsets sont placés avant la première parenthèse | 8(%ebp) |
title: Définition : Mnémonique
C’est en quelque sorte le nom de l’instruction exécutée. (`mov`, `push`, `pop`...)
title: Définition : Opérandes
Ce sont les arguments qu'on donne aux **mnémoniques**. Cela peut être des registres, pointeurs ou valeurs concrètes utilisées par l’instruction.
On peut utiliser en ligne asmdebugger.com
Pour du x86, les principaux registres :
| Nom du registre | Taille en bits | Utilisation usuelle |
|---|---|---|
eax |
32 | Stocker la valeur de retour d'une fonction |
ebx |
32 | Utilisations diverses |
ecx |
32 | Utilisé en tant que compteur dans les boucles |
edx |
32 | Utilisé lors des multiplications et divisions |
edi |
32 | Utilisé comme pointeur vers une zone mémoire de destination |
esi |
32 | Utilisé comme pointeur vers une zone mémoire source |
ebp |
32 | Utilisé comme pointeur vers la base de la pile |
esp |
32 | Toujours utilisé comme pointeur vers le haut de la pile |
eip |
32 | Toujours utilisé comme pointeur vers l'instruction courante exécutée |