BLOG
DKHOS - Mobile 200 - Tutmayın küçük enişteyi
Sorunun çözümü:
Bu soruda verilen uygulamayı emulatorde çalıştırdığımızda emulator detected uyarısıyla karşılaşıyoruz. Apkyı decompile edip incelediğimizde aşağıdaki ekran görüntüsündeki kısımda emulator detection kısmını atlamamız gerektiğini görebiliriz.
Apkyı apktool ile decompile edip smali kodunda bu kontrolun yapıldığı kısmı bulup kısaca if-eqz kısmını if-nez ile değiştirebiliriz.
Bu işlemi yaptıktan sonra ise sıradaki komutlar ile key oluşturup apkyı build edip kendi keyimiz ile imzalıyoruz.
#Key oluşturma
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
#build
apktool b soru2
#sign apk
jarsigner -keystore my-release-key.jks soru2 my-alias
Uygulamayı tekrar yükleyip çalıştırdığımızda not emulator toast mesajı ile karşılaşıyoruz. Ardından uygulamanın loglarını kontrol edersek uygulamanın 3 ayrı class daha load ettiğini görebiliriz. Ayrıca kaynak kodda statik olarak da gördüğümüz tahmin edilebileceği gibi encrypted halde bulunan flagimizi loglarda görebiliriz.
Verilen uygulama res/raw altında tuttuğu encrpyted dalvik executable dosyasını decrypt edip load etmektedir. Tahmin edilebileceği üzere dinamik olarak load olan bu dex dosyasındaki classlar ise flagimizin decryption fonksiyonlarını içermekte. O halde bu dexi elde etmemiz gerekmektedir.
Kaynak kodun yukarıda görünen kısmını incelediğimizde uygulamanın data dizinine "decr" adında bir dosya oluşturulmakta. Ancak uygulama bu dosyayı oluşturup dex'i load ettikten sonra diskten silmektedir. Bu yüzden emulator kısmı için yaptığımız gibi ekran görüntüsünde görülen delete işlemine dair parçayı silip tekrar apkyi yükleyip çalıştırdığımızda /data/data/dkhos.mob.two/ dizini altında decr dosyasına ulaşabiliriz.
Daha sonra bu dex dosyası decompile edilip yeni bir projede, hazır olan fonksiyonları kullanarak ecrypted flagimizi decrypt ettiğimizde flagimizi DKHOS_{salin_beni_gideyim} olarak bulabiliriz.