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