1. 程式人生 > 實用技巧 >XCTF-app2

XCTF-app2

查殼

無殼,開啟看是一個登入介面,點選登入會顯示Waiting for you

逆向分析

檔案結構

啟動類是MainActivity,MainActivity是將兩個輸入框的內容傳送給SecondActivity。ili是使用者名稱,lil是密碼。

再看SecondActivity,下面是onCreate的程式碼

public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.activity_main2);
        Intent intent = getIntent();
        String stringExtra = intent.getStringExtra("ili");
        String stringExtra2 = intent.getStringExtra("lil");
        if (Encryto.doRawData(this, stringExtra + stringExtra2).equals("VEIzd/V2UPYNdn/bxH3Xig==")) {
            intent.setAction("android.test.action.MoniterInstallService");
            intent.setClass(this, MoniterInstallService.class);
            intent.putExtra("company", "tencent");
            intent.putExtra("name", "hacker");
            intent.putExtra("age", 18);
            startActivity(intent);
            startService(intent);
        }
        SharedPreferences.Editor edit = getSharedPreferences("test", 0).edit();
        edit.putString("ilil", stringExtra);
        edit.putString("lili", stringExtra2);
        edit.commit();
    }

其中Encryto.doRawData是一個So層的方法,去看看,檢視字串

有兩個可疑的字串,一個應該是Base64的table,另一個應該是一個Base64

檢視doRawData程式碼

AES加密,又看見這個so裡面已經有AES解密函式。按X檢視解密函式的引用,一路追回去,被一個名為decode的函式引用,與decode相對應還有一個encode,檢視encode函式和doRawData一模一樣。再回到Java層檢視誰呼叫了decode函式。發現在FileDataActivity中呼叫。

但是他解碼的不是剛才上面的那串。兩個都嘗試一下。第二個是正確的,解出來就是flag。

總結

這題有點迷,有點無厘頭。首先找不到使用者名稱密碼,其次看不懂呼叫關係,不知道這個APP的執行流程,flag也來得莫名其妙。不是很明白出題人的意圖。