XCTF-app2

查壳

无壳,打开看是一个登录界面,点击登录会显示Waiting for you

逆向分析

文件结构

image-20200801113154552

启动类是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层的方法,去看看,查看字符串

image-20200731203313888

有两个可疑的字符串,一个应该是Base64的table,另一个应该是一个Base64

查看doRawData代码

image-20200731203737207

AES加密,又看见这个so里面已经有AES解密函数。按X查看解密函数的引用,一路追回去,被一个名为decode的函数引用,与decode相对应还有一个encode,查看encode函数和doRawData一模一样。再回到Java层查看谁调用了decode函数。发现在FileDataActivity中调用。

image-20200801113303207

但是他解码的不是刚才上面的那串。两个都尝试一下。第二个是正确的,解出来就是flag。

总结

这题有点迷,有点无厘头。首先找不到用户名密码,其次看不懂调用关系,不知道这个APP的执行流程,flag也来得莫名其妙。不是很明白出题人的意图。

posted @ 2020-08-01 11:42  S1mba  阅读(276)  评论(0编辑  收藏  举报