Android/InjuredAndroid

FLAG THREE - RESOURCES

Analysis

code

submitFlag

public final void submitFlag(View view) {
        EditText editText = (EditText) findViewById(R.id.editText2);
        d.b(editText, "editText2");
        if (d.a(editText.getText().toString(), getString(R.string.cmVzb3VyY2VzX3lv))) {
            Intent intent = new Intent(this, FlagOneSuccess.class);
            new FlagsOverview().L(true);
            new j().b(this, "flagThreeButtonColor", true);
            startActivity(intent);
        }
    }

public class d {
    public static boolean a(Object obj, Object obj2) {
        return obj == null ? obj2 == null : obj.equals(obj2);
  }

    public static void b(Object obj, String str) {
            if (obj == null) {
                IllegalStateException illegalStateException = new IllegalStateException(str + " must not be null");
                h(illegalStateException);
                throw illegalStateException;
            }
    }
}

문제를 확인해보면 이전 FLAG ONE 문제와 다르게 문자열 코드에 그대로 저장된 것이 아니라 getString() 함수를 사용하여 리소스에서 가져오는 것을 확인할 수 있다.

여기서 문제는 일반 사용자도 쉽게 리소스 파일에 접근하여 해당 값을 알아낼 수 있다는 점이다.

 

Exploit

리소스 파일은 이전 smali 변조에서 디컴파일한 폴더에서 검색하면 쉽게 알아낼 수 있다.

이때 검색은 윈도우 폴더에 있는 검색 기능을 활용하기보다는 sublime text, vscode와 같은 도구에서 폴더를 열 수 있는 기능이 활용하여 폴더를 가져온 후 전체 검색 기능을 통해 진행하면 보다 쉽게 값을 알아낼 수 있다.

 

다음은 vscode에서 file → open folder 기능을 이용하여 디컴파일한 폴더를 가져온 화면이다.

 

폴더를 불러온 후 Search(Ctrl + Shift + F)기능을 사용하여 "cmVzb3VyY2VzX3lv "를 검색하면 다음과 같이 플래그를 얻을 수 있다.

 

획득한 플래그를 입력하면 다음과 같이 문제를 해결할 수 있다.

 

Reference

'Android > InjuredAndroid' 카테고리의 다른 글

FLAG SIX - Login 3  (0) 2021.09.21
FLAG FOUR - Login 2  (0) 2021.09.21
FLAG TWO - EXPORTED ACTIVITY  (0) 2021.09.21
FLAG ONE - Login  (0) 2021.09.21
XSSTEST  (0) 2021.09.13