tools yang dibutuhkan untuk mengerjakan soal ini yaitu :
Jadx
Android studio
Buka aplikasi four.apk menggunakan jadx
Buka file FlagstaffHill
Mari kita fokus pada function getFlag
public static String getFlag(String input, Context ctx) {
StringBuilder ace = new StringBuilder("aaa");
StringBuilder jack = new StringBuilder("aaa");
StringBuilder queen = new StringBuilder("aaa");
StringBuilder king = new StringBuilder("aaa");
ace.setCharAt(0, (char) (ace.charAt(0) + 4));
ace.setCharAt(1, (char) (ace.charAt(1) + 19));
ace.setCharAt(2, (char) (ace.charAt(2) + 18));
jack.setCharAt(0, (char) (jack.charAt(0) + 7));
jack.setCharAt(1, (char) (jack.charAt(1) + 0));
jack.setCharAt(2, (char) (jack.charAt(2) + 1));
queen.setCharAt(0, (char) (queen.charAt(0) + 0));
queen.setCharAt(1, (char) (queen.charAt(1) + 11));
queen.setCharAt(2, (char) (queen.charAt(2) + 15));
king.setCharAt(0, (char) (king.charAt(0) + 14));
king.setCharAt(1, (char) (king.charAt(1) + 20));
king.setCharAt(2, (char) (king.charAt(2) + 15));
String password = "".concat(queen.toString()).concat(jack.toString()).concat(ace.toString()).concat(king.toString());
return input.equals(password) ? "call it" : "NOPE";
}
Terdapat 4 stringbuilder dengan nama ace, jack, queen, king. Setiap stringbuilder memiliki operasi setCharAt, Dimana operasi ini berfungsi untuk mengubah setiap char pada index yang dituju menjadi sebuah char baru sesuai request dari pembuat.
ace.setCharAt(0, (char) (ace.charAt(0) + 4)); // 'a' + 4 = 'e'
ace.setCharAt(1, (char) (ace.charAt(1) + 19)); // 'a' + 19 = 't'
ace.setCharAt(2, (char) (ace.charAt(2) + 18)); // 'a' + 18 = 's'
hasilnya = ets
jack.setCharAt(0, (char) (jack.charAt(0) + 7)); // 'a' + 7 = 'h'
jack.setCharAt(1, (char) (jack.charAt(1) + 0)); // 'a' + 0 = 'a'
jack.setCharAt(2, (char) (jack.charAt(2) + 1)); // 'a' + 1 = 'b'
hasilnya = hab
queen.setCharAt(0, (char) (queen.charAt(0) + 0)); // 'a' + 0 = 'a'
queen.setCharAt(1, (char) (queen.charAt(1) + 11)); // 'a' + 11 = 'l'
queen.setCharAt(2, (char) (queen.charAt(2) + 15)); // 'a' + 15 = 'p'
hasilnya = alp
king.setCharAt(0, (char) (king.charAt(0) + 14)); // 'a' + 14 = 'o'
king.setCharAt(1, (char) (king.charAt(1) + 20)); // 'a' + 20 = 'u'
king.setCharAt(2, (char) (king.charAt(2) + 15)); // 'a' + 15 = 'p'
hasilnya = oup
sekarang kita fokus pada variable password.
String password = "".concat(queen.toString()).concat(jack.toString()).concat(ace.toString()).concat(king.toString());
Password berisi gabungan dari stringbuilder queen+jack+ace+king
Waktunya kita coba password yang kita sudah temukan pada aplikasi fourth.apk
Jangan lupa untuk install aplikasi pada emulator android studio, bisa menggunakan command
“ adb install four.apk”
Atau langsung drag and drop aplikasi fourth.apk pada emulator kalian.
Jika kalian input password salah, returnnya akan “NOPE” sedangkan jika menggunakan password yang benar returnnya akan “call it”.
Lalu Dimana flagnya?
Kembali pada file FlagstaffHill, kita akan melihat sebuah function dengan cardamom (?)
Bagaimana jika kita ubah “call it” menjadi cardamom(input), mungkin flag terdapat didalamnya.
Kita decompile dulu four.apk menggunakan apktool
Buka file flagstaffhill.smali menggunakan android studio
Cari const-string v5, “call it”
Rubah menjadi
invoke-static {p0}, Lcom/hellocmu/picoctf/FlagstaffHill;->cardamom(Ljava/lang/String;)Ljava/lang/String;
lalu tambahkan
move-result-object v5
Save, lalu build menggunakan apktool
Jangan lupa untuk buat signature baru untuk aplikasi hasil rebuild.
Setelah membuat signature baru, kita tambahkan signature tersebut ke aplikasi new_four.apk
Jika sudah, kita install new_four.apk pada emulator, dan masukan password yang sudah kita susun
EmoticonEmoticon