SlideShare a Scribd company logo
1 of 127
Download to read offline
Pwn101
x86 Mimarisi ve Tersine Mühendislik
İçerik
● Tersine mi mühendislik?
● Ufak adam kompüteri
● Ucundan azcık..
● Masaüstünde durduğu gibi durmaz!
● Aşağı tükürsen Heap, yukarı tükürsen Stack
● Tam gaz..
● One ring to rule 'em all (syscalls)
● Sudan karaya geçiş
● Anti-debugging teknikleri ve atlatma
● Araç çantası
www.robindimyanoglu.com Canyoupwn.me
1. Bölüm: Köprüden Önce Son Çıkış
www.robindimyanoglu.com Canyoupwn.me
Köprüden Önce Son Çıkış
Tersine mi Mühendislik?
“Tersine mühendislik bir sistemin daha yüksek bir
soyutlama seviyesinde temsilini yaratmak için analiz
edilmesi işlemidir.”
www.robindimyanoglu.com Canyoupwn.me
Köprüden Önce Son Çıkış
www.robindimyanoglu.com Canyoupwn.me
Köprüden Önce Son Çıkış
Ne İşe Yarar?
➔ Kapalı kaynak kodlu programın kaynak kodlarını
ortaya çıkartmak
www.robindimyanoglu.com Canyoupwn.me
Köprüden Önce Son Çıkış
Ne İşe Yarar?
➔ Kapalı kaynak kodlu programın kaynak kodlarını
ortaya çıkartmak
➔ Yazılımlarda zafiyet aramak
www.robindimyanoglu.com Canyoupwn.me
Köprüden Önce Son Çıkış
Ne İşe Yarar?
➔ Kapalı kaynak kodlu programın kaynak kodlarını
ortaya çıkartmak
➔ Yazılımlarda zafiyet aramak
➔ Zararlı yazılım analizi
www.robindimyanoglu.com Canyoupwn.me
Köprüden Önce Son Çıkış
Ne İşe Yarar?
➔ Kapalı kaynak kodlu programın kaynak kodlarını
ortaya çıkartmak
➔ Yazılımlarda zafiyet aramak
➔ Zararlı yazılım analizi
➔ Lisans korumalarını atlatmak (cracking)
www.robindimyanoglu.com Canyoupwn.me
Köprüden Önce Son Çıkış
Ne İşe Yarar?
➔ Kapalı kaynak kodlu programın kaynak kodlarını
ortaya çıkartmak
➔ Yazılımlarda zafiyet aramak
➔ Zararlı yazılım analizi
➔ Lisans korumalarını atlatmak (cracking)
➔ Yazılımlara ek özellikler getirmek (patching)
www.robindimyanoglu.com Canyoupwn.me
Köprüden Önce Son Çıkış
Ne İşe Yarar?
➔ Kapalı kaynak kodlu programın kaynak kodlarını
ortaya çıkartmak
➔ Yazılımlarda zafiyet aramak
➔ Zararlı yazılım analizi
➔ Lisans korumalarını atlatmak (cracking)
➔ Yazılımlara ek özellikler getirmek (patching)
➔ Oyun hileleri!!! :D
www.robindimyanoglu.com Canyoupwn.me
2. Bölüm: Ufak Adam Kompüteri
www.robindimyanoglu.com Canyoupwn.me
Ufak Adam Kompüteri
Little Man Computer, 1965 yılında Dr. Stuart Madnick
tarafından tasarlanmış, von Neumann mimarisine
dayanan farazi bir bilgisayar modelidir. Günümüz
bilgisayarlarının bütün özelliklerine sahip bu model,
öğrencilere bilgisayarların çalışma mantığını
kavratmak amacıyla okullarda öğretilmektedir.
Kendine ait komut seti ve bir dili vardır.
www.robindimyanoglu.com Canyoupwn.me
Ufak Adam Kompüteri
www.robindimyanoglu.com Canyoupwn.me
Bilgisayarın Öğeleri
➔ Program sayacı: Çalıştırılacak bir sonraki talimatın kaç
numaralı posta kutusunda olduğunu gösterir. Günümüz
bilgisayarındaki karşılığı Instruction Pointer dır.
www.robindimyanoglu.com Canyoupwn.me
Bilgisayarın Öğeleri
➔ Program sayacı: Çalıştırılacak bir sonraki talimatın kaç
numaralı posta kutusunda olduğunu gösterir. Günümüz
bilgisayarındaki karşılığı Instruction Pointer dır.
➔ Posta kutuları: Her birinin kendine ait bir numarası (adresi)
vardır ve içlerinde veri barındırırlar. Bu veri yerine göre
talimatta olabilir, normal veri de olabilir. Bilgisayardaki
karşılığı RAM dir.
www.robindimyanoglu.com Canyoupwn.me
Bilgisayarın Öğeleri
➔ Program sayacı: Çalıştırılacak bir sonraki talimatın kaç
numaralı posta kutusunda olduğunu gösterir. Günümüz
bilgisayarındaki karşılığı Instruction Pointer dır.
➔ Posta kutuları: Her birinin kendine ait bir numarası (adresi)
vardır ve içlerinde veri barındırırlar. Bu veri yerine göre
talimatta olabilir, normal veri de olabilir. Bilgisayardaki
karşılığı RAM dir.
➔ Sepetler: Girdi ve çıktı verilerini taşırlar.
www.robindimyanoglu.com Canyoupwn.me
Bilgisayarın Öğeleri
➔ Program sayacı: Çalıştırılacak bir sonraki talimatın kaç
numaralı posta kutusunda olduğunu gösterir. Günümüz
bilgisayarındaki karşılığı Instruction Pointer dır.
➔ Posta kutuları: Her birinin kendine ait bir numarası (adresi)
vardır ve içlerinde veri barındırırlar. Bu veri yerine göre
talimatta olabilir, normal veri de olabilir. Bilgisayardaki
karşılığı RAM dir.
➔ Sepetler: Girdi ve çıktı verilerini taşırlar.
➔ Hesap makinesi: Girdi verilerini geçici olarak tutarlar.
Ayrıca aritmetik işlemlerde kullanılırlar. Bilgisayardaki
karşılığı Accumulator Register dır.
www.robindimyanoglu.com Canyoupwn.me
Çalıştırma Döngüsü
➔ Ufak adam öncelikle çalıştıracağı talimatı (instruction)
barındıran posta kutusunun numarasını öğrenmek için
program sayacına bakar.
www.robindimyanoglu.com Canyoupwn.me
Çalıştırma Döngüsü
➔ Ufak adam öncelikle çalıştıracağı talimatı (instruction)
barındıran posta kutusunun numarasını öğrenmek için
program sayacına bakar.
➔ Sayaçta gördüğü numaradaki posta kutusundan zarfı alır
ve üstündeki rakamları okur.
www.robindimyanoglu.com Canyoupwn.me
Çalıştırma Döngüsü
➔ Ufak adam öncelikle çalıştıracağı talimatı (instruction)
barındıran posta kutusunun numarasını öğrenmek için
program sayacına bakar.
➔ Sayaçta gördüğü numaradaki posta kutusundan zarfı alır
ve üstündeki rakamları okur.
➔ Sayacın değeri 1 arttırır.
www.robindimyanoglu.com Canyoupwn.me
Çalıştırma Döngüsü
➔ Ufak adam öncelikle çalıştıracağı talimatı (instruction)
barındıran posta kutusunun numarasını öğrenmek için
program sayacına bakar.
➔ Sayaçta gördüğü numaradaki posta kutusundan zarfı alır
ve üstündeki rakamları okur.
➔ Sayacın değeri 1 arttırır.
➔ Okuduğu rakamlardan hangi talimatı gerçekleştireceğini
anlar.
www.robindimyanoglu.com Canyoupwn.me
Çalıştırma Döngüsü
➔ Ufak adam öncelikle çalıştıracağı talimatı (instruction)
barındıran posta kutusunun numarasını öğrenmek için
program sayacına bakar.
➔ Sayaçta gördüğü numaradaki posta kutusundan zarfı alır
ve üstündeki rakamları okur.
➔ Sayacın değeri 1 arttırır.
➔ Okuduğu rakamlardan hangi talimatı gerçekleştireceğini
anlar.
➔ Talimatı gerçekleştirir.
www.robindimyanoglu.com Canyoupwn.me
Çalıştırma Döngüsü
➔ Ufak adam öncelikle çalıştıracağı talimatı (instruction)
barındıran posta kutusunun numarasını öğrenmek için
program sayacına bakar.
➔ Sayaçta gördüğü numaradaki posta kutusundan zarfı alır
ve üstündeki rakamları okur.
➔ Sayacın değeri 1 arttırır.
➔ Okuduğu rakamlardan hangi talimatı gerçekleştireceğini
anlar.
➔ Talimatı gerçekleştirir.
➔ Adım 1'e geri döner.
www.robindimyanoglu.com Canyoupwn.me
Komut Yapısı
LMC'de komutlar 3 adet rakamdan oluşuyor demiştik. Bu üç
rakamdan ilki yapılacak işlemi, diğer ikisi ise işlemin etkileyeceği
posta kutusu numarasını temsil eder. Üç istisna dışında bütün
komutlar bu yapıdadır.
➔ 1xx (ADD): xx. posta kutusunun içinde bulunan sayıyı, hesap
makinesinde yazan sayıyla topla ve sonucu hesap makinesinde
tut.
www.robindimyanoglu.com Canyoupwn.me
Komut Yapısı
LMC'de komutlar 3 adet rakamdan oluşuyor demiştik. Bu üç
rakamdan ilki yapılacak işlemi, diğer ikisi ise işlemin etkileyeceği
posta kutusu numarasını temsil eder. Üç istisna dışında bütün
komutlar bu yapıdadır.
➔ 1xx (ADD): xx. posta kutusunun içinde bulunan sayıyı, hesap
makinesinde yazan sayıyla topla ve sonucu hesap makinesinde
tut.
➔ 2xx (SUB): xx. posta kutusunun içinde bulunan sayıyı, hesap
makinesinde yazan sayıdan çıkart ve sonucu hesap
makinesinde tut.
www.robindimyanoglu.com Canyoupwn.me
Komut Yapısı
LMC'de komutlar 3 adet rakamdan oluşuyor demiştik. Bu üç
rakamdan ilki yapılacak işlemi, diğer ikisi ise işlemin etkileyeceği
posta kutusu numarasını temsil eder. Üç istisna dışında bütün
komutlar bu yapıdadır.
➔ 1xx (ADD): xx. posta kutusunun içinde bulunan sayıyı, hesap
makinesinde yazan sayıyla topla ve sonucu hesap makinesinde
tut.
➔ 2xx (SUB): xx. posta kutusunun içinde bulunan sayıyı, hesap
makinesinde yazan sayıdan çıkart ve sonucu hesap
makinesinde tut.
➔ 3xx (STO): Hesap makinesinde yazan sayıyı xx. posta
kutusunun içine yaz. (Bu işlem sonucunda posta kutusunda
önceden bulunan sayı kaybolur)
www.robindimyanoglu.com Canyoupwn.me
Komut Yapısı
➔ 5xx (LDA): xx. posta kutusunun içindeki sayıyı hesap
makinesine yaz. (Bu işlem sonucunda hesap makinesinde
önceden bulunan sayı kaybolur)
www.robindimyanoglu.com Canyoupwn.me
Komut Yapısı
➔ 5xx (LDA): xx. posta kutusunun içindeki sayıyı hesap
makinesine yaz. (Bu işlem sonucunda hesap makinesinde
önceden bulunan sayı kaybolur)
➔ 6xx (BRA): Diğer komutlardan farklı olarak bu komut belli bir
hafıza alanını değilde, direkt olarak program sayacını etkiler. xx
olarak belirtilen değeri program sayacının içine yazar. Yani
dolaylı yoldan xx. komuta atlamış olur.
www.robindimyanoglu.com Canyoupwn.me
Komut Yapısı
➔ 5xx (LDA): xx. posta kutusunun içindeki sayıyı hesap
makinesine yaz. (Bu işlem sonucunda hesap makinesinde
önceden bulunan sayı kaybolur)
➔ 6xx (BRA): Diğer komutlardan farklı olarak bu komut belli bir
hafıza alanını değilde, direkt olarak program sayacını etkiler. xx
olarak belirtilen değeri program sayacının içine yazar. Yani
dolaylı yoldan xx. komuta atlamış olur.
➔ 7xx (BRZ): Eğer hesap makinesindeki değer 0 (sıfır) ise program
sayacının içine xx ile belirtilen değeri yazar. Yani dolaylı yoldan
xx. komuta atlamış olur.
www.robindimyanoglu.com Canyoupwn.me
Komut Yapısı
➔ 5xx (LDA): xx. posta kutusunun içindeki sayıyı hesap
makinesine yaz. (Bu işlem sonucunda hesap makinesinde
önceden bulunan sayı kaybolur)
➔ 6xx (BRA): Diğer komutlardan farklı olarak bu komut belli bir
hafıza alanını değilde, direkt olarak program sayacını etkiler. xx
olarak belirtilen değeri program sayacının içine yazar. Yani
dolaylı yoldan xx. komuta atlamış olur.
➔ 7xx (BRZ): Eğer hesap makinesindeki değer 0 (sıfır) ise program
sayacının içine xx ile belirtilen değeri yazar. Yani dolaylı yoldan
xx. komuta atlamış olur.
➔ 8xx (BRP): Eğer hesap makinesindeki değer 0'dan büyükse
program sayacının içine xx ile belirtilen değeri yazar.
www.robindimyanoglu.com Canyoupwn.me
Komut Yapısı
➔ 901 (INP): Ilk istisnamız olan bu komut, input
sepetinden girdi alıp bu değeri hesap makinesinin
içine yazar.
www.robindimyanoglu.com Canyoupwn.me
Komut Yapısı
➔ 901 (INP): Ilk istisnamız olan bu komut, input
sepetinden girdi alıp bu değeri hesap makinesinin
içine yazar.
➔ 902 (OUT): Ikinci istisnamız olan bu komut ise hesap
makinesindeki değeri output sepetine koyar, yani
çıktı verir.
www.robindimyanoglu.com Canyoupwn.me
Komut Yapısı
➔ 901 (INP): Ilk istisnamız olan bu komut, input
sepetinden girdi alıp bu değeri hesap makinesinin
içine yazar.
➔ 902 (OUT): Ikinci istisnamız olan bu komut ise hesap
makinesindeki değeri output sepetine koyar, yani
çıktı verir.
➔ 444 (COB): Son istisnamız olan bu komut ise
programın bittiğini ima eder.
www.robindimyanoglu.com Canyoupwn.me
Örnek Uygulama (for döngüsü)
Adres komut kaba kod
01: IN cin >> start
02: STO 01
03: IN cin >> end
04: STO 02
05: IN cin step
06: STO 03 <=
07: LDA 01 | t = start
08: ADD 03 | t += step
09: OUT | cout << t
10: STO 01 | start = t
11: LDA 02 | t = end
12: SUB 01 | t -= start
13: BRP 06 == if (t > 0): goto 06
14: COB exit
www.robindimyanoglu.com Canyoupwn.me
3. Bölüm: Ucundan Azcık..
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Register Nedir?
● İşlemci üzerinde yer alan, veri tutmaya yarayan
bellek alanları.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Register Nedir?
● İşlemci üzerinde yer alan, veri tutmaya yarayan
bellek alanları.
● 32 bit işlemcilerde her bir registerın boyutu 32 bittir.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Register Nedir?
● İşlemci üzerinde yer alan, veri tutmaya yarayan
bellek alanları.
● 32 bit işlemcilerde her bir registerın boyutu 32 bittir.
● Farklı amaçlarda kullanılmak üzere register grupları
bulunur.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Register Nedir?
● İşlemci üzerinde yer alan, veri tutmaya yarayan
bellek alanları.
● 32 bit işlemcilerde her bir registerın boyutu 32 bittir.
● Farklı amaçlarda kullanılmak üzere register grupları
bulunur.
● Data registers, Pointer registers, Index registers,
Segment registers ve EFLAGS registeri.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Register Nedir?
● İşlemci üzerinde yer alan, veri tutmaya yarayan
bellek alanları.
● 32 bit işlemcilerde her bir registerın boyutu 32 bittir.
● Farklı amaçlarda kullanılmak üzere register grupları
bulunur.
● Data registers, Pointer registers, Index registers,
Segment registers ve EFLAGS registeri.
● 16 ve 8 bitlik alt kısımları vardır.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Data Registers
EAX: Akümülatör registeri. Genelde aritmetik işlemler sırasında
sayıları depo etmek amacıyla kullanılır. Ayrıca syscall sırasında
call id'yi tutan registerdır.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Data Registers
EAX: Akümülatör registeri. Genelde aritmetik işlemler sırasında
sayıları depo etmek amacıyla kullanılır. Ayrıca syscall sırasında
call id'yi tutan registerdır.
EBX: Base registeri. Taban adresleri tutar. Ayrıca syscall sırasında
ilk parametreyi tutan registerdır.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Data Registers
EAX: Akümülatör registeri. Genelde aritmetik işlemler sırasında
sayıları depo etmek amacıyla kullanılır. Ayrıca syscall sırasında
call id'yi tutan registerdır.
EBX: Base registeri. Taban adresleri tutar. Ayrıca syscall sırasında
ilk parametreyi tutan registerdır.
ECX: Counter registeri. Döngü işlemlerinde sayaç olarak kullanılır.
Ayrıca syscall sırasında 2. parametreyi tutar.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Data Registers
EAX: Akümülatör registeri. Genelde aritmetik işlemler sırasında
sayıları depo etmek amacıyla kullanılır. Ayrıca syscall sırasında
call id'yi tutan registerdır.
EBX: Base registeri. Taban adresleri tutar. Ayrıca syscall sırasında
ilk parametreyi tutan registerdır.
ECX: Counter registeri. Döngü işlemlerinde sayaç olarak kullanılır.
Ayrıca syscall sırasında 2. parametreyi tutar.
EDX: Data registeri. I/O işlemlerinde kullanılır. Ayrıca syscall
sırasında 3. parametreyi tutar.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Pointer Registers
EIP: Instruction pointer adıyla bilinen bu register, code
segmentinde çalıştırılacak olan bir sonraki yönergenin adresini
tutar.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Pointer Registers
EIP: Instruction pointer adıyla bilinen bu register, code
segmentinde çalıştırılacak olan bir sonraki yönergenin adresini
tutar.
EBP: Stack frame'in taban adresini tutan register.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Pointer Registers
EIP: Instruction pointer adıyla bilinen bu register, code
segmentinde çalıştırılacak olan bir sonraki yönergenin adresini
tutar.
EBP: Stack frame'in taban adresini tutan register.
ESP: Stack frame'in tavan adresini tutan register.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Index Registers
ESI & EDI: Source Index ve Destination Index registerları bazı
string fonksiyonları tarafından kaynak ve hedef işaretçisi olarak
kullanılırlar.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Index Registers
ESI & EDI: Source Index ve Destination Index registerları bazı
string fonksiyonları tarafından kaynak ve hedef işaretçisi olarak
kullanılırlar.
EFLAGS Register
Özel bir register olan EFLAGS registerının her bir bit'i ayrı bir
flag'i temsil eder.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Interrupt Enable Flag (IF): Bu flag kernel'in INTR'lara yanıt verip
vermeyeceğini belirler.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Interrupt Enable Flag (IF): Bu flag kernel'in INTR'lara yanıt verip
vermeyeceğini belirler.
Trap Flag (TF): Eğer bu flag etkin ise işlemci instruction'ları
single-step mod da çalıştırmaya başlar.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Interrupt Enable Flag (IF): Bu flag kernel'in INTR'lara yanıt verip
vermeyeceğini belirler.
Trap Flag (TF): Eğer bu flag etkin ise işlemci instruction'ları
single-step mod da çalıştırmaya başlar.
Carry Flag (CF): Bir aritmetik işlem sonucunda elde kalan bir
değer varmı onu öğrenmek için kullanılır.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Interrupt Enable Flag (IF): Bu flag kernel'in INTR'lara yanıt verip
vermeyeceğini belirler.
Trap Flag (TF): Eğer bu flag etkin ise işlemci instruction'ları
single-step mod da çalıştırmaya başlar.
Carry Flag (CF): Bir aritmetik işlem sonucunda elde kalan bir
değer varmı onu öğrenmek için kullanılır.
Parity Flag (PF): Bir (binary) sayının içindeki 1'lerin sayısı çift ise
bu bit 1 değerini alır.
www.robindimyanoglu.com Canyoupwn.me
Ucundan Azcık..
Interrupt Enable Flag (IF): Bu flag kernel'in INTR'lara yanıt verip
vermeyeceğini belirler.
Trap Flag (TF): Eğer bu flag etkin ise işlemci instruction'ları
single-step mod da çalıştırmaya başlar.
Carry Flag (CF): Bir aritmetik işlem sonucunda elde kalan bir
değer varmı onu öğrenmek için kullanılır.
Parity Flag (PF): Bir (binary) sayının içindeki 1'lerin sayısı çift ise
bu bit 1 değerini alır.
Zero Flag (ZF): Bir aritmetik işlemin sonucu 0 ise bu bit 1 değerini
alır. Karşılaştırma işlemleri için sıkça kullanılır.
www.robindimyanoglu.com Canyoupwn.me
4. Bölüm: Masaüstünde durduğu gibi durmuyor!
www.robindimyanoglu.com Canyoupwn.me
Masaüstünde durduğu gibi durmuyor!
www.robindimyanoglu.com Canyoupwn.me
Masaüstünde durduğu gibi durmuyor!
Text Segment a.k.a. Code Segment
Text segment, veya diğer adıyla Code segment hafızada program
kodlarının bulunduğu alandır. Tabi bu kodların makine kodu
olduğunu belirtmekte fayda var. Genellikle Read-Only olarak
işaretlidir.
www.robindimyanoglu.com Canyoupwn.me
Masaüstünde durduğu gibi durmuyor!
Data Segment
Data segment programdaki global değişkenlerin tutulduğu
alandır. Bu segmentin boyutu programın derlenmesi sırasında
derleyici tarafından belirlenir ve çalışma esnasında bir daha
değişmez. Bu değişkenlerin değeri program içerisinde sonradan
değiştirilebileceği için Data segmenti Read-Write olarak işaretlidir.
www.robindimyanoglu.com Canyoupwn.me
Masaüstünde durduğu gibi durmuyor!
BSS Segment
Bu segmentte değeri henüz belirlenmemiş olan static değişkenler
yer alır. Değeri belirlenene kadar bu alanın içerisi 0'lar ile doludur
yani bir nevi boştur. Bu tür değişkenlerin değeri ise programın
çalışma sırasında belirlenir.
www.robindimyanoglu.com Canyoupwn.me
5. Bölüm: Aşağı tükürsen Heap, yukarı tükürsen
Stack
www.robindimyanoglu.com Canyoupwn.me
Aşağı tükürsen Heap, yukarı tükürsen Stack
Stack (Yığın) Hafızası
● Lokal değişkenlerin tutulduğu alandır.
www.robindimyanoglu.com Canyoupwn.me
Aşağı tükürsen Heap, yukarı tükürsen Stack
Stack (Yığın) Hafızası
● Lokal değişkenlerin tutulduğu alandır.
● Veriler üst üste yığılmış halde
depolanır.
www.robindimyanoglu.com Canyoupwn.me
Aşağı tükürsen Heap, yukarı tükürsen Stack
Stack (Yığın) Hafızası
● Lokal değişkenlerin tutulduğu alandır.
● Veriler üst üste yığılmış halde
depolanır.
● LIFO yapısındadır.
www.robindimyanoglu.com Canyoupwn.me
Aşağı tükürsen Heap, yukarı tükürsen Stack
Stack (Yığın) Hafızası
● Lokal değişkenlerin tutulduğu alandır.
● Veriler üst üste yığılmış halde
depolanır.
● LIFO yapısındadır.
● Sadece iki türlü işlem yapılabilir;
push ve pop.
www.robindimyanoglu.com Canyoupwn.me
Aşağı tükürsen Heap, yukarı tükürsen Stack
Stack (Yığın) Hafızası
● Lokal değişkenlerin tutulduğu alandır.
● Veriler üst üste yığılmış halde
depolanır.
● LIFO yapısındadır.
● Sadece iki türlü işlem yapılabilir;
push ve pop.
● Boyutu derlenme sırasında hesaplanır,
çalışma esnasında bir daha değişmez.
www.robindimyanoglu.com Canyoupwn.me
Aşağı tükürsen Heap, yukarı tükürsen Stack
Stack (Yığın) Hafızası
● Lokal değişkenlerin tutulduğu alandır.
● Veriler üst üste yığılmış halde
depolanır.
● LIFO yapısındadır.
● Sadece iki türlü işlem yapılabilir;
push ve pop.
● Boyutu derlenme sırasında hesaplanır,
çalışma esnasında bir daha değişmez.
● Her fonksiyonun kendi stack frame'i bulunur.
www.robindimyanoglu.com Canyoupwn.me
Aşağı tükürsen Heap, yukarı tükürsen Stack
Stack kullanımına örnek
www.robindimyanoglu.com Canyoupwn.me
Aşağı tükürsen Heap, yukarı tükürsen Stack
Stack kullanımına örnek:
www.robindimyanoglu.com Canyoupwn.me
Aşağı tükürsen Heap, yukarı tükürsen Stack
Heap Hafızası
● Linked-list yapısındadır.
www.robindimyanoglu.com Canyoupwn.me
Aşağı tükürsen Heap, yukarı tükürsen Stack
Heap Hafızası
● Linked-list yapısındadır.
● Değişken boyutludur.
www.robindimyanoglu.com Canyoupwn.me
Aşağı tükürsen Heap, yukarı tükürsen Stack
Heap Hafızası
● Linked-list yapısındadır.
● Değişken boyutludur.
● malloc, calloc, realloc benzeri
fonksiyonlar ile çalışma anında
istenen boyutta hafıza alanı
tahsis edilir ve kullanılır.
www.robindimyanoglu.com Canyoupwn.me
Aşağı tükürsen Heap, yukarı tükürsen Stack
Heap Hafızası
● Linked-list yapısındadır.
● Değişken boyutludur.
● malloc, calloc, realloc benzeri
fonksiyonlar ile çalışma anında
istenen boyutta hafıza alanı
tahsis edilir ve kullanılır.
● Artık kullanılmayacak olan hafıza alanları free fonksiyonu ile
sisteme geri iade edilir.
www.robindimyanoglu.com Canyoupwn.me
Aşağı tükürsen Heap, yukarı tükürsen Stack
Heap Hafızası
● Linked-list yapısındadır.
● Değişken boyutludur.
● malloc, calloc, realloc benzeri
fonksiyonlar ile çalışma anında
istenen boyutta hafıza alanı
tahsis edilir ve kullanılır.
● Artık kullanılmayacak olan hafıza alanları free fonksiyonu ile
sisteme geri iade edilir.
● Bu segmentin boyutu belli değildir ve çalışma esnasında sürekli
değişir.
www.robindimyanoglu.com Canyoupwn.me
Heap kullanımına örnek:
Aşağı tükürsen Heap, yukarı tükürsen Stack
www.robindimyanoglu.com Canyoupwn.me
6. Bölüm: Tam gaz..
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Makine dili nedir?
Bir işlemcinin belirli işleri yapmasını sağlayan komutlardır. Her
mimarinin kendine özel komut seti vardır (x86, x86_64, MIPS,
ARM ...).
En düşük seviyeli programlama dilidir. Komutlar tamamen 1 ve
0'lardan oluşur
Assembly nedir?
Makine dili ile bir program yazmak oldukça zahmetli bir iştir.
Kullanımını kolaylaştırmak amacıyla makine dilindeki her komuta
isim verilmiş ve komutların kullanımı belli bir kurala
oturtulmuştur. Bu yapının oluşturduğu dillere Assembly denir.
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Aritmetik komutlar:
inc reg -> reg++
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Aritmetik komutlar:
inc reg -> reg++
dec reg -> reg--
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Aritmetik komutlar:
inc reg -> reg++
dec reg -> reg--
add dest, src -> dest += src
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Aritmetik komutlar:
inc reg -> reg++
dec reg -> reg--
add dest, src -> dest += src
sub dest, src -> dest -= src
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Aritmetik komutlar:
inc reg -> reg++
dec reg -> reg--
add dest, src -> dest += src
sub dest, src -> dest -= src
mul factor -> eax *= factor
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Aritmetik komutlar:
inc reg -> reg++
dec reg -> reg--
add dest, src -> dest += src
sub dest, src -> dest -= src
mul factor -> eax *= factor
div divisor -> eax /= divisor
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Boolean Cebiri:
AND op1, op2 -> op1 &= op2
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Boolean Cebiri:
AND op1, op2 -> op1 &= op2
OR op1, op2 -> op1 |= op2
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Boolean Cebiri:
AND op1, op2 -> op1 &= op2
OR op1, op2 -> op1 |= op2
XOR op1, op2 -> op1 ^= op2
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Boolean Cebiri:
AND op1, op2 -> op1 &= op2
OR op1, op2 -> op1 |= op2
XOR op1, op2 -> op1 ^= op2
TEST op1, op2 -> ZF = op1 & op2
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Boolean Cebiri:
AND op1, op2 -> op1 &= op2
OR op1, op2 -> op1 |= op2
XOR op1, op2 -> op1 ^= op2
TEST op1, op2 -> ZF = op1 & op2
NOT operand -> !operand
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Karşılaştırma ve jump:
jmp addr -> koşulsuz jump
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Karşılaştırma ve jump:
jmp addr -> koşulsuz jump
cmp dest, src -> (dest == src)?
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Karşılaştırma ve jump:
jmp addr -> koşulsuz jump
cmp dest, src -> (dest == src)?
je addr -> if(dest == src): jmp addr
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Karşılaştırma ve jump:
jmp addr -> koşulsuz jump
cmp dest, src -> (dest == src)?
je addr -> if(dest == src): jmp addr
jne addr -> if(dest != src): jmp addr
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Karşılaştırma ve jump:
jmp addr -> koşulsuz jump
cmp dest, src -> (dest == src)?
je addr -> if(dest == src): jmp addr
jne addr -> if(dest != src): jmp addr
jg addr -> if(dest > src): jmp addr
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Karşılaştırma ve jump:
jmp addr -> koşulsuz jump
cmp dest, src -> (dest == src)?
je addr -> if(dest == src): jmp addr
jne addr -> if(dest != src): jmp addr
jg addr -> if(dest > src): jmp addr
jge addr -> if(dest >= src): jmp addr
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Karşılaştırma ve jump:
jmp addr -> koşulsuz jump
cmp dest, src -> (dest == src)?
je addr -> if(dest == src): jmp addr
jne addr -> if(dest != src): jmp addr
jg addr -> if(dest > src): jmp addr
jge addr -> if(dest >= src): jmp addr
jp addr -> if(dest-src > 0): jmp addr
www.robindimyanoglu.com Canyoupwn.me
Tam gaz..
Ve en önemli temel komutu unutmayalım..
MOV dest, src -> dest = src
www.robindimyanoglu.com Canyoupwn.me
Ara vakti..
www.robindimyanoglu.com Canyoupwn.me
One ring to rule 'em all
System Calls
● Kernel ile userland arasındaki köprü.
www.robindimyanoglu.com Canyoupwn.me
One ring to rule 'em all
System Calls
● Kernel ile userland arasındaki köprü.
● Kernelin sunduğu hizmetleri assembly aracılığıyla
kullanabilmemizi sağlayan arayüz.
www.robindimyanoglu.com Canyoupwn.me
One ring to rule 'em all
System Calls
● Kernel ile userland arasındaki köprü.
● Kernelin sunduğu hizmetleri assembly aracılığıyla
kullanabilmemizi sağlayan arayüz.
● open, read, write, close, wait, exec, fork, exit, kill bu
fonksiyonlardan bazıları
www.robindimyanoglu.com Canyoupwn.me
One ring to rule 'em all
System Calls
● Kernel ile userland arasındaki köprü.
● Kernelin sunduğu hizmetleri assembly aracılığıyla
kullanabilmemizi sağlayan arayüz.
● open, read, write, close, wait, exec, fork, exit, kill bu
fonksiyonlardan bazıları
● eax, ebx, ecx, edx, esx ve edi olmak üzere 6 adet
argümanı vardır.
www.robindimyanoglu.com Canyoupwn.me
One ring to rule 'em all
System Calls
● Kernel ile userland arasındaki köprü.
● Kernelin sunduğu hizmetleri assembly aracılığıyla
kullanabilmemizi sağlayan arayüz.
● open, read, write, close, wait, exec, fork, exit, kill bu
fonksiyonlardan bazıları
● eax, ebx, ecx, edx, esx ve edi olmak üzere 6 adet
argümanı vardır.
● int 0x80 kesmesiyle aktifleştirilir.
www.robindimyanoglu.com Canyoupwn.me
One ring to rule 'em all
www.robindimyanoglu.com Canyoupwn.me
One ring to rule 'em all
section .text
_start:
mov eax, 0x4 ; eax = sys_write()
mov ebx, 0x1 ; ebx = stdout
mov ecx, message ; ecx = &message
mov edx, 0xF ; edx = mesajın uzunluğu
int 0x80 ; kernel interrupt
mov eax, 0x1 ; eax = sys_exit()
mov ebx, 0x0 ; ebx = return değeri
int 0x80 ; kernel interrupt
section .data
message: db "Hello, World!", 0dh, 0ah
www.robindimyanoglu.com Canyoupwn.me
7. Bölüm: Sudan karaya geçiş
www.robindimyanoglu.com Canyoupwn.me
Sudan karaya geçiş
Fonksiyon argümanları:
www.robindimyanoglu.com Canyoupwn.me
Sudan karaya geçiş
Fonksiyon argümanları:
Fonksiyon çağırma:
www.robindimyanoglu.com Canyoupwn.me
Sudan karaya geçiş
Fonksiyon Return:
www.robindimyanoglu.com Canyoupwn.me
Sudan karaya geçiş
Fonksiyon Return:
If – Else:
www.robindimyanoglu.com Canyoupwn.me
Sudan karaya geçiş
Döngüler:
www.robindimyanoglu.com Canyoupwn.me
Sudan karaya geçiş
Dizi Elemanlarına Erişim:
www.robindimyanoglu.com Canyoupwn.me
Sudan karaya geçiş
Dizi Elemanlarına Erişim:
Değer Atama:
www.robindimyanoglu.com Canyoupwn.me
Sudan karaya geçiş
www.robindimyanoglu.com Canyoupwn.me
Araç çantası
Tersine Mühendislik sırasında kullanılan araçlardan bazıları:
● file -> Bir dosyanın türünü öğrenmemizi sağlar
www.robindimyanoglu.com Canyoupwn.me
Araç çantası
Tersine Mühendislik sırasında kullanılan araçlardan bazıları:
● file -> Bir dosyanın türünü öğrenmemizi sağlar
● strings -> Bir dosyanın içindeki ASCII stringleri gösterir
www.robindimyanoglu.com Canyoupwn.me
Araç çantası
Tersine Mühendislik sırasında kullanılan araçlardan bazıları:
● file -> Bir dosyanın türünü öğrenmemizi sağlar
● strings -> Bir dosyanın içindeki ASCII stringleri gösterir
● readelf -> Bir ELF dosyası hakkında bilgi verir
www.robindimyanoglu.com Canyoupwn.me
Araç çantası
Tersine Mühendislik sırasında kullanılan araçlardan bazıları:
● file -> Bir dosyanın türünü öğrenmemizi sağlar
● strings -> Bir dosyanın içindeki ASCII stringleri gösterir
● readelf -> Bir ELF dosyası hakkında bilgi verir
● objdump -> Bir object dosyası hakkında çeşitli bilgiler verir
www.robindimyanoglu.com Canyoupwn.me
Araç çantası
Tersine Mühendislik sırasında kullanılan araçlardan bazıları:
● file -> Bir dosyanın türünü öğrenmemizi sağlar
● strings -> Bir dosyanın içindeki ASCII stringleri gösterir
● readelf -> Bir ELF dosyası hakkında bilgi verir
● objdump -> Bir object dosyası hakkında çeşitli bilgiler verir
● ltrace -> Programın yaptığı kütüphane çağrılarını gösterir
www.robindimyanoglu.com Canyoupwn.me
Araç çantası
Tersine Mühendislik sırasında kullanılan araçlardan bazıları:
● file -> Bir dosyanın türünü öğrenmemizi sağlar
● strings -> Bir dosyanın içindeki ASCII stringleri gösterir
● readelf -> Bir ELF dosyası hakkında bilgi verir
● objdump -> Bir object dosyası hakkında çeşitli bilgiler verir
● ltrace -> Programın yaptığı kütüphane çağrılarını gösterir
● strace -> Programın yaptığı sistem çağrılarını gösterir
www.robindimyanoglu.com Canyoupwn.me
Araç çantası
Tersine Mühendislik sırasında kullanılan araçlardan bazıları:
● file -> Bir dosyanın türünü öğrenmemizi sağlar
● strings -> Bir dosyanın içindeki ASCII stringleri gösterir
● readelf -> Bir ELF dosyası hakkında bilgi verir
● objdump -> Bir object dosyası hakkında çeşitli bilgiler verir
● ltrace -> Programın yaptığı kütüphane çağrılarını gösterir
● strace -> Programın yaptığı sistem çağrılarını gösterir
● gdb -> The GNU Debugger <3
www.robindimyanoglu.com Canyoupwn.me
Araç Çantası
Debugger nedir?
● Kelime anlamı: “Hata Ayıklayıcı”
www.robindimyanoglu.com Canyoupwn.me
Araç Çantası
Debugger nedir?
● Kelime anlamı: “Hata Ayıklayıcı”
● Programın işleyişini detaylıca incelememize fırsat veren araç.
www.robindimyanoglu.com Canyoupwn.me
Araç Çantası
Debugger nedir?
● Kelime anlamı: “Hata Ayıklayıcı”
● Programın işleyişini detaylıca incelememize fırsat veren araç.
● Programı istediğimiz yerden başlatma/durdurma (breakpoint).
www.robindimyanoglu.com Canyoupwn.me
Araç Çantası
Debugger nedir?
● Kelime anlamı: “Hata Ayıklayıcı”
● Programın işleyişini detaylıca incelememize fırsat veren araç.
● Programı istediğimiz yerden başlatma/durdurma (breakpoint).
● Hafıza içeriğini inceleme/değiştirme (examine).
www.robindimyanoglu.com Canyoupwn.me
FIN
UYGULAMA ZAMANI!
www.robindimyanoglu.com Canyoupwn.meCanyoupwn.me

More Related Content

What's hot

Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Mehmet Ince
 
Zafiyet tespiti ve sizma yöntemleri
Zafiyet tespiti ve sizma yöntemleriZafiyet tespiti ve sizma yöntemleri
Zafiyet tespiti ve sizma yöntemleriEPICROUTERS
 
Hping Kullanarak Ağ Keşif Çalışmaları
Hping Kullanarak Ağ Keşif ÇalışmalarıHping Kullanarak Ağ Keşif Çalışmaları
Hping Kullanarak Ağ Keşif ÇalışmalarıBGA Cyber Security
 
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6BGA Cyber Security
 
Zararlı Yazılım Analizi ve Tespitinde YARA Kullanımı
Zararlı Yazılım Analizi ve Tespitinde YARA KullanımıZararlı Yazılım Analizi ve Tespitinde YARA Kullanımı
Zararlı Yazılım Analizi ve Tespitinde YARA KullanımıBGA Cyber Security
 
Zararlı Yazılım Tespiti ve Siber i̇stihbarat Amaçlı IOC Kullanımı
Zararlı Yazılım Tespiti ve Siber i̇stihbarat Amaçlı IOC KullanımıZararlı Yazılım Tespiti ve Siber i̇stihbarat Amaçlı IOC Kullanımı
Zararlı Yazılım Tespiti ve Siber i̇stihbarat Amaçlı IOC KullanımıBGA Cyber Security
 
Zararlı Yazılım Analizi Eğitimi Lab Kitabı
Zararlı Yazılım Analizi Eğitimi Lab KitabıZararlı Yazılım Analizi Eğitimi Lab Kitabı
Zararlı Yazılım Analizi Eğitimi Lab KitabıBGA Cyber Security
 
Kaynak Kod Analiz Süreci
Kaynak Kod Analiz SüreciKaynak Kod Analiz Süreci
Kaynak Kod Analiz SüreciPRISMA CSI
 
Nmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
Nmap101 Eğitim Sunumu - Nmap Kullanım KılavuzuNmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
Nmap101 Eğitim Sunumu - Nmap Kullanım KılavuzuMehmet Caner Köroğlu
 
Snort IPS(Intrusion Prevention System) Eğitimi
Snort IPS(Intrusion Prevention System) EğitimiSnort IPS(Intrusion Prevention System) Eğitimi
Snort IPS(Intrusion Prevention System) EğitimiBGA Cyber Security
 
İleri Seviye Ağ Güvenliği Lab Kitabı
İleri Seviye Ağ Güvenliği Lab Kitabıİleri Seviye Ağ Güvenliği Lab Kitabı
İleri Seviye Ağ Güvenliği Lab KitabıBGA Cyber Security
 
GÜVENLİK SİSTEMLERİNİ ATLATMA
GÜVENLİK SİSTEMLERİNİ ATLATMAGÜVENLİK SİSTEMLERİNİ ATLATMA
GÜVENLİK SİSTEMLERİNİ ATLATMABGA Cyber Security
 
Beyaz Şapkalı Hacker CEH Eğitimi - Post Exploit Aşaması
Beyaz Şapkalı Hacker CEH Eğitimi - Post Exploit AşamasıBeyaz Şapkalı Hacker CEH Eğitimi - Post Exploit Aşaması
Beyaz Şapkalı Hacker CEH Eğitimi - Post Exploit AşamasıPRISMA CSI
 
Arp protokolu ve guvenlik zafiyeti
Arp  protokolu ve guvenlik zafiyetiArp  protokolu ve guvenlik zafiyeti
Arp protokolu ve guvenlik zafiyetiBGA Cyber Security
 
BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1
BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1
BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1BGA Cyber Security
 

What's hot (20)

Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1
 
Zafiyet tespiti ve sizma yöntemleri
Zafiyet tespiti ve sizma yöntemleriZafiyet tespiti ve sizma yöntemleri
Zafiyet tespiti ve sizma yöntemleri
 
Hping Kullanarak Ağ Keşif Çalışmaları
Hping Kullanarak Ağ Keşif ÇalışmalarıHping Kullanarak Ağ Keşif Çalışmaları
Hping Kullanarak Ağ Keşif Çalışmaları
 
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
 
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
 
Zararlı Yazılım Analizi ve Tespitinde YARA Kullanımı
Zararlı Yazılım Analizi ve Tespitinde YARA KullanımıZararlı Yazılım Analizi ve Tespitinde YARA Kullanımı
Zararlı Yazılım Analizi ve Tespitinde YARA Kullanımı
 
Zararlı Yazılım Tespiti ve Siber i̇stihbarat Amaçlı IOC Kullanımı
Zararlı Yazılım Tespiti ve Siber i̇stihbarat Amaçlı IOC KullanımıZararlı Yazılım Tespiti ve Siber i̇stihbarat Amaçlı IOC Kullanımı
Zararlı Yazılım Tespiti ve Siber i̇stihbarat Amaçlı IOC Kullanımı
 
Zararlı Yazılım Analizi Eğitimi Lab Kitabı
Zararlı Yazılım Analizi Eğitimi Lab KitabıZararlı Yazılım Analizi Eğitimi Lab Kitabı
Zararlı Yazılım Analizi Eğitimi Lab Kitabı
 
Kaynak Kod Analiz Süreci
Kaynak Kod Analiz SüreciKaynak Kod Analiz Süreci
Kaynak Kod Analiz Süreci
 
Nmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
Nmap101 Eğitim Sunumu - Nmap Kullanım KılavuzuNmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
Nmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
 
Metasploit El Kitabı
Metasploit El KitabıMetasploit El Kitabı
Metasploit El Kitabı
 
Snort IPS(Intrusion Prevention System) Eğitimi
Snort IPS(Intrusion Prevention System) EğitimiSnort IPS(Intrusion Prevention System) Eğitimi
Snort IPS(Intrusion Prevention System) Eğitimi
 
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
 
İleri Seviye Ağ Güvenliği Lab Kitabı
İleri Seviye Ağ Güvenliği Lab Kitabıİleri Seviye Ağ Güvenliği Lab Kitabı
İleri Seviye Ağ Güvenliği Lab Kitabı
 
GÜVENLİK SİSTEMLERİNİ ATLATMA
GÜVENLİK SİSTEMLERİNİ ATLATMAGÜVENLİK SİSTEMLERİNİ ATLATMA
GÜVENLİK SİSTEMLERİNİ ATLATMA
 
Beyaz Şapkalı Hacker CEH Eğitimi - Post Exploit Aşaması
Beyaz Şapkalı Hacker CEH Eğitimi - Post Exploit AşamasıBeyaz Şapkalı Hacker CEH Eğitimi - Post Exploit Aşaması
Beyaz Şapkalı Hacker CEH Eğitimi - Post Exploit Aşaması
 
Linux Sistem Yönetimi
Linux Sistem YönetimiLinux Sistem Yönetimi
Linux Sistem Yönetimi
 
Arp protokolu ve guvenlik zafiyeti
Arp  protokolu ve guvenlik zafiyetiArp  protokolu ve guvenlik zafiyeti
Arp protokolu ve guvenlik zafiyeti
 
BTRisk - Siber Olay Tespit ve Mudahale Egitimi
BTRisk - Siber Olay Tespit ve Mudahale EgitimiBTRisk - Siber Olay Tespit ve Mudahale Egitimi
BTRisk - Siber Olay Tespit ve Mudahale Egitimi
 
BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1
BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1
BGA BANK Web Güvenlik Testleri Uygulama Kitabı V1
 

Similar to x86 Mimarisi ve Tersine Mühendislik

İşletim sistemleri
İşletim sistemleriİşletim sistemleri
İşletim sistemleriillker SEN
 
Mühendislik problemlerinin bilgisayar ortamında sayısal analiz yöntemleriyle...
Mühendislik problemlerinin  bilgisayar ortamında sayısal analiz yöntemleriyle...Mühendislik problemlerinin  bilgisayar ortamında sayısal analiz yöntemleriyle...
Mühendislik problemlerinin bilgisayar ortamında sayısal analiz yöntemleriyle...Abdurrahman Tunç
 
3 d studio_max_el kitabı --- 3DVFX--3D Studio Max Eğitim
3 d studio_max_el kitabı   ---   3DVFX--3D Studio Max Eğitim3 d studio_max_el kitabı   ---   3DVFX--3D Studio Max Eğitim
3 d studio_max_el kitabı --- 3DVFX--3D Studio Max Eğitimdarkness333435_35
 
İleri Seviye Programlama 2
İleri Seviye Programlama 2İleri Seviye Programlama 2
İleri Seviye Programlama 2Caner Bovatekin
 
Ileri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer KoculuIleri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer Koculumustafa sarac
 
Matlab'e Giriş
Matlab'e GirişMatlab'e Giriş
Matlab'e GirişBurak KOÇ
 
Algoritma ve akış şemaları
Algoritma ve akış şemalarıAlgoritma ve akış şemaları
Algoritma ve akış şemalarıNesibe Yalçın
 
Az ve Öz C++ Muhammet ÇAĞATAY
Az ve Öz C++  Muhammet ÇAĞATAYAz ve Öz C++  Muhammet ÇAĞATAY
Az ve Öz C++ Muhammet ÇAĞATAYMuhammet ÇAĞATAY
 

Similar to x86 Mimarisi ve Tersine Mühendislik (13)

İşletim sistemleri
İşletim sistemleriİşletim sistemleri
İşletim sistemleri
 
Mühendislik problemlerinin bilgisayar ortamında sayısal analiz yöntemleriyle...
Mühendislik problemlerinin  bilgisayar ortamında sayısal analiz yöntemleriyle...Mühendislik problemlerinin  bilgisayar ortamında sayısal analiz yöntemleriyle...
Mühendislik problemlerinin bilgisayar ortamında sayısal analiz yöntemleriyle...
 
3 d studio_max_el kitabı --- 3DVFX--3D Studio Max Eğitim
3 d studio_max_el kitabı   ---   3DVFX--3D Studio Max Eğitim3 d studio_max_el kitabı   ---   3DVFX--3D Studio Max Eğitim
3 d studio_max_el kitabı --- 3DVFX--3D Studio Max Eğitim
 
3 d studio_max_part1
3 d studio_max_part13 d studio_max_part1
3 d studio_max_part1
 
İleri Seviye Programlama 2
İleri Seviye Programlama 2İleri Seviye Programlama 2
İleri Seviye Programlama 2
 
C programlama
C programlamaC programlama
C programlama
 
Ileri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer KoculuIleri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer Koculu
 
başlıkk 11111
başlıkk 11111başlıkk 11111
başlıkk 11111
 
Matlab'e Giriş
Matlab'e GirişMatlab'e Giriş
Matlab'e Giriş
 
Fonksiyonlar
FonksiyonlarFonksiyonlar
Fonksiyonlar
 
Algoritma ve akış şemaları
Algoritma ve akış şemalarıAlgoritma ve akış şemaları
Algoritma ve akış şemaları
 
Az ve Öz C++ Muhammet ÇAĞATAY
Az ve Öz C++  Muhammet ÇAĞATAYAz ve Öz C++  Muhammet ÇAĞATAY
Az ve Öz C++ Muhammet ÇAĞATAY
 
C-Sharp.pdf
C-Sharp.pdfC-Sharp.pdf
C-Sharp.pdf
 

x86 Mimarisi ve Tersine Mühendislik

  • 1. Pwn101 x86 Mimarisi ve Tersine Mühendislik
  • 2. İçerik ● Tersine mi mühendislik? ● Ufak adam kompüteri ● Ucundan azcık.. ● Masaüstünde durduğu gibi durmaz! ● Aşağı tükürsen Heap, yukarı tükürsen Stack ● Tam gaz.. ● One ring to rule 'em all (syscalls) ● Sudan karaya geçiş ● Anti-debugging teknikleri ve atlatma ● Araç çantası www.robindimyanoglu.com Canyoupwn.me
  • 3. 1. Bölüm: Köprüden Önce Son Çıkış www.robindimyanoglu.com Canyoupwn.me
  • 4. Köprüden Önce Son Çıkış Tersine mi Mühendislik? “Tersine mühendislik bir sistemin daha yüksek bir soyutlama seviyesinde temsilini yaratmak için analiz edilmesi işlemidir.” www.robindimyanoglu.com Canyoupwn.me
  • 5. Köprüden Önce Son Çıkış www.robindimyanoglu.com Canyoupwn.me
  • 6. Köprüden Önce Son Çıkış Ne İşe Yarar? ➔ Kapalı kaynak kodlu programın kaynak kodlarını ortaya çıkartmak www.robindimyanoglu.com Canyoupwn.me
  • 7. Köprüden Önce Son Çıkış Ne İşe Yarar? ➔ Kapalı kaynak kodlu programın kaynak kodlarını ortaya çıkartmak ➔ Yazılımlarda zafiyet aramak www.robindimyanoglu.com Canyoupwn.me
  • 8. Köprüden Önce Son Çıkış Ne İşe Yarar? ➔ Kapalı kaynak kodlu programın kaynak kodlarını ortaya çıkartmak ➔ Yazılımlarda zafiyet aramak ➔ Zararlı yazılım analizi www.robindimyanoglu.com Canyoupwn.me
  • 9. Köprüden Önce Son Çıkış Ne İşe Yarar? ➔ Kapalı kaynak kodlu programın kaynak kodlarını ortaya çıkartmak ➔ Yazılımlarda zafiyet aramak ➔ Zararlı yazılım analizi ➔ Lisans korumalarını atlatmak (cracking) www.robindimyanoglu.com Canyoupwn.me
  • 10. Köprüden Önce Son Çıkış Ne İşe Yarar? ➔ Kapalı kaynak kodlu programın kaynak kodlarını ortaya çıkartmak ➔ Yazılımlarda zafiyet aramak ➔ Zararlı yazılım analizi ➔ Lisans korumalarını atlatmak (cracking) ➔ Yazılımlara ek özellikler getirmek (patching) www.robindimyanoglu.com Canyoupwn.me
  • 11. Köprüden Önce Son Çıkış Ne İşe Yarar? ➔ Kapalı kaynak kodlu programın kaynak kodlarını ortaya çıkartmak ➔ Yazılımlarda zafiyet aramak ➔ Zararlı yazılım analizi ➔ Lisans korumalarını atlatmak (cracking) ➔ Yazılımlara ek özellikler getirmek (patching) ➔ Oyun hileleri!!! :D www.robindimyanoglu.com Canyoupwn.me
  • 12. 2. Bölüm: Ufak Adam Kompüteri www.robindimyanoglu.com Canyoupwn.me
  • 13. Ufak Adam Kompüteri Little Man Computer, 1965 yılında Dr. Stuart Madnick tarafından tasarlanmış, von Neumann mimarisine dayanan farazi bir bilgisayar modelidir. Günümüz bilgisayarlarının bütün özelliklerine sahip bu model, öğrencilere bilgisayarların çalışma mantığını kavratmak amacıyla okullarda öğretilmektedir. Kendine ait komut seti ve bir dili vardır. www.robindimyanoglu.com Canyoupwn.me
  • 15. Bilgisayarın Öğeleri ➔ Program sayacı: Çalıştırılacak bir sonraki talimatın kaç numaralı posta kutusunda olduğunu gösterir. Günümüz bilgisayarındaki karşılığı Instruction Pointer dır. www.robindimyanoglu.com Canyoupwn.me
  • 16. Bilgisayarın Öğeleri ➔ Program sayacı: Çalıştırılacak bir sonraki talimatın kaç numaralı posta kutusunda olduğunu gösterir. Günümüz bilgisayarındaki karşılığı Instruction Pointer dır. ➔ Posta kutuları: Her birinin kendine ait bir numarası (adresi) vardır ve içlerinde veri barındırırlar. Bu veri yerine göre talimatta olabilir, normal veri de olabilir. Bilgisayardaki karşılığı RAM dir. www.robindimyanoglu.com Canyoupwn.me
  • 17. Bilgisayarın Öğeleri ➔ Program sayacı: Çalıştırılacak bir sonraki talimatın kaç numaralı posta kutusunda olduğunu gösterir. Günümüz bilgisayarındaki karşılığı Instruction Pointer dır. ➔ Posta kutuları: Her birinin kendine ait bir numarası (adresi) vardır ve içlerinde veri barındırırlar. Bu veri yerine göre talimatta olabilir, normal veri de olabilir. Bilgisayardaki karşılığı RAM dir. ➔ Sepetler: Girdi ve çıktı verilerini taşırlar. www.robindimyanoglu.com Canyoupwn.me
  • 18. Bilgisayarın Öğeleri ➔ Program sayacı: Çalıştırılacak bir sonraki talimatın kaç numaralı posta kutusunda olduğunu gösterir. Günümüz bilgisayarındaki karşılığı Instruction Pointer dır. ➔ Posta kutuları: Her birinin kendine ait bir numarası (adresi) vardır ve içlerinde veri barındırırlar. Bu veri yerine göre talimatta olabilir, normal veri de olabilir. Bilgisayardaki karşılığı RAM dir. ➔ Sepetler: Girdi ve çıktı verilerini taşırlar. ➔ Hesap makinesi: Girdi verilerini geçici olarak tutarlar. Ayrıca aritmetik işlemlerde kullanılırlar. Bilgisayardaki karşılığı Accumulator Register dır. www.robindimyanoglu.com Canyoupwn.me
  • 19. Çalıştırma Döngüsü ➔ Ufak adam öncelikle çalıştıracağı talimatı (instruction) barındıran posta kutusunun numarasını öğrenmek için program sayacına bakar. www.robindimyanoglu.com Canyoupwn.me
  • 20. Çalıştırma Döngüsü ➔ Ufak adam öncelikle çalıştıracağı talimatı (instruction) barındıran posta kutusunun numarasını öğrenmek için program sayacına bakar. ➔ Sayaçta gördüğü numaradaki posta kutusundan zarfı alır ve üstündeki rakamları okur. www.robindimyanoglu.com Canyoupwn.me
  • 21. Çalıştırma Döngüsü ➔ Ufak adam öncelikle çalıştıracağı talimatı (instruction) barındıran posta kutusunun numarasını öğrenmek için program sayacına bakar. ➔ Sayaçta gördüğü numaradaki posta kutusundan zarfı alır ve üstündeki rakamları okur. ➔ Sayacın değeri 1 arttırır. www.robindimyanoglu.com Canyoupwn.me
  • 22. Çalıştırma Döngüsü ➔ Ufak adam öncelikle çalıştıracağı talimatı (instruction) barındıran posta kutusunun numarasını öğrenmek için program sayacına bakar. ➔ Sayaçta gördüğü numaradaki posta kutusundan zarfı alır ve üstündeki rakamları okur. ➔ Sayacın değeri 1 arttırır. ➔ Okuduğu rakamlardan hangi talimatı gerçekleştireceğini anlar. www.robindimyanoglu.com Canyoupwn.me
  • 23. Çalıştırma Döngüsü ➔ Ufak adam öncelikle çalıştıracağı talimatı (instruction) barındıran posta kutusunun numarasını öğrenmek için program sayacına bakar. ➔ Sayaçta gördüğü numaradaki posta kutusundan zarfı alır ve üstündeki rakamları okur. ➔ Sayacın değeri 1 arttırır. ➔ Okuduğu rakamlardan hangi talimatı gerçekleştireceğini anlar. ➔ Talimatı gerçekleştirir. www.robindimyanoglu.com Canyoupwn.me
  • 24. Çalıştırma Döngüsü ➔ Ufak adam öncelikle çalıştıracağı talimatı (instruction) barındıran posta kutusunun numarasını öğrenmek için program sayacına bakar. ➔ Sayaçta gördüğü numaradaki posta kutusundan zarfı alır ve üstündeki rakamları okur. ➔ Sayacın değeri 1 arttırır. ➔ Okuduğu rakamlardan hangi talimatı gerçekleştireceğini anlar. ➔ Talimatı gerçekleştirir. ➔ Adım 1'e geri döner. www.robindimyanoglu.com Canyoupwn.me
  • 25. Komut Yapısı LMC'de komutlar 3 adet rakamdan oluşuyor demiştik. Bu üç rakamdan ilki yapılacak işlemi, diğer ikisi ise işlemin etkileyeceği posta kutusu numarasını temsil eder. Üç istisna dışında bütün komutlar bu yapıdadır. ➔ 1xx (ADD): xx. posta kutusunun içinde bulunan sayıyı, hesap makinesinde yazan sayıyla topla ve sonucu hesap makinesinde tut. www.robindimyanoglu.com Canyoupwn.me
  • 26. Komut Yapısı LMC'de komutlar 3 adet rakamdan oluşuyor demiştik. Bu üç rakamdan ilki yapılacak işlemi, diğer ikisi ise işlemin etkileyeceği posta kutusu numarasını temsil eder. Üç istisna dışında bütün komutlar bu yapıdadır. ➔ 1xx (ADD): xx. posta kutusunun içinde bulunan sayıyı, hesap makinesinde yazan sayıyla topla ve sonucu hesap makinesinde tut. ➔ 2xx (SUB): xx. posta kutusunun içinde bulunan sayıyı, hesap makinesinde yazan sayıdan çıkart ve sonucu hesap makinesinde tut. www.robindimyanoglu.com Canyoupwn.me
  • 27. Komut Yapısı LMC'de komutlar 3 adet rakamdan oluşuyor demiştik. Bu üç rakamdan ilki yapılacak işlemi, diğer ikisi ise işlemin etkileyeceği posta kutusu numarasını temsil eder. Üç istisna dışında bütün komutlar bu yapıdadır. ➔ 1xx (ADD): xx. posta kutusunun içinde bulunan sayıyı, hesap makinesinde yazan sayıyla topla ve sonucu hesap makinesinde tut. ➔ 2xx (SUB): xx. posta kutusunun içinde bulunan sayıyı, hesap makinesinde yazan sayıdan çıkart ve sonucu hesap makinesinde tut. ➔ 3xx (STO): Hesap makinesinde yazan sayıyı xx. posta kutusunun içine yaz. (Bu işlem sonucunda posta kutusunda önceden bulunan sayı kaybolur) www.robindimyanoglu.com Canyoupwn.me
  • 28. Komut Yapısı ➔ 5xx (LDA): xx. posta kutusunun içindeki sayıyı hesap makinesine yaz. (Bu işlem sonucunda hesap makinesinde önceden bulunan sayı kaybolur) www.robindimyanoglu.com Canyoupwn.me
  • 29. Komut Yapısı ➔ 5xx (LDA): xx. posta kutusunun içindeki sayıyı hesap makinesine yaz. (Bu işlem sonucunda hesap makinesinde önceden bulunan sayı kaybolur) ➔ 6xx (BRA): Diğer komutlardan farklı olarak bu komut belli bir hafıza alanını değilde, direkt olarak program sayacını etkiler. xx olarak belirtilen değeri program sayacının içine yazar. Yani dolaylı yoldan xx. komuta atlamış olur. www.robindimyanoglu.com Canyoupwn.me
  • 30. Komut Yapısı ➔ 5xx (LDA): xx. posta kutusunun içindeki sayıyı hesap makinesine yaz. (Bu işlem sonucunda hesap makinesinde önceden bulunan sayı kaybolur) ➔ 6xx (BRA): Diğer komutlardan farklı olarak bu komut belli bir hafıza alanını değilde, direkt olarak program sayacını etkiler. xx olarak belirtilen değeri program sayacının içine yazar. Yani dolaylı yoldan xx. komuta atlamış olur. ➔ 7xx (BRZ): Eğer hesap makinesindeki değer 0 (sıfır) ise program sayacının içine xx ile belirtilen değeri yazar. Yani dolaylı yoldan xx. komuta atlamış olur. www.robindimyanoglu.com Canyoupwn.me
  • 31. Komut Yapısı ➔ 5xx (LDA): xx. posta kutusunun içindeki sayıyı hesap makinesine yaz. (Bu işlem sonucunda hesap makinesinde önceden bulunan sayı kaybolur) ➔ 6xx (BRA): Diğer komutlardan farklı olarak bu komut belli bir hafıza alanını değilde, direkt olarak program sayacını etkiler. xx olarak belirtilen değeri program sayacının içine yazar. Yani dolaylı yoldan xx. komuta atlamış olur. ➔ 7xx (BRZ): Eğer hesap makinesindeki değer 0 (sıfır) ise program sayacının içine xx ile belirtilen değeri yazar. Yani dolaylı yoldan xx. komuta atlamış olur. ➔ 8xx (BRP): Eğer hesap makinesindeki değer 0'dan büyükse program sayacının içine xx ile belirtilen değeri yazar. www.robindimyanoglu.com Canyoupwn.me
  • 32. Komut Yapısı ➔ 901 (INP): Ilk istisnamız olan bu komut, input sepetinden girdi alıp bu değeri hesap makinesinin içine yazar. www.robindimyanoglu.com Canyoupwn.me
  • 33. Komut Yapısı ➔ 901 (INP): Ilk istisnamız olan bu komut, input sepetinden girdi alıp bu değeri hesap makinesinin içine yazar. ➔ 902 (OUT): Ikinci istisnamız olan bu komut ise hesap makinesindeki değeri output sepetine koyar, yani çıktı verir. www.robindimyanoglu.com Canyoupwn.me
  • 34. Komut Yapısı ➔ 901 (INP): Ilk istisnamız olan bu komut, input sepetinden girdi alıp bu değeri hesap makinesinin içine yazar. ➔ 902 (OUT): Ikinci istisnamız olan bu komut ise hesap makinesindeki değeri output sepetine koyar, yani çıktı verir. ➔ 444 (COB): Son istisnamız olan bu komut ise programın bittiğini ima eder. www.robindimyanoglu.com Canyoupwn.me
  • 35. Örnek Uygulama (for döngüsü) Adres komut kaba kod 01: IN cin >> start 02: STO 01 03: IN cin >> end 04: STO 02 05: IN cin step 06: STO 03 <= 07: LDA 01 | t = start 08: ADD 03 | t += step 09: OUT | cout << t 10: STO 01 | start = t 11: LDA 02 | t = end 12: SUB 01 | t -= start 13: BRP 06 == if (t > 0): goto 06 14: COB exit www.robindimyanoglu.com Canyoupwn.me
  • 36. 3. Bölüm: Ucundan Azcık.. www.robindimyanoglu.com Canyoupwn.me
  • 37. Ucundan Azcık.. Register Nedir? ● İşlemci üzerinde yer alan, veri tutmaya yarayan bellek alanları. www.robindimyanoglu.com Canyoupwn.me
  • 38. Ucundan Azcık.. Register Nedir? ● İşlemci üzerinde yer alan, veri tutmaya yarayan bellek alanları. ● 32 bit işlemcilerde her bir registerın boyutu 32 bittir. www.robindimyanoglu.com Canyoupwn.me
  • 39. Ucundan Azcık.. Register Nedir? ● İşlemci üzerinde yer alan, veri tutmaya yarayan bellek alanları. ● 32 bit işlemcilerde her bir registerın boyutu 32 bittir. ● Farklı amaçlarda kullanılmak üzere register grupları bulunur. www.robindimyanoglu.com Canyoupwn.me
  • 40. Ucundan Azcık.. Register Nedir? ● İşlemci üzerinde yer alan, veri tutmaya yarayan bellek alanları. ● 32 bit işlemcilerde her bir registerın boyutu 32 bittir. ● Farklı amaçlarda kullanılmak üzere register grupları bulunur. ● Data registers, Pointer registers, Index registers, Segment registers ve EFLAGS registeri. www.robindimyanoglu.com Canyoupwn.me
  • 41. Ucundan Azcık.. Register Nedir? ● İşlemci üzerinde yer alan, veri tutmaya yarayan bellek alanları. ● 32 bit işlemcilerde her bir registerın boyutu 32 bittir. ● Farklı amaçlarda kullanılmak üzere register grupları bulunur. ● Data registers, Pointer registers, Index registers, Segment registers ve EFLAGS registeri. ● 16 ve 8 bitlik alt kısımları vardır. www.robindimyanoglu.com Canyoupwn.me
  • 43. Ucundan Azcık.. Data Registers EAX: Akümülatör registeri. Genelde aritmetik işlemler sırasında sayıları depo etmek amacıyla kullanılır. Ayrıca syscall sırasında call id'yi tutan registerdır. www.robindimyanoglu.com Canyoupwn.me
  • 44. Ucundan Azcık.. Data Registers EAX: Akümülatör registeri. Genelde aritmetik işlemler sırasında sayıları depo etmek amacıyla kullanılır. Ayrıca syscall sırasında call id'yi tutan registerdır. EBX: Base registeri. Taban adresleri tutar. Ayrıca syscall sırasında ilk parametreyi tutan registerdır. www.robindimyanoglu.com Canyoupwn.me
  • 45. Ucundan Azcık.. Data Registers EAX: Akümülatör registeri. Genelde aritmetik işlemler sırasında sayıları depo etmek amacıyla kullanılır. Ayrıca syscall sırasında call id'yi tutan registerdır. EBX: Base registeri. Taban adresleri tutar. Ayrıca syscall sırasında ilk parametreyi tutan registerdır. ECX: Counter registeri. Döngü işlemlerinde sayaç olarak kullanılır. Ayrıca syscall sırasında 2. parametreyi tutar. www.robindimyanoglu.com Canyoupwn.me
  • 46. Ucundan Azcık.. Data Registers EAX: Akümülatör registeri. Genelde aritmetik işlemler sırasında sayıları depo etmek amacıyla kullanılır. Ayrıca syscall sırasında call id'yi tutan registerdır. EBX: Base registeri. Taban adresleri tutar. Ayrıca syscall sırasında ilk parametreyi tutan registerdır. ECX: Counter registeri. Döngü işlemlerinde sayaç olarak kullanılır. Ayrıca syscall sırasında 2. parametreyi tutar. EDX: Data registeri. I/O işlemlerinde kullanılır. Ayrıca syscall sırasında 3. parametreyi tutar. www.robindimyanoglu.com Canyoupwn.me
  • 47. Ucundan Azcık.. Pointer Registers EIP: Instruction pointer adıyla bilinen bu register, code segmentinde çalıştırılacak olan bir sonraki yönergenin adresini tutar. www.robindimyanoglu.com Canyoupwn.me
  • 48. Ucundan Azcık.. Pointer Registers EIP: Instruction pointer adıyla bilinen bu register, code segmentinde çalıştırılacak olan bir sonraki yönergenin adresini tutar. EBP: Stack frame'in taban adresini tutan register. www.robindimyanoglu.com Canyoupwn.me
  • 49. Ucundan Azcık.. Pointer Registers EIP: Instruction pointer adıyla bilinen bu register, code segmentinde çalıştırılacak olan bir sonraki yönergenin adresini tutar. EBP: Stack frame'in taban adresini tutan register. ESP: Stack frame'in tavan adresini tutan register. www.robindimyanoglu.com Canyoupwn.me
  • 50. Ucundan Azcık.. Index Registers ESI & EDI: Source Index ve Destination Index registerları bazı string fonksiyonları tarafından kaynak ve hedef işaretçisi olarak kullanılırlar. www.robindimyanoglu.com Canyoupwn.me
  • 51. Ucundan Azcık.. Index Registers ESI & EDI: Source Index ve Destination Index registerları bazı string fonksiyonları tarafından kaynak ve hedef işaretçisi olarak kullanılırlar. EFLAGS Register Özel bir register olan EFLAGS registerının her bir bit'i ayrı bir flag'i temsil eder. www.robindimyanoglu.com Canyoupwn.me
  • 53. Ucundan Azcık.. Interrupt Enable Flag (IF): Bu flag kernel'in INTR'lara yanıt verip vermeyeceğini belirler. www.robindimyanoglu.com Canyoupwn.me
  • 54. Ucundan Azcık.. Interrupt Enable Flag (IF): Bu flag kernel'in INTR'lara yanıt verip vermeyeceğini belirler. Trap Flag (TF): Eğer bu flag etkin ise işlemci instruction'ları single-step mod da çalıştırmaya başlar. www.robindimyanoglu.com Canyoupwn.me
  • 55. Ucundan Azcık.. Interrupt Enable Flag (IF): Bu flag kernel'in INTR'lara yanıt verip vermeyeceğini belirler. Trap Flag (TF): Eğer bu flag etkin ise işlemci instruction'ları single-step mod da çalıştırmaya başlar. Carry Flag (CF): Bir aritmetik işlem sonucunda elde kalan bir değer varmı onu öğrenmek için kullanılır. www.robindimyanoglu.com Canyoupwn.me
  • 56. Ucundan Azcık.. Interrupt Enable Flag (IF): Bu flag kernel'in INTR'lara yanıt verip vermeyeceğini belirler. Trap Flag (TF): Eğer bu flag etkin ise işlemci instruction'ları single-step mod da çalıştırmaya başlar. Carry Flag (CF): Bir aritmetik işlem sonucunda elde kalan bir değer varmı onu öğrenmek için kullanılır. Parity Flag (PF): Bir (binary) sayının içindeki 1'lerin sayısı çift ise bu bit 1 değerini alır. www.robindimyanoglu.com Canyoupwn.me
  • 57. Ucundan Azcık.. Interrupt Enable Flag (IF): Bu flag kernel'in INTR'lara yanıt verip vermeyeceğini belirler. Trap Flag (TF): Eğer bu flag etkin ise işlemci instruction'ları single-step mod da çalıştırmaya başlar. Carry Flag (CF): Bir aritmetik işlem sonucunda elde kalan bir değer varmı onu öğrenmek için kullanılır. Parity Flag (PF): Bir (binary) sayının içindeki 1'lerin sayısı çift ise bu bit 1 değerini alır. Zero Flag (ZF): Bir aritmetik işlemin sonucu 0 ise bu bit 1 değerini alır. Karşılaştırma işlemleri için sıkça kullanılır. www.robindimyanoglu.com Canyoupwn.me
  • 58. 4. Bölüm: Masaüstünde durduğu gibi durmuyor! www.robindimyanoglu.com Canyoupwn.me
  • 59. Masaüstünde durduğu gibi durmuyor! www.robindimyanoglu.com Canyoupwn.me
  • 60. Masaüstünde durduğu gibi durmuyor! Text Segment a.k.a. Code Segment Text segment, veya diğer adıyla Code segment hafızada program kodlarının bulunduğu alandır. Tabi bu kodların makine kodu olduğunu belirtmekte fayda var. Genellikle Read-Only olarak işaretlidir. www.robindimyanoglu.com Canyoupwn.me
  • 61. Masaüstünde durduğu gibi durmuyor! Data Segment Data segment programdaki global değişkenlerin tutulduğu alandır. Bu segmentin boyutu programın derlenmesi sırasında derleyici tarafından belirlenir ve çalışma esnasında bir daha değişmez. Bu değişkenlerin değeri program içerisinde sonradan değiştirilebileceği için Data segmenti Read-Write olarak işaretlidir. www.robindimyanoglu.com Canyoupwn.me
  • 62. Masaüstünde durduğu gibi durmuyor! BSS Segment Bu segmentte değeri henüz belirlenmemiş olan static değişkenler yer alır. Değeri belirlenene kadar bu alanın içerisi 0'lar ile doludur yani bir nevi boştur. Bu tür değişkenlerin değeri ise programın çalışma sırasında belirlenir. www.robindimyanoglu.com Canyoupwn.me
  • 63. 5. Bölüm: Aşağı tükürsen Heap, yukarı tükürsen Stack www.robindimyanoglu.com Canyoupwn.me
  • 64. Aşağı tükürsen Heap, yukarı tükürsen Stack Stack (Yığın) Hafızası ● Lokal değişkenlerin tutulduğu alandır. www.robindimyanoglu.com Canyoupwn.me
  • 65. Aşağı tükürsen Heap, yukarı tükürsen Stack Stack (Yığın) Hafızası ● Lokal değişkenlerin tutulduğu alandır. ● Veriler üst üste yığılmış halde depolanır. www.robindimyanoglu.com Canyoupwn.me
  • 66. Aşağı tükürsen Heap, yukarı tükürsen Stack Stack (Yığın) Hafızası ● Lokal değişkenlerin tutulduğu alandır. ● Veriler üst üste yığılmış halde depolanır. ● LIFO yapısındadır. www.robindimyanoglu.com Canyoupwn.me
  • 67. Aşağı tükürsen Heap, yukarı tükürsen Stack Stack (Yığın) Hafızası ● Lokal değişkenlerin tutulduğu alandır. ● Veriler üst üste yığılmış halde depolanır. ● LIFO yapısındadır. ● Sadece iki türlü işlem yapılabilir; push ve pop. www.robindimyanoglu.com Canyoupwn.me
  • 68. Aşağı tükürsen Heap, yukarı tükürsen Stack Stack (Yığın) Hafızası ● Lokal değişkenlerin tutulduğu alandır. ● Veriler üst üste yığılmış halde depolanır. ● LIFO yapısındadır. ● Sadece iki türlü işlem yapılabilir; push ve pop. ● Boyutu derlenme sırasında hesaplanır, çalışma esnasında bir daha değişmez. www.robindimyanoglu.com Canyoupwn.me
  • 69. Aşağı tükürsen Heap, yukarı tükürsen Stack Stack (Yığın) Hafızası ● Lokal değişkenlerin tutulduğu alandır. ● Veriler üst üste yığılmış halde depolanır. ● LIFO yapısındadır. ● Sadece iki türlü işlem yapılabilir; push ve pop. ● Boyutu derlenme sırasında hesaplanır, çalışma esnasında bir daha değişmez. ● Her fonksiyonun kendi stack frame'i bulunur. www.robindimyanoglu.com Canyoupwn.me
  • 70. Aşağı tükürsen Heap, yukarı tükürsen Stack Stack kullanımına örnek www.robindimyanoglu.com Canyoupwn.me
  • 71. Aşağı tükürsen Heap, yukarı tükürsen Stack Stack kullanımına örnek: www.robindimyanoglu.com Canyoupwn.me
  • 72. Aşağı tükürsen Heap, yukarı tükürsen Stack Heap Hafızası ● Linked-list yapısındadır. www.robindimyanoglu.com Canyoupwn.me
  • 73. Aşağı tükürsen Heap, yukarı tükürsen Stack Heap Hafızası ● Linked-list yapısındadır. ● Değişken boyutludur. www.robindimyanoglu.com Canyoupwn.me
  • 74. Aşağı tükürsen Heap, yukarı tükürsen Stack Heap Hafızası ● Linked-list yapısındadır. ● Değişken boyutludur. ● malloc, calloc, realloc benzeri fonksiyonlar ile çalışma anında istenen boyutta hafıza alanı tahsis edilir ve kullanılır. www.robindimyanoglu.com Canyoupwn.me
  • 75. Aşağı tükürsen Heap, yukarı tükürsen Stack Heap Hafızası ● Linked-list yapısındadır. ● Değişken boyutludur. ● malloc, calloc, realloc benzeri fonksiyonlar ile çalışma anında istenen boyutta hafıza alanı tahsis edilir ve kullanılır. ● Artık kullanılmayacak olan hafıza alanları free fonksiyonu ile sisteme geri iade edilir. www.robindimyanoglu.com Canyoupwn.me
  • 76. Aşağı tükürsen Heap, yukarı tükürsen Stack Heap Hafızası ● Linked-list yapısındadır. ● Değişken boyutludur. ● malloc, calloc, realloc benzeri fonksiyonlar ile çalışma anında istenen boyutta hafıza alanı tahsis edilir ve kullanılır. ● Artık kullanılmayacak olan hafıza alanları free fonksiyonu ile sisteme geri iade edilir. ● Bu segmentin boyutu belli değildir ve çalışma esnasında sürekli değişir. www.robindimyanoglu.com Canyoupwn.me
  • 77. Heap kullanımına örnek: Aşağı tükürsen Heap, yukarı tükürsen Stack www.robindimyanoglu.com Canyoupwn.me
  • 78. 6. Bölüm: Tam gaz.. www.robindimyanoglu.com Canyoupwn.me
  • 79. Tam gaz.. Makine dili nedir? Bir işlemcinin belirli işleri yapmasını sağlayan komutlardır. Her mimarinin kendine özel komut seti vardır (x86, x86_64, MIPS, ARM ...). En düşük seviyeli programlama dilidir. Komutlar tamamen 1 ve 0'lardan oluşur Assembly nedir? Makine dili ile bir program yazmak oldukça zahmetli bir iştir. Kullanımını kolaylaştırmak amacıyla makine dilindeki her komuta isim verilmiş ve komutların kullanımı belli bir kurala oturtulmuştur. Bu yapının oluşturduğu dillere Assembly denir. www.robindimyanoglu.com Canyoupwn.me
  • 80. Tam gaz.. Aritmetik komutlar: inc reg -> reg++ www.robindimyanoglu.com Canyoupwn.me
  • 81. Tam gaz.. Aritmetik komutlar: inc reg -> reg++ dec reg -> reg-- www.robindimyanoglu.com Canyoupwn.me
  • 82. Tam gaz.. Aritmetik komutlar: inc reg -> reg++ dec reg -> reg-- add dest, src -> dest += src www.robindimyanoglu.com Canyoupwn.me
  • 83. Tam gaz.. Aritmetik komutlar: inc reg -> reg++ dec reg -> reg-- add dest, src -> dest += src sub dest, src -> dest -= src www.robindimyanoglu.com Canyoupwn.me
  • 84. Tam gaz.. Aritmetik komutlar: inc reg -> reg++ dec reg -> reg-- add dest, src -> dest += src sub dest, src -> dest -= src mul factor -> eax *= factor www.robindimyanoglu.com Canyoupwn.me
  • 85. Tam gaz.. Aritmetik komutlar: inc reg -> reg++ dec reg -> reg-- add dest, src -> dest += src sub dest, src -> dest -= src mul factor -> eax *= factor div divisor -> eax /= divisor www.robindimyanoglu.com Canyoupwn.me
  • 86. Tam gaz.. Boolean Cebiri: AND op1, op2 -> op1 &= op2 www.robindimyanoglu.com Canyoupwn.me
  • 87. Tam gaz.. Boolean Cebiri: AND op1, op2 -> op1 &= op2 OR op1, op2 -> op1 |= op2 www.robindimyanoglu.com Canyoupwn.me
  • 88. Tam gaz.. Boolean Cebiri: AND op1, op2 -> op1 &= op2 OR op1, op2 -> op1 |= op2 XOR op1, op2 -> op1 ^= op2 www.robindimyanoglu.com Canyoupwn.me
  • 89. Tam gaz.. Boolean Cebiri: AND op1, op2 -> op1 &= op2 OR op1, op2 -> op1 |= op2 XOR op1, op2 -> op1 ^= op2 TEST op1, op2 -> ZF = op1 & op2 www.robindimyanoglu.com Canyoupwn.me
  • 90. Tam gaz.. Boolean Cebiri: AND op1, op2 -> op1 &= op2 OR op1, op2 -> op1 |= op2 XOR op1, op2 -> op1 ^= op2 TEST op1, op2 -> ZF = op1 & op2 NOT operand -> !operand www.robindimyanoglu.com Canyoupwn.me
  • 91. Tam gaz.. Karşılaştırma ve jump: jmp addr -> koşulsuz jump www.robindimyanoglu.com Canyoupwn.me
  • 92. Tam gaz.. Karşılaştırma ve jump: jmp addr -> koşulsuz jump cmp dest, src -> (dest == src)? www.robindimyanoglu.com Canyoupwn.me
  • 93. Tam gaz.. Karşılaştırma ve jump: jmp addr -> koşulsuz jump cmp dest, src -> (dest == src)? je addr -> if(dest == src): jmp addr www.robindimyanoglu.com Canyoupwn.me
  • 94. Tam gaz.. Karşılaştırma ve jump: jmp addr -> koşulsuz jump cmp dest, src -> (dest == src)? je addr -> if(dest == src): jmp addr jne addr -> if(dest != src): jmp addr www.robindimyanoglu.com Canyoupwn.me
  • 95. Tam gaz.. Karşılaştırma ve jump: jmp addr -> koşulsuz jump cmp dest, src -> (dest == src)? je addr -> if(dest == src): jmp addr jne addr -> if(dest != src): jmp addr jg addr -> if(dest > src): jmp addr www.robindimyanoglu.com Canyoupwn.me
  • 96. Tam gaz.. Karşılaştırma ve jump: jmp addr -> koşulsuz jump cmp dest, src -> (dest == src)? je addr -> if(dest == src): jmp addr jne addr -> if(dest != src): jmp addr jg addr -> if(dest > src): jmp addr jge addr -> if(dest >= src): jmp addr www.robindimyanoglu.com Canyoupwn.me
  • 97. Tam gaz.. Karşılaştırma ve jump: jmp addr -> koşulsuz jump cmp dest, src -> (dest == src)? je addr -> if(dest == src): jmp addr jne addr -> if(dest != src): jmp addr jg addr -> if(dest > src): jmp addr jge addr -> if(dest >= src): jmp addr jp addr -> if(dest-src > 0): jmp addr www.robindimyanoglu.com Canyoupwn.me
  • 98. Tam gaz.. Ve en önemli temel komutu unutmayalım.. MOV dest, src -> dest = src www.robindimyanoglu.com Canyoupwn.me
  • 100. One ring to rule 'em all System Calls ● Kernel ile userland arasındaki köprü. www.robindimyanoglu.com Canyoupwn.me
  • 101. One ring to rule 'em all System Calls ● Kernel ile userland arasındaki köprü. ● Kernelin sunduğu hizmetleri assembly aracılığıyla kullanabilmemizi sağlayan arayüz. www.robindimyanoglu.com Canyoupwn.me
  • 102. One ring to rule 'em all System Calls ● Kernel ile userland arasındaki köprü. ● Kernelin sunduğu hizmetleri assembly aracılığıyla kullanabilmemizi sağlayan arayüz. ● open, read, write, close, wait, exec, fork, exit, kill bu fonksiyonlardan bazıları www.robindimyanoglu.com Canyoupwn.me
  • 103. One ring to rule 'em all System Calls ● Kernel ile userland arasındaki köprü. ● Kernelin sunduğu hizmetleri assembly aracılığıyla kullanabilmemizi sağlayan arayüz. ● open, read, write, close, wait, exec, fork, exit, kill bu fonksiyonlardan bazıları ● eax, ebx, ecx, edx, esx ve edi olmak üzere 6 adet argümanı vardır. www.robindimyanoglu.com Canyoupwn.me
  • 104. One ring to rule 'em all System Calls ● Kernel ile userland arasındaki köprü. ● Kernelin sunduğu hizmetleri assembly aracılığıyla kullanabilmemizi sağlayan arayüz. ● open, read, write, close, wait, exec, fork, exit, kill bu fonksiyonlardan bazıları ● eax, ebx, ecx, edx, esx ve edi olmak üzere 6 adet argümanı vardır. ● int 0x80 kesmesiyle aktifleştirilir. www.robindimyanoglu.com Canyoupwn.me
  • 105. One ring to rule 'em all www.robindimyanoglu.com Canyoupwn.me
  • 106. One ring to rule 'em all section .text _start: mov eax, 0x4 ; eax = sys_write() mov ebx, 0x1 ; ebx = stdout mov ecx, message ; ecx = &message mov edx, 0xF ; edx = mesajın uzunluğu int 0x80 ; kernel interrupt mov eax, 0x1 ; eax = sys_exit() mov ebx, 0x0 ; ebx = return değeri int 0x80 ; kernel interrupt section .data message: db "Hello, World!", 0dh, 0ah www.robindimyanoglu.com Canyoupwn.me
  • 107. 7. Bölüm: Sudan karaya geçiş www.robindimyanoglu.com Canyoupwn.me
  • 108. Sudan karaya geçiş Fonksiyon argümanları: www.robindimyanoglu.com Canyoupwn.me
  • 109. Sudan karaya geçiş Fonksiyon argümanları: Fonksiyon çağırma: www.robindimyanoglu.com Canyoupwn.me
  • 110. Sudan karaya geçiş Fonksiyon Return: www.robindimyanoglu.com Canyoupwn.me
  • 111. Sudan karaya geçiş Fonksiyon Return: If – Else: www.robindimyanoglu.com Canyoupwn.me
  • 113. Sudan karaya geçiş Dizi Elemanlarına Erişim: www.robindimyanoglu.com Canyoupwn.me
  • 114. Sudan karaya geçiş Dizi Elemanlarına Erişim: Değer Atama: www.robindimyanoglu.com Canyoupwn.me
  • 116. Araç çantası Tersine Mühendislik sırasında kullanılan araçlardan bazıları: ● file -> Bir dosyanın türünü öğrenmemizi sağlar www.robindimyanoglu.com Canyoupwn.me
  • 117. Araç çantası Tersine Mühendislik sırasında kullanılan araçlardan bazıları: ● file -> Bir dosyanın türünü öğrenmemizi sağlar ● strings -> Bir dosyanın içindeki ASCII stringleri gösterir www.robindimyanoglu.com Canyoupwn.me
  • 118. Araç çantası Tersine Mühendislik sırasında kullanılan araçlardan bazıları: ● file -> Bir dosyanın türünü öğrenmemizi sağlar ● strings -> Bir dosyanın içindeki ASCII stringleri gösterir ● readelf -> Bir ELF dosyası hakkında bilgi verir www.robindimyanoglu.com Canyoupwn.me
  • 119. Araç çantası Tersine Mühendislik sırasında kullanılan araçlardan bazıları: ● file -> Bir dosyanın türünü öğrenmemizi sağlar ● strings -> Bir dosyanın içindeki ASCII stringleri gösterir ● readelf -> Bir ELF dosyası hakkında bilgi verir ● objdump -> Bir object dosyası hakkında çeşitli bilgiler verir www.robindimyanoglu.com Canyoupwn.me
  • 120. Araç çantası Tersine Mühendislik sırasında kullanılan araçlardan bazıları: ● file -> Bir dosyanın türünü öğrenmemizi sağlar ● strings -> Bir dosyanın içindeki ASCII stringleri gösterir ● readelf -> Bir ELF dosyası hakkında bilgi verir ● objdump -> Bir object dosyası hakkında çeşitli bilgiler verir ● ltrace -> Programın yaptığı kütüphane çağrılarını gösterir www.robindimyanoglu.com Canyoupwn.me
  • 121. Araç çantası Tersine Mühendislik sırasında kullanılan araçlardan bazıları: ● file -> Bir dosyanın türünü öğrenmemizi sağlar ● strings -> Bir dosyanın içindeki ASCII stringleri gösterir ● readelf -> Bir ELF dosyası hakkında bilgi verir ● objdump -> Bir object dosyası hakkında çeşitli bilgiler verir ● ltrace -> Programın yaptığı kütüphane çağrılarını gösterir ● strace -> Programın yaptığı sistem çağrılarını gösterir www.robindimyanoglu.com Canyoupwn.me
  • 122. Araç çantası Tersine Mühendislik sırasında kullanılan araçlardan bazıları: ● file -> Bir dosyanın türünü öğrenmemizi sağlar ● strings -> Bir dosyanın içindeki ASCII stringleri gösterir ● readelf -> Bir ELF dosyası hakkında bilgi verir ● objdump -> Bir object dosyası hakkında çeşitli bilgiler verir ● ltrace -> Programın yaptığı kütüphane çağrılarını gösterir ● strace -> Programın yaptığı sistem çağrılarını gösterir ● gdb -> The GNU Debugger <3 www.robindimyanoglu.com Canyoupwn.me
  • 123. Araç Çantası Debugger nedir? ● Kelime anlamı: “Hata Ayıklayıcı” www.robindimyanoglu.com Canyoupwn.me
  • 124. Araç Çantası Debugger nedir? ● Kelime anlamı: “Hata Ayıklayıcı” ● Programın işleyişini detaylıca incelememize fırsat veren araç. www.robindimyanoglu.com Canyoupwn.me
  • 125. Araç Çantası Debugger nedir? ● Kelime anlamı: “Hata Ayıklayıcı” ● Programın işleyişini detaylıca incelememize fırsat veren araç. ● Programı istediğimiz yerden başlatma/durdurma (breakpoint). www.robindimyanoglu.com Canyoupwn.me
  • 126. Araç Çantası Debugger nedir? ● Kelime anlamı: “Hata Ayıklayıcı” ● Programın işleyişini detaylıca incelememize fırsat veren araç. ● Programı istediğimiz yerden başlatma/durdurma (breakpoint). ● Hafıza içeriğini inceleme/değiştirme (examine). www.robindimyanoglu.com Canyoupwn.me