skip to content
Yupy Syntax

HackTheBox - SAW

/ 3 min read

Last Updated:

HackTheBox Challange SAW Write up

Hint :

Malware forensics lab identifies new techniques for hiding and executing code dynamically. Samples that appear to use this technique have just arrived in their queue. Can you help them?

STATIC ANALYSIS

Oke langsung kita install apk tersebut pada device mobile tetapi disini APK tersebut tidak bisa kita buka atau tidak bisa berjalan setelah kita install. alt text

Mari kita lihat dekompilasi dengan Jadx-Gui, sepertinya kita perlu menjalankan aktivitas dengan maksud seperti gambar dibawah untuk melanjutkan atau menjalankan aplikasi ke langkah berikutnya. alt text

Selanjutnya kita mencoba melihat file AndroidManifest.xml, tampaknya disini dilakukan dengan mengeksekusi “android.intent.action.MAIN” dari aktivitas com.stego.saw.MainActivity alt text

Kita mencoba masuk di adb shell dan mengeksekusi payload dibawah untuk menjalankan apk tersebut alt text

Terminal window
:/ # am start -a android.intent.action.MAIN --es open "sesame" -n com.stego.saw/.MainActivity
alt text

Namun, disini saat kita mengklik tombol CLICK ME.. aplikasi tersebut akan tertutup. Menurut hasil dekompilasi, saat tombol CLICK ME.. diklik, tombol baru akan dibuat, dan saat tombol baru diklik, AlertDialog yang menerima nilai pengguna akan muncul. alt text

Jika kita disini melihat isi logcat, disini kita dapat melihat pesan “permission denied for windows type 2038” alt text

Menurut stackoverflow.com, kesalahan dapat diselesaikan dengan mengatur izin aplikasi di Pengaturan. Buka pengaturan izin Aplikasi dan centang allow display over other app. alt text

Kita jalankan lagi aplikasi tersebut dan CLICK ME.. dan klik tombol yang dibuat untuk melihat AlertDialog alt text alt text

Menurut source code, jika kita ada nilai yang dimasukkan di jendela alarm dan XORIFY disentuh, nilai input ditransmisikan bersama dengan FILE_PATH_PREFIX ke metode asli a alt text

Kita menggunakan source code javascript yang kita akan kaitkan dengan frida.

var awaitForCondition = function(callback) {
var module_loaded = 0;
var int = setInterval(function() {
Process.enumerateModulesSync()
.filter(function(m){ return m['path'].toLowerCase().indexOf('libdefault.so') != -1; })
.forEach(function(m) {
console.log("libdefault.so loaded!");
return module_loaded = 1;
})
if(module_loaded) {
clearInterval(int);
callback();
return;
}
}, 0);
}
function nativeTrace(nativefunc) {
var nativefunc_addr=Module.getExportByName("libdefault.so", nativefunc)
var func=ptr(nativefunc_addr);
Interceptor.attach(func, {
// set hook
onEnter: function (args) {
console.warn("\n[+] " + nativefunc + " called"); // before call
if (nativefunc == "_Z17_Z1aP7_JNIEnvP8_1PKcS0_") {
console.log("\n\x1b[31margs[0]:\x1b[0m \x1b[34m" + args[0].readUtf8String() + ", \x1b[32mType: ");
console.log("\n\x1b[31margs[1]:\x1b[0m \x1b[34m" + args[1].readUtf8String() + ", \x1b[32mType: ");
}
},
onLeave: function (retval) {
if(nativefunc == "_Z17_Z1aP7_JNIEnvP8_1PKcS0_"){
console.warn("[-] " + nativefunc + " ret: " + retval.toString() ); // after call
}
}
});
}
function hook() {
nativeTrace("_Z17_Z1aP7_JNIEnvP8_1PKcS0_");
}
awaitForCondition(hook);

DYNAMIC ANALYSIS

Jika kita mengklik XORIFY pada aplikasi setelah memasukan string acak, kita dapat melihat bahwa /data/user/0/com.stego.saw/ diteruskan sebagai argumen pertama dari fungsi _Z17_Z1aP7_JNIEnvP8_1PKcS0_ dan string acak yang kita masukan sebagai argumen kedua. alt text alt text

Setelah memasukan string fl0ating dan mengklik tombol “XORIFY”. jika kita pergi ke directory atau folder aplikasi /data/data/com.stego.saw yang ditersukan sebagai argumen pertama dari fungsi _Z17_Z1aP7_JNIEnvP8_1PKcS0_ diatas akan melihat file bernama “h” setelah kita memasukan string “fl0ating” alt text alt text

Kita mencoba membacanya file h disini kita mendapatkan alt text

Submit Flag in HackTheBox

alt text