CJK Workbench
Fluxuri de lucru

Reverse engineering practic, o funcție pe rând

03
Scenariul

Cum începi cu reverse engineering practic

Alege o funcție mică dintr-un program C compilat de tine și studiaz-o de la prima instrucțiune până la return-ul final. Legea și condițiile de licență diferă de la o țară la alta, deci folosește doar cod propriu sau fișiere de exercițiu. Urmează patru pași.

01

Deschide folderul proiectului

Alege un folder de lucru care conține codul tău sursă C, o copie a fișierului compilat și, mai târziu, listing-ul exportat.

02

Exportă un listing text

Lasă Shell să ruleze comanda de export a disassembler-ului tău pe copie sau salvează tu listing-ul, ca rezultatul să fie un fișier text.

03

Cere o explicație

Cere agentului să citească listing-ul și să explice funcția linie cu linie, apoi salvează notele cu write_file.

04

Verifică răspunsul

Compară notele cu codul tău sursă și cu listing-ul, citește diff-ul în Ask first și testează rezultatul într-un laborator dacă este legal.

Un listing didactic de citit

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

Această funcție adună două numere întregi. După convenția Windows x64, argumentele sosesc în ecx și edx, suma se formează în eax, iar ret returnează controlul apelantului.

Două exerciții pentru o oră de reverse engineering

Începe cu o funcție scrisă de tine

O întrebare frecventă a începătorilor este cum să înceapă cu assembly, iar răspunsul este o funcție scrisă chiar de tine. Scrie o funcție scurtă în C, compilează-o și exportă listing-ul ca text. read_file deschide listing-ul, iar agentul explică fiecare instrucțiune: ce registru ține fiecare argument, ce face stiva și unde se întoarce rezultatul. write_file salvează aceste explicații în notes/begin.md. În Plan only, agentul listează mai întâi acești pași. Încă nu rulează nimic. Apoi treci la Ask first și citește diff-ul înainte de fiecare salvare. La final, compară notele cu codul tău sursă și, dacă este legal, testează funcția compilată într-un laborator.

Documentează funcțiile propriei tale biblioteci

Un exercițiu bun de reverse engineering pentru API-uri este să listezi funcțiile pe care le expune propria ta bibliotecă și să notezi ce face fiecare argument. Salvează ca text lista funcțiilor importate și expuse din propria ta unealtă, apoi agentul folosește grep ca să găsească fiecare apel al unei funcții și read_file ca să deschidă liniile din jur. Redactează un tabel în notes/api.md, iar edit_file arată fiecare schimbare ca diff. Începe cu o singură funcție. Aceeași metodă te ajută să reconstitui cum funcționa propriul tău cod vechi. Agentul poate greși un tip sau un scop, așa că înainte să accepți compară fiecare rând cu codul tău sursă și cu un test propriu.

CJK Workbench pentru Windows

Lucrează pe propriul tău exemplu

Descarcă CJK Workbench ↗