PicoCTF - droids3
Background
Android App 逆向入門之一:拆開與重組 apk Android App 逆向入門之二:修改 smali 程式碼
Source code
package com.hellocmu.picoctf;
import android.content.Context;
/* loaded from: classes.dex */
public class FlagstaffHill {
public static native String cilantro(String str);
public static String nope(String input) {
return "don't wanna";
}
public static String yep(String input) {
return cilantro(input);
}
public static String getFlag(String input, Context ctx) {
String flag = nope(input);
return flag;
}
}
Recon
利用前一題學到的工具(JADX),先decompiler一下原本的程式在幹嘛(source code如上),會發現getFlag這個method所呼叫的nope只會吐出don't wanna
,而真正會print出flag的是yep這個method,所以我們可以修改一下,不過修改之前還是要知道一下流程
Apktool decode apk file$\to$修改必要的地方$\to$Apktool重新打包$\to$簽名$\to$Align$\to$Done,這一個部分在 Android App 逆向入門之二:修改 smali 程式碼 有詳細的說明
Exploit
- 修改smali(
./three/smali/com/hellcmu/picoctf/FlagstaffHill.smali
) 只要把invoke-static {p0}, Lcom/hellocmu/picoctf/FlagstaffHill;->nope(Ljava/lang/String;)Ljava/lang/String;
修改成invoke-static {p0}, Lcom/hellocmu/picoctf/FlagstaffHill;->yep(Ljava/lang/String;)Ljava/lang/String;
- 打包並簽名
這個真的找很久,需要align又要先簽名,雖然android studio把簽名的部分整合進去了,但algin的部分也是頗麻煩,所幸透過1的說明,直接使用2這個tool,就可以省掉不少時間,真香
$ apktool b three -o three_new.apk $ wget https://github.com/patrickfav/uber-apk-signer/releases/download/v1.3.0/uber-apk-signer-1.3.0.jar $ java -jar uber-apk-signer-1.3.0.jar --apks three_new.apk
- Android Studio安裝並執行
最後就直接在android studio執行emulator然後灌已經修改過的apk就好了,此時隨便輸入一些東西,就會噴flag
Flag: picoCTF{tis.but.a.scratch}