Cyber Security Academy · Lekcja

Podstawy assemblera x86/x64 dla osób analizujących pliki binarne

Nauczą się Państwo odczytywać MOV, CMP, JNE, CALL i RET oraz śledzić przepływ danych przez rejestry i stos.

Lekcja 2 z 413 kroki

Podstawy assemblera x86/x64 dla osób analizujących pliki binarne to bezpłatna lekcja Cyber Security Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cyber Security Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cyber Security Academy zawiera 4 lekcji w sumie.

Dlaczego rewerserzy potrzebują asemblera?

Dekompilator Ghidra jest pomocny, ale niedoskonały — pomija niektóre konstrukcje, błędnie wnioskuje o typach i nie potrafi zdekompilować obfuskowanego kodu. Bezpośrednie czytanie asemblera zapewnia rzeczywisty obraz działania programu. Rewerser musi umieć czytać asembler, a nie go pisać.

Rejestry

Najważniejsze rejestry x86-64:

  • RAX — akumulator, wartości zwracane
  • RBX, RCX, RDX — rejestry ogólnego przeznaczenia
  • RSI, RDI — indeks źródła/celu, pierwszy/drugi argument funkcji
  • RSP — wskaźnik stosu
  • RBP — wskaźnik bazowy (ramka stosu)
  • RIP — wskaźnik instrukcji

Konwencja wywoływania funkcji (x64 Linux)

Argumenty są przekazywane w rejestrach (System V AMD64 ABI):

  1. RDI
  2. RSI
  3. RDX
  4. RCX
  5. R8
  6. R9

Wartość zwracana znajduje się w RAX. Dodatkowe argumenty są umieszczane na stosie.

Najważniejsze instrukcje

Podstawowe instrukcje, które należy rozpoznawać:

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

Skoki warunkowe

Porównania i rozgałęzienia:

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

Odczytywanie prostej funkcji

Rozpoznawanie typowych wzorców:

; 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:
...

Rozpoznawanie operacji na ciągach znaków

Typowe operacje na ciągach znaków i pamięci:

; 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

Konfigurowanie i demontowanie ramki stosu

Każda funkcja rozpoczyna się i kończy następująco:

; 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

Identyfikowanie pętli

Pętle w dezasemblacji:

  • Skok wsteczny (do niższego adresu) wskazuje na pętlę
  • Licznik w rejestrze jest zmniejszany za pomocą dec/sub
  • Instrukcja loop zmniejsza RCX i wykonuje skok, jeśli wartość jest różna od zera

Odczytywanie instrukcji switch

Instrukcje switch są często kompilowane do tablic skoków:

; 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

Stałe SIMD i kryptograficzne

Należy szukać stałych liczbowych identyfikujących algorytmy:

  • S-box AES: pierwsze bajty 63 7C 77 7B...
  • Początkowy skrót SHA-256: 0x6a09e667, 0xbb67ae85...
  • MD5: 0xd76aa478

Rozpoznanie tych stałych natychmiast identyfikuje funkcje kryptograficzne.

Szybki test: asembler x64

W x86-64 System V ABI, który rejestr przechowuje pierwszy argument wywołania funkcji?

Podsumowanie lekcji

Inżynieria wsteczna x86-64 wymaga znajomości najważniejszych rejestrów (RAX, RDI, RSI, RSP, RIP), konwencji wywoływania funkcji (argumenty w RDI/RSI/RDX...) oraz typowych wzorców (prologi, pętle, porównania, tablice skoków). Nie trzeba pisać asemblera — wystarczy umieć go czytać. Stałe kryptograficzne w kodzie pozwalają identyfikować algorytmy bez uruchamiania pliku binarnego.

Bezpłatny start

Ucz się Cyber Security Academy dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
76
Lekcje
303

Często zadawane pytania

Czy lekcja „Podstawy assemblera x86/x64 dla osób analizujących pliki binarne” jest bezpłatna?

Tak — pełny tekst „Podstawy assemblera x86/x64 dla osób analizujących pliki binarne” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cyber Security Academy, przejdź na CoddyKit PRO. Kurs Cyber Security Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Podstawy assemblera x86/x64 dla osób analizujących pliki binarne”?

Nauczą się Państwo odczytywać MOV, CMP, JNE, CALL i RET oraz śledzić przepływ danych przez rejestry i stos. Ćwiczysz Cyber Security Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Cyber Security Academy?

Nie wymagamy żadnego doświadczenia. Cyber Security Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Podstawy assemblera x86/x64 dla osób analizujących pliki binarne”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Cyber Security Academy?

Tak. Każda lekcja Cyber Security Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Ghidra: poruszanie się po plikach binarnych i ich opisywanie
  2. Podstawy assemblera x86/x64 dla osób analizujących pliki binarne
  3. Analiza dynamiczna z GDB i pwndbg
  4. Dekompilacja i techniki antyanalityczne
← Powrót do Cyber Security Academy