CTF

[2020 POX] mobile_pentest_binary Write-up

대장흰둥 2021. 4. 9. 20:07

파일을 열면 다음과 같은 apk 파일이 나옵니다. 

저는 안드로이드 핸드폰이 없어 apk파일을 실행할 수 없기 때문에 바로 jadx-gui 로 디컴파일을 진행하였습니다.

 

classes.dex 파일을 열면 다음과 같은 코드들이 보입니다 

중요한 파일은 com.example.mobilepentest의 MainActivity 입니다. 

Mainactivity의 medicine 함수를 보면 다음과 같은 코드가 보입니다. 

여기에서 getResources 는 resource, res 폴더에 있는 값을 가져와줍니다. 

res → raw → flag.txt 라는 파일이 있고 내용은 다음과 같습니다. 

그리고 다음의 코드는 input의 값에따라서 flag.txt 에있는 문자열을 하나씩 가져와줍니다. input 의 값은 다음과 같습니다. 

class Test{
	String localObject = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-!@#$%^&*()+=\\|/{}0123456789";
	String flag1;
	String cryptotext = localObject;
	public void method1() {
	
	flag1 = localObject.substring(32,33);
	StringBuilder test = new StringBuilder();
	((StringBuilder)test).append(flag1);
	((StringBuilder)test).append(cryptotext.substring(71, 72));
	flag1 = ((StringBuilder)test).toString();
	test = new StringBuilder();
	((StringBuilder)test).append(flag1);
	((StringBuilder)test).append(cryptotext.substring(76, 77));
	flag1 = ((StringBuilder)test).toString();
	test = new StringBuilder();
	((StringBuilder)test).append(flag1);
	((StringBuilder)test).append(cryptotext.substring(46, 47));
	flag1 = ((StringBuilder)test).toString();
	test = new StringBuilder();
	((StringBuilder)test).append(flag1);
	((StringBuilder)test).append(cryptotext.substring(70, 71));
	System.out.println(test);
		
		
	}
}
public class OnlineTest {
	public static void main(String[] args) {
		Test myTest = new Test();
		myTest.method1();
	}
}

저는 다음과 같은 코드를 작성하여 문자열을 하나씩 가져와 주어 flag 를 출력 해 주었습니다.