본문 바로가기

ctf

[SECCON 2015 CTF] reverse-engineering-android-apk-1

문제 : Please win 1000 times in rock-paper-scissors

 

문제는 android apk reversing 관한 문제이다. rps.apk 라는 파일을 먼저 준다.

 

tool : Genymotion, jd-gui, dex2jar, IDA Pro

 

일반 Mobile App 분석하기 위해서는 설치 파일인 android 설치 파일인 APK 알아야 한다.

 

APK(Android Package)

Android 플랫폼에서 어플리케이션 설치를 위해 배포되는 패키지 파일로, 압축 ZIP 파일 포맷 형태로 구성 되어있다. 주요 구성 요소는,

- AndroidManifest.xml : App 대한 정보 실행권한 등의 전반적인 정보를 가지는 xml

- classes.dex : 클래스들의 정보를 함축적으로 가지고 있는 파일

- META-INF : 프로그램 자체 정보 데이터. 배포 인증서로 서명한 내용이다.

- res : 패키지가 가지고 있는 내부 리소스 폴더이다.

- assets : 패키지가 가지고 있는 외부 리소스 폴더이다.

- resources.arsc : 별도로 컴파일 리소스 파일이다.

 

 classes.dex 파일은 android 실행 파일에 속하는 파일이라 보면 된다. dex2jar dex 파일로부터 class 파일을 추출하는 도구이다. 추출된 class 파일은 jd-gui라는 JAVA 디컴파일러를 통해 소스코드로 복원할 있다.

 

 

Genymotion 통해 실행시켜보면 일반적인 가위바위보 App이다. 바로 소스코드를 확인해보자.

 

 

소스 코드를 보면 SECCON 플래그 값을 뽑아내는 부분이다.

소스코드를 보면 cnt 값이 1000 되면 SECCON{107*(this.cnt + this.calc())} 것을 있다.

cnt 값은 1000 것을 있다. 하지만 calc 값은 없다.

 

 

 

calc() 정의되는 위치를 찾을 있다.

JNI(Java Native Interface) 대해 알아야 하는데 쉽게 설명하면, Java C/C++ 언어를 연동하는 솔루션이라 보면 된다.

[lib] – [x86] 폴더로 접근하니 libcalc.so 라이브러리 파일이 보인다.

 

 

IDA Pro 통해 분석해보니 calc() 함수는 7 return 하는 것을 확인할 있었다.

그래서 플래그는 SECCON{107*(1000+7)} 된다. , “FLAG : SECCON{107749}” 이다.

 

 

'ctf' 카테고리의 다른 글

[CodeGate 2013 CTF] binary 100  (1) 2016.01.04
[CSAW 2013 CTF] DotNetRevering.exe  (0) 2016.01.04
[CSAW 2013 CTF] csaw2013reversing1.exe  (0) 2015.12.31
[CSAW 2013 CTF] csaw2013reversing2.exe  (0) 2015.12.31
[SECCON 2015 CTF] exec-dmesg  (0) 2015.12.27