Merhabalar TürkHackTeam ailesi, 15.11.2019-16.11.2019 tarihleri arasında forumumuz bir CTF etkinliği düzenledi bildiginiz gibi. Bu CTF'de Reverse kategorisinde ki soruların çözümlerini sizlere göstereceğim.
isinma.apk adlı dosyamızı indirdikten sonra JADX-GUI uygulaması ile açalım. Main Activity ' yi okuduktan sonra birseyleroluyor stringi içerisinde bir Resources Path'i görüyoruz. Resources > Values > strings.xml içerisinde o path'e gidiyoruz.
Orada binary ifadeleri görüp Binary to Text işlemine sokuyoruz ve bunun sonucunda defalarca base64 ' e sokulmuş bir dize elde ediyoruz. Defalarca kez base64 decode ettikten sonra ulaştığımız sonuç :
Üzerinde herhangi bir koruma vs. var mı ? Hangi dil ile yazılmış öğrenmek için DIE ile taratıyoruz.
Themida
Program .NET bir program olduğu için Themida'dan kurtarmak için programı Dump etmemiz gerekiyor. Ancak çalıştırıp direkt dump almak bir işe yaramayacak çünkü program başladığı anda AntiDump fonksiyonu çağırılıyor.
Programımızı Dotnet Tracer ile başlatalım ve Break On >Function Called seçeneğini işaretleyelim.
Sağdaki yeşil düğmeden programı başlatalım.
İlk fonksiyon olan .cctor ' a geldiğinde Dump alalım.
Dump aldıktan sonra çalışmayan programımızı Universal Fixer'a vererek düzeltebiliriz.
Programı dnSpy ile açalım.
EntryPoint'e gidip düzenlemek istediğimizde böyle bir görüntü karşılayacak bizi :
Bunun sebebi method isimleri. // ifadesi bulunduğundan yorum satırı olarak algılıyor dnSpy. Bunu aşmak için programı de4dot'a veriyoruz.
Diğer fonksiyonların aksine smethod1 isimli fonksiyonda bir takım olaylar geçiyor. Ascii değerler karaktere döndürülerek bir string e yazdırılıyor bizim burda yapacağımız şey entrypoint'te smethod1 i çağırmak ve smethod1 ' i flagi alacak şekilde düzenlemek.
İlk önce strings komutu ile sorunun içinde geçen stringlere bakalım.
Stringslerde THT{Bu_kadar_kolay_mi_sandin} geçiyor.Ama tabi ki flag bu değil.Sorunun adının debug_me2 olduğunu düşününce debug etmeden sonuca ulaşamayacağımız belli.Ida'yı açıp programın main fonksiyonunu incelediğimizde stack'a bir veri girişi ve aşağıda bir döngü görünüyor.
Şimdi döngünün başına ve sonuna breakpoint koyalım ve stackteki değişimleri gözlemleyelim.