Cyber Security Academy · Lektion

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.

Lektion 2 av 413 steg

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:

  1. RDI
  2. RSI
  3. RDX
  4. RCX
  5. R8
  6. 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 var

Villkorliga 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 equal

Lä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 .loop

Skapa 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
ret

Identifiera 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 loop minskar 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 handler

SIMD- 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.

Gratis att börja

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

  1. Ghidra: navigera i och kommentera binärer
  2. Grunderna i x86/x64-assembler för reverse engineers
  3. Dynamisk analys med GDB och pwndbg
  4. Avobfuskering och knep för att motverka analys
← Tillbaka till Cyber Security Academy