Codegate CTF 2018 Preliminary - Welcome to droid (Rev)

문제 파일 ()

앱을 디컴파일 해보면 Main4Activity.java에서 JNI코드를 사용하는것을 볼 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.example.puing.a2018codegate;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.C0546c;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;

public class Main4Activity extends C0546c {
EditText f3092l;

class C08481 implements OnClickListener {
final /* synthetic */ Main4Activity f3091a;

C08481(Main4Activity main4Activity) {
this.f3091a = main4Activity;
}

public void onClick(View view) {
Snackbar.m818a(view, "Replace with your own action", 0).m821a("Action", null).m809a();
}
}

protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView((int) R.layout.activity_main4);
m2632a((Toolbar) findViewById(R.id.toolbar));
((FloatingActionButton) findViewById(R.id.fab)).setOnClickListener(new C08481(this));
System.loadLibrary("native-lib");
this.f3092l = (EditText) findViewById(R.id.editText);
this.f3092l.setText(stringFromJNI());
}

public native String stringFromJNI();
}

앱을 설치해보려고 하니 에러가 났다.

조사해보니 AndroidManifest.xml에서 testOnly=true부분을 지워주면 된다고 한다.

apktool로 앱을 분해해보자

java -jar apktool_2.3.1.jar d droid.apk

수정 전 AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.puing.a2018codegate">
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:testOnly="true" android:theme="@style/AppTheme">
<activity android:label="@string/app_name" android:name="com.example.puing.a2018codegate.MainActivity" android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:label="@string/title_activity_main2" android:name="com.example.puing.a2018codegate.Main2Activity" android:theme="@style/AppTheme.NoActionBar"/>
<activity android:label="@string/title_activity_main3" android:name="com.example.puing.a2018codegate.Main3Activity" android:theme="@style/AppTheme.NoActionBar"/>
<activity android:label="@string/title_activity_main4" android:name="com.example.puing.a2018codegate.Main4Activity" android:theme="@style/AppTheme.NoActionBar"/>
<meta-data android:name="android.support.VERSION" android:value="26.1.0"/>
<meta-data android:name="android.arch.lifecycle.VERSION" android:value="27.0.0-SNAPSHOT"/>
</application>
</manifest>

앱의 정상적인 설치를 위해서 android:testOnly="true" 항목을 지워준다.
또한, Main4Activity의 화면에 나오는 결과가 궁금하므로 Main을 바꿔준다.

수정 후 AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.puing.a2018codegate">
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">
<activity android:label="@string/title_activity_main4" android:name="com.example.puing.a2018codegate.Main4Activity" android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<meta-data android:name="android.support.VERSION" android:value="26.1.0"/>
<meta-data android:name="android.arch.lifecycle.VERSION" android:value="27.0.0-SNAPSHOT"/>
</application>
</manifest>

다시 apktool을 이용해서 build를 해준다.

java -jar apktool_2.3.1.jar b droid

에러가 나는 경우에는 그냥 해당 줄, 해당 파일을 삭제해서 에러를 해결해나가면 된다. 어차피 문제를 푸는데 지장이 안되는 파일들이다.

https://github.com/appium/sign 를 이용해서 apk파일에 서명을 해준다.

java -jar sign.jar ./droid/dist/droid.apk

결과로 나온 droid.s.apk를 설치해보면 flag가 나오게 된다.

Wol!! awesome!! FLAG{W3_w3r3_Back_70_$3v3n7een!!!} hahahah!!

Share