Tersine Mühendisler için x86/x64 Assembly Temelleri
MOV, CMP, JNE, CALL ve RET komutlarını okuyun; kayıtlar ve yığın üzerinden veri akışını izleyin.
Tersine Mühendisler için x86/x64 Assembly Temelleri, CoddyKit'te ücretsiz bir Cyber Security Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Cyber Security Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Cyber Security Academy kursu toplamda 4 dersten oluşur.
Tersine Mühendislikte Assembly Neden Önemlidir?
Ghidra'nın tersine derleyicisi yararlıdır ancak kusursuz değildir — bazı yapıları gözden kaçırır, türleri yanlış çıkarır ve gizlenmiş kodu tersine derleyemez. Assembly'yi doğrudan okumak, gerçeği olduğu gibi görmenizi sağlar. Tersine mühendislik yapan kişinin assembly yazması değil, onu okuyabilmesi gerekir.
Yazmaçlar
x86-64 temel yazmaçları:
- RAX — akümülatör, dönüş değerleri
- RBX, RCX, RDX — genel amaçlı kullanım
- RSI, RDI — kaynak/hedef dizini, birinci/ikinci işlev argümanları
- RSP — yığın göstericisi
- RBP — taban göstericisi (yığın çerçevesi)
- RIP — komut göstericisi
İşlev Çağırma Kuralı (x64 Linux)
Argümanlar yazmaçlar üzerinden iletilir (System V AMD64 ABI):
- RDI
- RSI
- RDX
- RCX
- R8
- R9
Dönüş değeri RAX'te tutulur. Ek argümanlar yığına itilir.
Temel Komutlar
Tanınması gereken temel komutlar:
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 varKoşullu Dallanmalar
Karşılaştırmalar ve dallanmalar:
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 equalBasit Bir İşlevi Okuma
Yaygın örüntüleri tanıma:
; 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:
...Dize İşlemlerini Tanıma
Yaygın dize/bellek işlemleri:
; 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 .loopYığın Çerçevesi Kurulumu/Temizliği
Her işlev şu işlemlerle başlar ve sona erer:
; 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
retDöngüleri Belirleme
Assembly çözümlemesindeki döngüler:
- Geriye doğru bir sıçrama (daha düşük adres), bir döngü olduğunu gösterir
- Bir yazmaçtaki sayaç
dec/subile azaltılır loopkomutu RCX'i azaltır ve değer sıfır değilse sıçrar
Çoklu Seçim Deyimlerini Okuma
Çoklu seçim deyimleri genellikle sıçrama tablolarına dönüştürülür:
; 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 ve Kriptografi Sabitleri
Algoritmaları belirleyen sayısal sabitleri arayın:
- AES S-box: ilk baytlar
63 7C 77 7B... - SHA-256 başlangıç özeti:
0x6a09e667, 0xbb67ae85... - MD5:
0xd76aa478
Bu sabitleri tanımak, kriptografik işlevleri anında belirlemenizi sağlar.
Hızlı Kontrol: x64 Assembly
x86-64 System V ABI'de, bir işlev çağrısının birinci argümanını hangi yazmaç tutar?
Ders Özeti
x86-64 tersine mühendisliği; temel yazmaçları (RAX, RDI, RSI, RSP, RIP), işlev çağırma kurallarını (argümanlar RDI/RSI/RDX...) ve yaygın örüntüleri (önsözler, döngüler, karşılaştırmalar, sıçrama tabloları) bilmeyi gerektirir. Assembly yazmanız gerekmez — yalnızca okumanız yeterlidir. Koddaki kriptografi sabitleri, ikili dosyayı çalıştırmadan algoritmaları belirlemenizi sağlar.
Sıkça Sorulan Sorular
“Tersine Mühendisler için x86/x64 Assembly Temelleri” dersi ücretsiz mi?
Evet — “Tersine Mühendisler için x86/x64 Assembly Temelleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Cyber Security Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Cyber Security Academy kursu toplamda 4 dersten oluşur.
“Tersine Mühendisler için x86/x64 Assembly Temelleri” dersinde ne öğreneceğim?
MOV, CMP, JNE, CALL ve RET komutlarını okuyun; kayıtlar ve yığın üzerinden veri akışını izleyin. Cyber Security Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Cyber Security Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Cyber Security Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Tersine Mühendisler için x86/x64 Assembly Temelleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Cyber Security Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Cyber Security Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Ghidra: İkili Dosyalarda Gezinme ve Açıklama Ekleme
- Tersine Mühendisler için x86/x64 Assembly Temelleri
- GDB ve pwndbg ile Dinamik Analiz
- Karartma Açma ve Analiz Karşıtı Teknikler