CJK Workbench
Flussi di lavoro

Reverse engineering pratico, una funzione alla volta

03
Lo scenario

Come iniziare con il reverse engineering pratico

Scegli una piccola funzione di un programma C che hai compilato tu e studiala dalla prima istruzione al return finale. Leggi e condizioni di licenza cambiano da paese a paese, quindi usa solo codice tuo o file di prova. Seguono quattro passi.

01

Apri la cartella del progetto

Scegli una cartella di lavoro che contenga il tuo sorgente C, una copia del file compilato e, più avanti, il listing esportato.

02

Esporta un listing di testo

Lascia che Shell esegua il comando di esportazione del tuo disassemblatore sulla copia, oppure salva tu il listing, così il risultato è un file di testo.

03

Chiedi una spiegazione

Chiedi all'agente di leggere il listing e di spiegare la funzione riga per riga, poi salva gli appunti con write_file.

04

Verifica la risposta

Confronta gli appunti con il tuo sorgente e con il listing, leggi il diff in Ask first e prova il risultato in laboratorio se è legale.

Un listing didattico da leggere

add_numbers.asm
; add_numbers.asm - teaching listing, x64 Windows
; Returns the sum of its first two integer arguments.
; Argument 1 arrives in ecx (low half of rcx).
; Argument 2 arrives in edx (low half of rdx).
add_numbers:
    mov eax, ecx    ; copy argument 1 into eax
    add eax, edx    ; add argument 2, the sum stays in eax
    ret             ; return to the caller, result in eax

Questa funzione somma due interi. Secondo la convenzione Windows x64, gli argomenti arrivano in ecx e edx, la somma si forma in eax e ret restituisce il controllo al chiamante.

Due esercizi per un corso di reverse engineering

Inizia con una funzione che hai scritto tu

Una domanda comune dei principianti è come iniziare con l'assembly, e la risposta è una funzione che hai scritto tu. Scrivi una breve funzione C, compilala ed esporta il listing come testo. read_file apre il listing e l'agente spiega ogni istruzione: quale registro contiene ogni argomento, cosa fa lo stack e dove torna il risultato. write_file salva queste spiegazioni in notes/begin.md. In Plan only, l'agente elenca prima questi passi. Ancora non viene eseguito nulla. Poi passa ad Ask first e leggi il diff prima di ogni salvataggio. Infine confronta gli appunti con il tuo sorgente e, se è legale, prova la funzione compilata in laboratorio.

Documenta le funzioni della tua libreria

Un buon esercizio di reverse engineering di API è elencare le funzioni che la tua libreria espone e annotare cosa fa ogni argomento. Salva come testo l'elenco delle funzioni importate ed esposte dal tuo strumento, poi l'agente usa grep per trovare ogni chiamata a una funzione e read_file per aprire le righe intorno. Prepara una tabella in notes/api.md, e edit_file mostra ogni modifica come diff. Parti da una funzione. Lo stesso metodo ti aiuta a recuperare come funzionava il tuo vecchio codice. L'agente può sbagliare un tipo o uno scopo, quindi confronta ogni riga con il tuo sorgente e con un tuo test prima di accettarla.

CJK Workbench per Windows

Lavora sul tuo esempio

Scarica CJK Workbench ↗