다운로드 받은 apk파일을 설치하고 보면 다음과 같이 가위바위보 개념의 화면이 나온다.
이기면 점수가 오르는 형태의 앱인것 같다.
디컴파일해서 핵심 로직을 보면 다음과 같다.
cnt 변수값이 이겼을때 오르는 점수를 의미하고 이 값이 1000일 때 플래그가 나온다. 플래그에 해당하는 값을 보면 (cnt+calc())*107 인데 calc()함수는 calc.so 파일 내부에 정의되어 있는걸 확인할 수 있다.
해당 라이브러리 파일 내의 calc()함수를 보면 간단히 7이라는 값을 리턴하고 있는걸 볼 수 있다.
그럼 결국 플래그값은 (1000+7)*107 값일 것이다.
실제로 확인해보기 위해 cnt 최초값을 998로 맞춘다음 2점만 더 획득하면 플래그가 나오게 한 뒤 게임에서 지면 cnt값이 0으로 초기화되는 부분을 아예 삭제시켜버렸다.
요렇게 세군데 영역을 패치했다.
const v1, 0x3E6 추가
빨간박스 두군데 삭제
이제 앱을 재설치하고 실행한뒤 게임에서 2번이기면 플래그가 나온다.
'CTF > Writeup' 카테고리의 다른 글
Google CTF 2017 Food (0) | 2018.02.13 |
---|---|
su ctf 2014 (Reverse 200) Commercial Application! (0) | 2018.02.13 |
nullcon CTF 2018 web2 (0) | 2018.02.12 |
Easy CTF 2018 Nosource, Jr. (0) | 2018.02.11 |
Codegate 2018 Welcome to droid (0) | 2018.02.09 |