Analysis
Code
submitFlag
public final void submitFlag(View view) {
EditText editText = (EditText) findViewById(R.id.editText2);
d.b(editText, "editText2");
String obj = editText.getText().toString();
byte[] a2 = new g().a();
d.b(a2, "decoder.getData()");
if (d.a(obj, new String(a2, d.p.c.f3141a))) {
Intent intent = new Intent(this, FlagOneSuccess.class);
new FlagsOverview().I(true);
new j().b(this, "flagFourButtonColor", true);
startActivity(intent);
}
}
public class g {
/* renamed from: a reason: collision with root package name */
private byte[] f1911a = Base64.decode("NF9vdmVyZG9uZV9vbWVsZXRz", 0);
public byte[] a() {
return this.f1911a;
}
}
public final class c {
/* renamed from: a reason: collision with root package name */
public static final Charset f3141a;
static {
Charset forName = Charset.forName("UTF-8");
d.d(forName, "Charset.forName(\"UTF-8\")");
f3141a = forName;
d.d(Charset.forName("UTF-16"), "Charset.forName(\"UTF-16\")");
d.d(Charset.forName("UTF-16BE"), "Charset.forName(\"UTF-16BE\")");
d.d(Charset.forName("UTF-16LE"), "Charset.forName(\"UTF-16LE\")");
d.d(Charset.forName("US-ASCII"), "Charset.forName(\"US-ASCII\")");
d.d(Charset.forName("ISO-8859-1"), "Charset.forName(\"ISO-8859-1\")");
}
}
submitFlag 함수는 다음과 같은 순서로 진행한다.
- editText2 값을 이용하여 사용자가 입력한 값을 가져온 후 문자열로 변환하여 obj 변수에 저장한다.
- g 클래스의 a 함수의 반환 값을 a2 바이트 형 변수에 저장한다.
(이는 "NF9vdmVyZG9uZV9vbWVsZXRz"가 base64로 디코딩된 값이라는 것을 확인할 수 있다) - 이전 문제와 동일하게 d 클래스의 a함수를 통해 두 값을 넘겨주는데 첫 번째 인자는 사용자 입력 값이고 두 번째 입력 값은 a2변수를 utf-8로 인코딩 후 넘겨주게 된다.
- utf-8인 코딩은 String(byte[] bytes, Charset charset)와 같은 형식을 사용하여 진행한 것이다.
- 만약 두 값이 같다면 FlagOneSuccess 액티비티를 활성화 시킨다.
여기서 문제점은 중요한 값을 단순히 base64를 인코딩하여 코드에 저장했다는 것이다.
Exploit
문제 풀이는 간단하다 결국은 사용자 입력과 비교하는 값을 base64로 인코딩하여 코드에 저장하였기 때문에 해당 값을 복호화하여 문제를 해결할 수 있다.
base64 decoding은 간단히 온라인 홈페이지를 통해 해결할 수 있다.
이후 디코딩한 값을 입력해주면 다음과 같이 문제를 해결할 수 있다.
Reference
- Resources, string
https://developer.android.com/guide/topics/resources/string-resource?hl=ko - base64 decoder
https://www.base64decode.org/
'Android > InjuredAndroid' 카테고리의 다른 글
FLAG SEVEN - SQLITE (0) | 2021.09.21 |
---|---|
FLAG SIX - Login 3 (0) | 2021.09.21 |
FLAG THREE - RESOURCES (0) | 2021.09.21 |
FLAG TWO - EXPORTED ACTIVITY (0) | 2021.09.21 |
FLAG ONE - Login (0) | 2021.09.21 |