Tuesday, 11 March 2025

picoCTF - droids4




tools yang dibutuhkan untuk mengerjakan soal ini yaitu :

  1. Jadx

  2. Android studio



Buka aplikasi four.apk menggunakan jadx

A screenshot of a computer

Description automatically generated


 Buka file FlagstaffHill

A screen shot of a computer

Description automatically generated






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.


A screenshot of a phone

Description automatically generated

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.

A screen shot of a computer

Description automatically generated




Kita decompile dulu four.apk menggunakan apktool


A screen shot of a computer

Description automatically generated


Buka file flagstaffhill.smali menggunakan android studio


A screenshot of a computer program

Description automatically generated



Cari  const-string v5, “call it”

A screenshot of a computer program

Description automatically generated

Rubah menjadi 

invoke-static {p0}, Lcom/hellocmu/picoctf/FlagstaffHill;->cardamom(Ljava/lang/String;)Ljava/lang/String;

lalu tambahkan

move-result-object v5


A screenshot of a computer

Description automatically generated


Save, lalu build menggunakan apktool


A screenshot of a computer program

Description automatically generated


Jangan lupa untuk buat signature baru untuk aplikasi hasil rebuild.





Setelah membuat signature baru, kita tambahkan signature tersebut ke aplikasi new_four.apk


A screen shot of a computer

Description automatically generated



Jika sudah, kita install new_four.apk pada emulator, dan masukan password yang sudah kita susun


A screenshot of a phone

Description automatically generated




EmoticonEmoticon