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 |