O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

x86 Mimarisi ve Tersine Mühendislik

Hacktrick`16 PWN101 - x86 Mimarisi ve Tersine Mühendislik

  • Entre para ver os comentários

x86 Mimarisi ve Tersine Mühendislik

  1. 1. Pwn101 x86 Mimarisi ve Tersine Mühendislik
  2. 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. 3. 1. Bölüm: Köprüden Önce Son Çıkış www.robindimyanoglu.com Canyoupwn.me
  4. 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. 5. Köprüden Önce Son Çıkış www.robindimyanoglu.com Canyoupwn.me
  6. 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. 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. 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. 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. 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. 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. 12. 2. Bölüm: Ufak Adam Kompüteri www.robindimyanoglu.com Canyoupwn.me
  13. 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
  14. 14. Ufak Adam Kompüteri www.robindimyanoglu.com Canyoupwn.me
  15. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 36. 3. Bölüm: Ucundan Azcık.. www.robindimyanoglu.com Canyoupwn.me
  37. 37. Ucundan Azcık.. Register Nedir? ● İşlemci üzerinde yer alan, veri tutmaya yarayan bellek alanları. www.robindimyanoglu.com Canyoupwn.me
  38. 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. 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. 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. 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
  42. 42. Ucundan Azcık.. www.robindimyanoglu.com Canyoupwn.me
  43. 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. 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. 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. 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. 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. 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. 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. 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. 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
  52. 52. Ucundan Azcık.. www.robindimyanoglu.com Canyoupwn.me
  53. 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. 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. 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. 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. 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. 58. 4. Bölüm: Masaüstünde durduğu gibi durmuyor! www.robindimyanoglu.com Canyoupwn.me
  59. 59. Masaüstünde durduğu gibi durmuyor! www.robindimyanoglu.com Canyoupwn.me
  60. 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. 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. 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. 63. 5. Bölüm: Aşağı tükürsen Heap, yukarı tükürsen Stack www.robindimyanoglu.com Canyoupwn.me
  64. 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. 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. 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. 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. 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. 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. 70. Aşağı tükürsen Heap, yukarı tükürsen Stack Stack kullanımına örnek www.robindimyanoglu.com Canyoupwn.me
  71. 71. Aşağı tükürsen Heap, yukarı tükürsen Stack Stack kullanımına örnek: www.robindimyanoglu.com Canyoupwn.me
  72. 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. 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. 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. 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. 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. 77. Heap kullanımına örnek: Aşağı tükürsen Heap, yukarı tükürsen Stack www.robindimyanoglu.com Canyoupwn.me
  78. 78. 6. Bölüm: Tam gaz.. www.robindimyanoglu.com Canyoupwn.me
  79. 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. 80. Tam gaz.. Aritmetik komutlar: inc reg -> reg++ www.robindimyanoglu.com Canyoupwn.me
  81. 81. Tam gaz.. Aritmetik komutlar: inc reg -> reg++ dec reg -> reg-- www.robindimyanoglu.com Canyoupwn.me
  82. 82. Tam gaz.. Aritmetik komutlar: inc reg -> reg++ dec reg -> reg-- add dest, src -> dest += src www.robindimyanoglu.com Canyoupwn.me
  83. 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. 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. 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. 86. Tam gaz.. Boolean Cebiri: AND op1, op2 -> op1 &= op2 www.robindimyanoglu.com Canyoupwn.me
  87. 87. Tam gaz.. Boolean Cebiri: AND op1, op2 -> op1 &= op2 OR op1, op2 -> op1 |= op2 www.robindimyanoglu.com Canyoupwn.me
  88. 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. 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. 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. 91. Tam gaz.. Karşılaştırma ve jump: jmp addr -> koşulsuz jump www.robindimyanoglu.com Canyoupwn.me
  92. 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. 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. 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. 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. 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. 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. 98. Tam gaz.. Ve en önemli temel komutu unutmayalım.. MOV dest, src -> dest = src www.robindimyanoglu.com Canyoupwn.me
  99. 99. Ara vakti.. www.robindimyanoglu.com Canyoupwn.me
  100. 100. One ring to rule 'em all System Calls ● Kernel ile userland arasındaki köprü. www.robindimyanoglu.com Canyoupwn.me
  101. 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. 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. 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. 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. 105. One ring to rule 'em all www.robindimyanoglu.com Canyoupwn.me
  106. 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. 107. 7. Bölüm: Sudan karaya geçiş www.robindimyanoglu.com Canyoupwn.me
  108. 108. Sudan karaya geçiş Fonksiyon argümanları: www.robindimyanoglu.com Canyoupwn.me
  109. 109. Sudan karaya geçiş Fonksiyon argümanları: Fonksiyon çağırma: www.robindimyanoglu.com Canyoupwn.me
  110. 110. Sudan karaya geçiş Fonksiyon Return: www.robindimyanoglu.com Canyoupwn.me
  111. 111. Sudan karaya geçiş Fonksiyon Return: If – Else: www.robindimyanoglu.com Canyoupwn.me
  112. 112. Sudan karaya geçiş Döngüler: www.robindimyanoglu.com Canyoupwn.me
  113. 113. Sudan karaya geçiş Dizi Elemanlarına Erişim: www.robindimyanoglu.com Canyoupwn.me
  114. 114. Sudan karaya geçiş Dizi Elemanlarına Erişim: Değer Atama: www.robindimyanoglu.com Canyoupwn.me
  115. 115. Sudan karaya geçiş www.robindimyanoglu.com Canyoupwn.me
  116. 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. 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. 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. 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. 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. 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. 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. 123. Araç Çantası Debugger nedir? ● Kelime anlamı: “Hata Ayıklayıcı” www.robindimyanoglu.com Canyoupwn.me
  124. 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. 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. 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
  127. 127. FIN UYGULAMA ZAMANI! www.robindimyanoglu.com Canyoupwn.meCanyoupwn.me

×