x86 Mimarisi ve Tersine Mühendislik

Post on 12-Jan-2017

1.210 views 6 download

Transcript of x86 Mimarisi ve Tersine Mühendislik

Pwn101x86 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 kod01: IN cin >> start02: STO 0103: IN cin >> end04: STO 0205: IN cin step06: STO 03 <=07: LDA 01 | t = start08: ADD 03 | t += step09: OUT | cout << t10: STO 01 | start = t11: LDA 02 | t = end12: SUB 01 | t -= start13: 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 RegistersEAX: 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 RegistersEAX: 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 RegistersEAX: 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 RegistersEAX: 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 RegistersEIP: 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 RegistersEIP: 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 RegistersEIP: 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 RegistersESI & 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 RegistersESI & 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 SegmentText 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 SegmentData 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 SegmentBu 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ındaistenen 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ındaistenen 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ındaistenen 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 += srcsub dest, src -> dest -= src

www.robindimyanoglu.com Canyoupwn.me

Tam gaz..

Aritmetik komutlar:

inc reg -> reg++dec reg -> reg--add dest, src -> dest += srcsub dest, src -> dest -= srcmul factor -> eax *= factor

www.robindimyanoglu.com Canyoupwn.me

Tam gaz..

Aritmetik komutlar:

inc reg -> reg++dec reg -> reg--add dest, src -> dest += srcsub dest, src -> dest -= srcmul factor -> eax *= factordiv 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 &= op2OR op1, op2 -> op1 |= op2

www.robindimyanoglu.com Canyoupwn.me

Tam gaz..

Boolean Cebiri:

AND op1, op2 -> op1 &= op2OR op1, op2 -> op1 |= op2XOR op1, op2 -> op1 ^= op2

www.robindimyanoglu.com Canyoupwn.me

Tam gaz..

Boolean Cebiri:

AND op1, op2 -> op1 &= op2OR op1, op2 -> op1 |= op2XOR op1, op2 -> op1 ^= op2TEST op1, op2 -> ZF = op1 & op2

www.robindimyanoglu.com Canyoupwn.me

Tam gaz..

Boolean Cebiri:

AND op1, op2 -> op1 &= op2OR op1, op2 -> op1 |= op2XOR op1, op2 -> op1 ^= op2TEST op1, op2 -> ZF = op1 & op2NOT 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 jumpcmp dest, src -> (dest == src)?

www.robindimyanoglu.com Canyoupwn.me

Tam gaz..

Karşılaştırma ve jump:jmp addr -> koşulsuz jumpcmp 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 jumpcmp dest, src -> (dest == src)?je addr -> if(dest == src): jmp addrjne addr -> if(dest != src): jmp addr

www.robindimyanoglu.com Canyoupwn.me

Tam gaz..

Karşılaştırma ve jump:jmp addr -> koşulsuz jumpcmp dest, src -> (dest == src)?je addr -> if(dest == src): jmp addrjne addr -> if(dest != src): jmp addrjg addr -> if(dest > src): jmp addr

www.robindimyanoglu.com Canyoupwn.me

Tam gaz..

Karşılaştırma ve jump:jmp addr -> koşulsuz jumpcmp dest, src -> (dest == src)?je addr -> if(dest == src): jmp addrjne addr -> if(dest != src): jmp addrjg addr -> if(dest > src): jmp addrjge addr -> if(dest >= src): jmp addr

www.robindimyanoglu.com Canyoupwn.me

Tam gaz..

Karşılaştırma ve jump:jmp addr -> koşulsuz jumpcmp dest, src -> (dest == src)?je addr -> if(dest == src): jmp addrjne addr -> if(dest != src): jmp addrjg addr -> if(dest > src): jmp addrjge addr -> if(dest >= src): jmp addrjp 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