0Pricing
Cyber Security Academy · Lezione

Fondamenti di assembly x86/x64 per il reverse engineering

Leggete MOV, CMP, JNE, CALL e RET e seguite il flusso dei dati attraverso registri e stack.

Fondamenti di assembly x86/x64 per il reverse engineering è una lezione Cyber Security Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cyber Security Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cyber Security Academy include 4 lezioni in totale.

Perché l’assembly è importante nel reverse engineering

Il decompilatore di Ghidra è utile ma imperfetto: non riconosce alcune strutture, deduce i tipi in modo errato e non riesce a decompilare il codice offuscato. Leggere direttamente l’assembly fornisce il riferimento reale. Un analista di reverse engineering deve saper leggere l’assembly, non scriverlo.

Registri

Registri principali x86-64:

  • RAX — accumulatore, valori restituiti
  • RBX, RCX, RDX — uso generale
  • RSI, RDI — indice di origine/destinazione, primo e secondo argomento della funzione
  • RSP — puntatore dello stack
  • RBP — puntatore base (frame dello stack)
  • RIP — puntatore all’istruzione

Convenzione di chiamata delle funzioni (x64 Linux)

Gli argomenti vengono passati nei registri (ABI System V AMD64):

  1. RDI
  2. RSI
  3. RDX
  4. RCX
  5. R8
  6. R9

Il valore restituito si trova in RAX. Gli argomenti aggiuntivi vengono inseriti nello stack.

Istruzioni essenziali

Istruzioni fondamentali da riconoscere:

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 var

Salti condizionali

Confronti e diramazioni:

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 equal

Leggere una funzione semplice

Riconoscere i pattern comuni:

; 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:
...

Riconoscere le operazioni sulle stringhe

Operazioni comuni su stringhe e memoria:

; 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 .loop

Impostazione e smantellamento del frame dello stack

Ogni funzione inizia e termina con:

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

Identificare i cicli

I cicli nel disassemblaggio:

  • Un salto all’indietro (verso un indirizzo inferiore) indica un ciclo
  • Un contatore in un registro decrementato con dec/sub
  • L’istruzione loop decrementa RCX ed esegue il salto se il valore è diverso da zero

Leggere le istruzioni switch

Le istruzioni switch vengono spesso compilate in tabelle di salto:

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

Costanti SIMD e crittografiche

Cercare le costanti numeriche che identificano gli algoritmi:

  • S-box AES: primi byte 63 7C 77 7B...
  • Hash iniziale SHA-256: 0x6a09e667, 0xbb67ae85...
  • MD5: 0xd76aa478

Riconoscere queste costanti identifica immediatamente le funzioni crittografiche.

Verifica rapida: assembly x64

Nell’ABI x86-64 System V, quale registro contiene il primo argomento di una chiamata di funzione?

Riepilogo della lezione

Il reverse engineering x86-64 richiede la conoscenza dei registri principali (RAX, RDI, RSI, RSP, RIP), delle convenzioni di chiamata delle funzioni (argomenti in RDI/RSI/RDX...) e dei pattern comuni (prologhi, cicli, confronti, tabelle di salto). Non è necessario scrivere assembly: basta saperlo leggere. Le costanti crittografiche nel codice identificano gli algoritmi senza eseguire il binario.

Domande Frequenti

La lezione «Fondamenti di assembly x86/x64 per il reverse engineering» è gratuita?

Sì — il testo completo di «Fondamenti di assembly x86/x64 per il reverse engineering» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cyber Security Academy, passa a CoddyKit PRO. Il corso Cyber Security Academy include 4 lezioni in totale.

Cosa imparerò in «Fondamenti di assembly x86/x64 per il reverse engineering»?

Leggete MOV, CMP, JNE, CALL e RET e seguite il flusso dei dati attraverso registri e stack. Eserciti Cyber Security Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Cyber Security Academy?

Non è richiesta alcuna esperienza precedente. Cyber Security Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Fondamenti di assembly x86/x64 per il reverse engineering»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Cyber Security Academy?

Sì. Ogni lezione Cyber Security Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Ghidra: navigazione e annotazione dei binari
  2. Fondamenti di assembly x86/x64 per il reverse engineering
  3. Analisi dinamica con GDB e pwndbg
  4. Deoffuscamento e tecniche anti-analisi
← Torna a Cyber Security Academy