HackTheBox SeeTheSharpFlag WriteUps
“Saya telah membuat aplikasi verifikasi kata sandi. Jika saya dapat mengingat kata sandinya, aplikasi akan memberi tahu saya bahwa itu benar. Lihat apakah Anda dapat menebak kata sandi saya.”
Berikut ini tampilan dibawah bila aplikasi apk tersebut dibuka
Setelah itu apa yang bisa lakukan dengan ini, kita mencoba menginputkan random password tetapi aplikasi tersebut menolak dengan tampilan seperti gambar
Selanjutnya kita membuka jadx ternyata source code yang digunakan ini menggunakan Xamarin. Kita dapat melihat aplikasi ini dibangun di atas Xamarin , platform sumber terbuka untuk membangun aplikasi modern dan berkinerja baik untuk iOS, Android, dan Windows dengan .NET
Setelah itu kita mengcoba decompille source code Apk dengan apktool
Dari source code apk tersebut terdapat folder assemblies dan disini mencoba melihat source code dll dari SeeTheSharpFlag.dll
Kita membukanya dengan dnSpy dan ternyata file tersebut tidak bisa dibuka secara langsung
Mencoba membaca dll file tersebut
Untuk mendapatkan file dll yang dapat dibaca di dnspy, kita perlu mengekstrak dan membongkar panjang payload untuk mengetahui panjang payload dan kemudian LZ4 mendekompresi payload tersebut.
Kita mencoba menggunakan decompiler dari python yang didapat dari github Xamarin Decompres
Buka lagi dengan dnSpy dan kita mendapatkan source code dari dll tersebut dan coba ada hal apa yang menarik disini
Setelah mencari cari kita mendapatkan suatu modul button yang dimana ini mengarah pada click tombol pada Aplikasi
Dan Kita bisa melihat perbandingan string di sini, ini adalah nilai rahasia di aplikasi dan masukan kita
Mencoba memodifikasi dengan dnSpy
Kita bisa lihat setelah pemanggilan System.String::op_Equality
, instruksi brfalse.s akan melompat ke ldarg.0
, yang merupakan rute sukses
Disini setelah kita ganti dengan value seperti gambar dibawah selanjutnya kita save module tersebut
Build module nya dengan apktool
Verifikasi signer menggunakan jarsigner
Mengganti nama apk dengan zipalign
Setelah itu kita mencoba membuka aplikasi tersebut. disini bila kita menginputkan 1234
atau apapun input itu kita mendapatkan flag seperti gambar dibawah dan disini berhasil kita mengganti source code yang ada pada dll
Tetapi disini dimana letak Flag HTB nya? Karena kita hanya merubah route dari fail menjadi success, flag disimpan di variabel streamReader yang tidak tercetak. Idenya adalah kita akan mengubah streamReader.ReadToEnd()
menjadi array acak.ReadToEnd() dalam perbandingan karena ReadToEnd
akan membaca semua karakter dari posisi saat ini hingga akhir aliran, jika kita membaca dalam perbandingan maka kita tidak dapat membaca lagi.
Kemudian kami menempatkan streamReader.ReadToEnd()
ke dalam pesan Output di rute sukses, dan terakhir memodifikasi aliran untuk selalu datang ke rute sukses jika salah memasukkan rahasia/kata sandi.
Selanjutnya kita mencoba mengganti valuenya seperti digambar
Menjadi
Mencoba mengubahnya lagi
Menjadi
Success Crack
Setelah selesai Simpan ke modul baru, timpa dll di folder dekompilasi, repacking, sign, zipalign, install. Dan bila kita menginputkan random value lagi di aplikasi kita akan mendapatkan Flagnya