THT DUYURU

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

ugursuz reklam
takipci
Seçenekler

radare2: Debugging

Gbmdpof - ait Kullanıcı Resmi (Avatar)
Geliştirici
Üyelik tarihi:
09/2016
Mesajlar:
1.993
Konular:
157
Teşekkür (Etti):
195
Teşekkür (Aldı):
729
Ticaret:
(0) %
1
11267
16-06-2019 18:39
#1
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.
---------------------
~humanity is overrated~
Rhotav, leaks, Hichigo, Javabex, lovelypeople, 0xd2 Teşekkür etti.
erdemoztutkac - ait Kullanıcı Resmi (Avatar)
Yeni Üye
Üyelik tarihi:
06/2019
Mesajlar:
3
Konular:
1
Teşekkür (Etti):
0
Teşekkür (Aldı):
0
Ticaret:
(0) %
25-06-2019 13:35
#2
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