Notions essentielles d’assembleur x86/x64 pour la rétro-ingénierie
Lisez MOV, CMP, JNE, CALL et RET, puis suivez le flux de données dans les registres et la pile.
Notions essentielles d’assembleur x86/x64 pour la rétro-ingénierie est une leçon Cyber Security Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Cyber Security Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Cyber Security Academy comprend 4 leçons au total.
Pourquoi utiliser l'assembleur en rétro-ingénierie ?
Le décompilateur de Ghidra est utile, mais imparfait — il ne reconnaît pas certaines constructions, déduit parfois mal les types et ne peut pas décompiler du code obfusqué. La lecture directe de l'assembleur fournit la vérité de référence. Un analyste en rétro-ingénierie doit savoir lire l'assembleur, pas en écrire.
Registres
Principaux registres x86-64 :
- RAX — accumulateur, valeurs de retour
- RBX, RCX, RDX — usage général
- RSI, RDI — index de source/destination, premier et deuxième arguments de fonction
- RSP — pointeur de pile
- RBP — pointeur de base (cadre de pile)
- RIP — pointeur d'instruction
Convention d'appel de fonction (Linux x64)
Arguments passés dans les registres (ABI AMD64 System V) :
- RDI
- RSI
- RDX
- RCX
- R8
- R9
La valeur de retour se trouve dans RAX. Les arguments supplémentaires sont empilés.
Instructions essentielles
Instructions fondamentales à reconnaître :
mov rax, rbx ; copy rbx to rax
push rax ; push rax onto stack
pop rbx ; pop top of stack into rbx
add rax, 8 ; rax = rax + 8
sub rsp, 0x20 ; allocate 32 bytes on stack
call 0x401234 ; call function at address
ret ; return to caller
lea rax, [rbp-0x10] ; load address of local varSauts conditionnels
Comparaisons et branchements :
cmp rax, 0 ; set flags based on rax - 0
test rax, rax ; test rax & rax (check if zero)
jz 0x401234 ; jump if zero
jnz 0x401234 ; jump if not zero
jl 0x401234 ; jump if less (signed)
jge 0x401234 ; jump if >= (signed)
je 0x401234 ; jump if equalLire une fonction simple
Reconnaître les motifs courants :
; if (x == 0) return 1;
mov eax, [rbp-4] ; load x
test eax, eax ; x == 0?
jnz .notZero ; if not zero, skip
mov eax, 1 ; return value = 1
ret
.notZero:
...Reconnaître les opérations sur les chaînes
Opérations courantes sur les chaînes et la mémoire :
; memcpy(dest, src, n):
; rdi=dest, rsi=src, rdx=n
rep movsb ; copy RCX bytes from RSI to RDI
; strlen-like loop:
.loop:
cmp byte [rsi], 0 ; check for null terminator
je .done
inc rsi
jmp .loopMise en place et démontage du cadre de pile
Chaque fonction commence et se termine par :
; Prologue:
push rbp ; save caller frame
mov rbp, rsp ; set up new frame
sub rsp, 0x30 ; allocate local vars
; Epilogue:
leave ; mov rsp, rbp; pop rbp
retIdentifier les boucles
Les boucles dans le désassemblage :
- Un saut en arrière (vers une adresse inférieure) indique une boucle
- Un compteur dans un registre décrémenté avec
dec/sub - L'instruction
loopdécrémente RCX et effectue un saut si la valeur n'est pas nulle
Lire les instructions de sélection
Les instructions de sélection sont souvent compilées en tables de sauts :
; Jump table pattern:
cmp eax, 5 ; check if case > max
ja .default ; jump to default
lea rcx, [jump_table]
mov rax, [rcx + rax*8] ; index into table
jmp rax ; jump to case handlerConstantes SIMD et cryptographiques
Recherchez les constantes numériques qui permettent d'identifier les algorithmes :
- S-box AES : premiers octets
63 7C 77 7B... - Hachage initial SHA-256 :
0x6a09e667, 0xbb67ae85... - MD5 :
0xd76aa478
Reconnaître ces constantes permet d'identifier instantanément les fonctions cryptographiques.
Vérification rapide : assembleur x64
Dans l'ABI System V x86-64, quel registre contient le premier argument d'un appel de fonction ?
Récapitulatif de la leçon
La rétro-ingénierie x86-64 nécessite de connaître les registres essentiels (RAX, RDI, RSI, RSP, RIP), les conventions d'appel de fonction (arguments dans RDI/RSI/RDX...) et les motifs courants (prologues, boucles, comparaisons, tables de sauts). Vous n'avez pas besoin d'écrire de l'assembleur — il suffit de savoir le lire. Les constantes cryptographiques présentes dans le code identifient les algorithmes sans exécuter le binaire.
Questions Fréquemment Posées
La leçon « Notions essentielles d’assembleur x86/x64 pour la rétro-ingénierie » est-elle gratuite ?
Oui — le texte complet de « Notions essentielles d’assembleur x86/x64 pour la rétro-ingénierie » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Cyber Security Academy, passe à CoddyKit PRO. Le cours Cyber Security Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Notions essentielles d’assembleur x86/x64 pour la rétro-ingénierie » ?
Lisez MOV, CMP, JNE, CALL et RET, puis suivez le flux de données dans les registres et la pile. Tu pratiques Cyber Security Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Cyber Security Academy ?
Aucune expérience préalable n'est requise. Cyber Security Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Notions essentielles d’assembleur x86/x64 pour la rétro-ingénierie » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Cyber Security Academy ?
Oui. Chaque leçon Cyber Security Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Ghidra : parcourir et annoter des binaires
- Notions essentielles d’assembleur x86/x64 pour la rétro-ingénierie
- Analyse dynamique avec GDB et pwndbg
- Désobfuscation et techniques anti-analyse