İPUCU

Tersine Mühendislik Reverse Engineering ve Cracking ile ilgili dökümanları bulabileceğiniz bölüm.

Seçenekler

radare2: Debugging

4 Hafta önce
#1
Gbmdpof - ait Kullanıcı Resmi (Avatar)
Kıdemli Yazılımcı
Üyelik tarihi:
09/2016
Mesajlar:
1.927
Teşekkür (Etti):
197
Teşekkür (Aldı):
663
Konular:
155
Ticaret:
(0) %
Geçen hafta katılım sağladığım BCACTF'te bir soru için debugger kullanmak gerekiyordu. Önce gdb kullanmayı düşünsem de sonra daha önceden merak saldığım fakat pek kullanım fırsatı bulmadığım radare2'yi bu soruda kullanmak istedim.

radare2 hakkında açtığım ilk konuya ulaşmak için tıklayın.

Benim bu CTF sorusunda kullandığım işlemlere geçmeden önce radare2 ile debugging işleminden biraz bahsedelim.

Öncelikle, bir programı debugging modunda açmak için radare2'yi -d seçeneği ile başlatmanız gerek. Örnek olarak:
Kod:
r2 -d /bin/ls
Debbugger oturumunu başlattıktan sonra ise bu komutları kullanabilirsiniz:
  • db flag - flag'e bir breakpoint yerleştirir, bu flag bir fonksiyon adı veya adres olabilir
  • db - flag - flag'deki breakpointi kaldırır
  • db - breakpointlerin listesini gösterir
  • dc - programı çalıştırır
  • dr - register'ların değerlerini gösterir
  • ds - step into
  • dso - step over
  • dbt - backtrace'i gösterir (backtrace, programın o an bulunduğu yere nasıl geldiğini gösterir)
  • dm - memory map'leri gösterir
  • ood - dosyayı yeniden debug modunda açar

Şimdi ise bu CTF'te karşıma çıkan soruya bakalım. Verilen programı çalıştırınca aşağıdaki çıktıyı veriyor:
Kod:
$ ./executable-ubuntu
Welcome to the lottery!
So now we're going to pick a ginormous number!
If it's 1, you win!
Your number is 1804289383!
Try again next time!
Eğer dediği şeyi yapıyorsa, rastgele bir sayı oluşturup bu 1 ise bize flag'i verdiğini anlayabiliriz. Bunun analizi için dosyamızı debugging modunda radare2 ile açarak başlayalım: r2 -d executable-ubuntu

Önce aaa komutu ile analiz edelim ve ardından pdf @ main komutu ile main fonksiyonunu disassemble edelim.



İşaretlediğim yerde ebx ile 1'in karşılaştırıldığını görebiliyoruz. Yani buraya bir breakpoint koyup burada ebx register'ının değerini 1 yaparsak bu cmp işlemi bizim istediğimiz şekilde olacaktır. Bunun için db ile breakpoint yerleştirip, dc ile programı devap ettirip, breakpoint'e geldiğinde ise dr ebx=0x1 ile ebx'in değerini 1 yapabiliriz.



Gördüğünüz gibi, kazandığımızı söyledi.
Kullanıcı İmzası
~humanity is overrated~
Rhotav, leaks, Hichigo, Javabex, lovelypeople, 0xd2 Teşekkür etti.

3 Hafta önce
#2
Üyelik tarihi:
06/2019
Mesajlar:
3
Teşekkür (Etti):
0
Teşekkür (Aldı):
0
Konular:
1
Ticaret:
(0) %
Merhaba emeğinize sağlık.I code slı Ascii ve hex kodları ile alakalı çözüm aryorum yardımcı olabilirmisiniz?
Not:199D7B6B000104E000000000000000002A1600007B911C D897ADEF00D60FD3D991D85B58898F30CA07278D4144469D95 3766729E90C81ED246873FD45C9C0000

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı