CJK Workbench
Werkwijzen

Praktisch reverse engineering, functie voor functie

03
Het scenario

Zo begin je met praktisch reverse engineering

Kies één kleine functie uit een C-programma dat je zelf hebt gecompileerd en bestudeer die van de eerste instructie tot de laatste return. Wetten en licentievoorwaarden verschillen per land, dus gebruik alleen je eigen code of oefenbestanden. Hieronder volgen vier stappen.

01

Open je projectmap

Kies een werkmap met je C-broncode, een kopie van het gecompileerde bestand en later de geëxporteerde listing.

02

Exporteer een tekstlisting

Laat Shell het exportcommando van je disassembler op de kopie uitvoeren, of sla de listing zelf op, zodat het resultaat een tekstbestand is.

03

Vraag om uitleg

Vraag de agent de listing te lezen en de functie regel voor regel uit te leggen, en sla de notities op met write_file.

04

Controleer het antwoord

Vergelijk de notities met je broncode en de listing, lees de diff in Ask first en test het resultaat in een lab als dat legaal is.

Een lesvoorbeeld om te lezen

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

Deze functie telt twee gehele getallen op. Volgens de Windows x64-conventie komen de argumenten binnen in ecx en edx, wordt de som opgebouwd in eax en geeft ret de controle terug aan de aanroeper.

Twee oefeningen voor een reverse-engineeringles

Begin met een functie die je zelf schreef

Een veelgehoorde beginnersvraag is hoe je met assembly begint, en het antwoord is een functie die je zelf schreef. Schrijf een korte C-functie, compileer hem en exporteer de listing als tekst. read_file opent de listing en de agent legt elke instructie uit: welk register elk argument bevat, wat de stack doet en waar het resultaat terugkomt. write_file slaat die uitleg op in notes/begin.md. In Plan only somt de agent eerst deze stappen op. Er wordt nog niets uitgevoerd. Wissel dan naar Ask first en lees de diff vóór elke opslag. Vergelijk ten slotte de notities met je broncode en test de gecompileerde functie, als het legaal is, in een lab.

Documenteer de functies van je eigen bibliotheek

Een goede oefening in reverse engineering van API's is de functies opsommen die je eigen bibliotheek aanbiedt en opschrijven wat elk argument doet. Sla de lijst met geïmporteerde en aangeboden functies uit je eigen tool op als tekst, waarna de agent met grep elke aanroep van één functie vindt en met read_file de regels eromheen opent. Hij stelt een tabel op in notes/api.md, en edit_file toont elke wijziging als diff. Begin met één functie. Dezelfde methode helpt je achterhalen hoe je eigen oude code werkte. De agent kan zich vergissen in een type of doel, dus vergelijk elke rij met je broncode en met een eigen test voordat je hem accepteert.

CJK Workbench voor Windows

Werk je eigen voorbeeld uit

CJK Workbench downloaden ↗