CJK Workbench
Flux de travail

Rétro-ingénierie pratique, une fonction à la fois

03
Le scénario

Comment débuter en rétro-ingénierie pratique

Choisis une petite fonction d'un programme C que tu as compilé toi-même et étudie-la de la première instruction au return final. La loi et les conditions de licence varient selon le pays, alors utilise uniquement ton propre code ou des fichiers d'entraînement. Quatre étapes suivent.

01

Ouvre le dossier de ton projet

Choisis un dossier de travail qui contient ton code source C, une copie du fichier compilé et, plus tard, le listing exporté.

02

Exporte un listing texte

Laisse Shell lancer la commande d'export de ton désassembleur sur la copie, ou enregistre toi-même le listing, pour obtenir un fichier texte.

03

Demande une explication

Demande à l'agent de lire le listing et d'expliquer la fonction ligne par ligne, puis enregistre les notes avec write_file.

04

Vérifie la réponse

Compare les notes avec ton code source et le listing, lis le diff dans Ask first et teste le résultat en laboratoire si c'est légal.

Un listing pédagogique à lire

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

Cette fonction additionne deux entiers. Selon la convention Windows x64, les arguments arrivent dans ecx et edx, la somme est construite dans eax et ret rend la main à l'appelant.

Deux exercices pour un cours de reverse engineering

Commence par une fonction que tu as écrite

Une question fréquente chez les débutants est de savoir comment se lancer dans l'assembleur, et la réponse est une fonction que tu as écrite toi-même. Écris une courte fonction C, compile-la et exporte le listing en texte. read_file ouvre le listing et l'agent explique chaque instruction : quel registre contient chaque argument, ce que fait la pile et où revient le résultat. write_file enregistre ces explications dans notes/begin.md. En Plan only, l'agent commence par lister ces étapes. Rien ne s'exécute encore. Passe ensuite en Ask first et lis le diff avant chaque enregistrement. Pour finir, compare les notes avec ton code et, si c'est légal, teste la fonction compilée en laboratoire.

Documente les fonctions de ta propre bibliothèque

Un bon exercice de rétro-ingénierie d'API consiste à lister les fonctions qu'expose ta propre bibliothèque et à noter ce que fait chaque argument. Enregistre en texte la liste des fonctions importées et exposées par ton propre outil, puis l'agent utilise grep pour trouver chaque appel à une fonction et read_file pour ouvrir les lignes autour. Il rédige un tableau dans notes/api.md, et edit_file montre chaque modification sous forme de diff. Commence par une seule fonction. La même méthode t'aide à retrouver le fonctionnement de ton propre ancien code. L'agent peut se tromper sur un type ou sur un rôle, alors compare chaque ligne avec ton code source et avec un test à toi avant de l'accepter.

CJK Workbench pour Windows

Travaille sur ton propre exemple

Télécharger CJK Workbench ↗