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也来得莫名其妙。不是很明白出题人的意图。