Grunderna i x86/x64-assembler för reverse engineers
Läs MOV, CMP, JNE, CALL och RET och följ dataflödet genom register och stacken.
Grunderna i x86/x64-assembler för reverse engineers är en gratis lektion i Cyber Security Academy på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Cyber Security Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Cyber Security Academy innehåller totalt 4 lektioner.
Varför assembler för reverse engineers?
Ghidras dekompilator är användbar men ofullständig – den missar vissa konstruktioner, drar felaktiga slutsatser om datatyper och kan inte dekompilera fördunklad kod. Genom att läsa assemblerkod direkt får Ni tillgång till den faktiska sanningen. En reverse engineer behöver kunna läsa assemblerkod, inte skriva den.
Register
Viktiga x86-64-register:
- RAX – ackumulator och returvärden
- RBX, RCX, RDX – register för allmän användning
- RSI, RDI – index för källa/mål samt första/andra funktionsargumentet
- RSP – stackpekare
- RBP – baspekare (stackram)
- RIP – instruktionspekare
Anropskonvention för funktioner (x64 Linux)
Argument skickas i register enligt System V AMD64 ABI:
- RDI
- RSI
- RDX
- RCX
- R8
- R9
Returvärdet finns i RAX. Ytterligare argument läggs på stacken.
Viktiga instruktioner
Grundläggande instruktioner att känna igen:
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 varVillkorliga hopp
Jämförelser och förgreningar:
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 equalLäsa en enkel funktion
Känna igen vanliga mönster:
; 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:
...Känna igen strängoperationer
Vanliga sträng- och minnesoperationer:
; 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 .loopSkapa och riva stackramen
Varje funktion börjar och slutar med:
; 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
retIdentifiera loopar
Loopar i disassemblerad kod:
- Ett bakåtriktat hopp (till en lägre adress) anger en loop
- En räknare i ett register minskas med
dec/sub - Instruktionen
loopminskar RCX och hoppar om värdet inte är noll
Läsa switch-satser
Switch-satser kompileras ofta till hopptabeller:
; 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 handlerSIMD- och kryptografiska konstanter
Leta efter numeriska konstanter som identifierar algoritmer:
- AES S-box: de första byten
63 7C 77 7B... - SHA-256:s initiala hashvärde:
0x6a09e667, 0xbb67ae85... - MD5:
0xd76aa478
När Ni känner igen dessa konstanter identifieras de kryptografiska funktionerna omedelbart.
Snabbtest: x64-assembler
I x86-64 System V ABI, vilket register innehåller det första argumentet vid ett funktionsanrop?
Sammanfattning av lektionen
Reverse engineering av x86-64 kräver kunskap om viktiga register (RAX, RDI, RSI, RSP, RIP), anropskonventioner för funktioner (argument i RDI/RSI/RDX...) och vanliga mönster (prologer, loopar, jämförelser och hopptabeller). Ni behöver inte skriva assemblerkod – bara läsa den. Kryptografiska konstanter i koden identifierar algoritmer utan att den binära filen behöver köras.
Lär dig Cyber Security Academy med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 76
- Lektioner
- 303
Vanliga frågor
Är lektionen ”Grunderna i x86/x64-assembler för reverse engineers” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Cyber Security Academy, inklusive ”Grunderna i x86/x64-assembler för reverse engineers”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Cyber Security Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Grunderna i x86/x64-assembler för reverse engineers”?
Läs MOV, CMP, JNE, CALL och RET och följ dataflödet genom register och stacken. Ni övar på Cyber Security Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Cyber Security Academy?
Du behöver inga förkunskaper. Utbildningen i Cyber Security Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Grunderna i x86/x64-assembler för reverse engineers”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Cyber Security Academy-lektionen?
Ja. Varje Cyber Security Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Ghidra: navigera i och kommentera binärer
- Grunderna i x86/x64-assembler för reverse engineers
- Dynamisk analys med GDB och pwndbg
- Avobfuskering och knep för att motverka analys