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.
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):
- RDI
- RSI
- RDX
- RCX
- R8
- 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 varSkoki 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 equalOdczytywanie 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 .loopKonfigurowanie 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
retIdentyfikowanie 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
loopzmniejsza 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 handlerStał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.
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
- Ghidra: poruszanie się po plikach binarnych i ich opisywanie
- Podstawy assemblera x86/x64 dla osób analizujących pliki binarne
- Analiza dynamiczna z GDB i pwndbg
- Dekompilacja i techniki antyanalityczne