SECCON Quals CTF 2015 APK1 example 문제이다.
apk는 여기서 다운로드 받을 수 있다 -> download the apk
nox에 frida server 실행하여 풀이를 진행하였다. nox에서 frida를 사용하는 방법은 다음 글에서 확인할 수 있다.
2019/11/13 - [Mobile/Android] - [Android] nox에 frida 설치
앱 apk 설치 후 실행 화면은 다음과 같다. 가위, 바위, 보를 하는 프로그램이다.
apk를 JEB로 디컴파일해본다.
다음과 같은 조건을 만족시키면 flag를 획득할 수 있는 것으로 보인다.
if(1000 == MainActivity.this.cnt) {
((TextView)v0).setText("SECCON{" + String.valueOf((MainActivity.this.cnt + MainActivity.this.calc()) * 107) + "}");
}
rps.js 코드를 실행시키는 python 코드이다.
import frida
import sys
import threading
PACKAGE = 'com.example.seccon2015.rock_paper_scissors'
def get_device():
mgr = frida.get_device_manager()
changed = threading.Event()
def on_changed():
changed.set()
mgr.on('changed', on_changed)
device = None
while device is None:
devices = [dev for dev in mgr.enumerate_devices() if dev.type =='usb']
if len(devices) == 0:
print ('Waiting for usb device...')
changed.wait()
else:
device = devices[0]
mgr.off('changed', on_changed)
return device
if __name__ == '__main__':
jscode = open('rps.js', 'r').read()
device = get_device()
print(device)
process = device.attach(PACKAGE)
print(process)
script = process.create_script(jscode)
script.load()
sys.stdin.read()
usb로 기기와 연결되어 있으면, get_usb_device( )를 사용한다.
Nox와 같은 에뮬레이터라면 get_device(id,timeout)형식으로 연결한다.
rps.js 코드이다.
Java.perform(function () {
// Function to hook is defined here
var MainActivity = Java.use('com.example.seccon2015.rock_paper_scissors.MainActivity');
// Whenever button is clicked
var onClick = MainActivity.onClick;
onClick.implementation = function (v) {
// Show a message to know that the function got called
send('onClick');
// Call the original onClick handler
onClick.call(this, v);
// Set our values after running the original onClick handler
//this.m.value = 0;
//this.n.value = 1;
//this.cnt.value = 999;
this.cnt.value = 1000;
// Log to the console that it's done, and we should have the flag!
console.log('Done:' + JSON.stringify(this.cnt));
};
});
풀이 방법은 다양하지만 나는 this.cnt.value 값을 1000으로 변조하는 방법을 사용하였다. python 코드를 실행시키면 다음과 같이 flag를 알려준다.
반응형
'보안 및 개발 > MOBILE' 카테고리의 다른 글
[Android] OWASP UnCrackable 2 (0) | 2020.01.20 |
---|---|
[Android] OWASP UnCrackable 1 (0) | 2020.01.17 |
[android] 디컴파일 (dex2jar, jd-gui, jadx-gui) (0) | 2019.12.23 |
[android] 취약점 분석 툴 androbugs (0) | 2019.12.19 |
[iOS] OWASP ZAP 툴 (0) | 2019.11.22 |