Uncrackable1 write-up
Uncrackable1 write-up
앱 출처: https://github.com/OWASP/owasp-mstg/tree/master/Crackmes
루팅된 디바이스에서 앱 실행 시 아래와 같은 에러메시지와 함께 앱이 종료된다.
해당 부분을 이해하기 위해 분석이 필요하다.
MainActivity가 생성될 때 루팅 탐지 구문이 실행되는 것을 확인할 수 있다. 해당 함수를 따라가보면 아래와 같은 코드들이 나타나는데
해당 함수들의 smali 코드들을 하나씩 변경하여 우회할 수도 있겠지만 MainActivity의 v0.setCancelable(false); 부분을 v0.setCancelable(true); 로 변경해주면 에러메시지 발생 시 ok 버튼을 클릭하지 않고 뒤로가기를 클릭하여 우회할 수 있다.
루팅탐지를 우회하게 되면 아래와 같이 Secret String을 입력하라는 텍스트 창이 나타난다.
verify 함수를 분석해보면 a.a(v4)가 참일 경우, Success 문구가 출력되는 것을 확인할 수 있다.
a.a 함수를 분석해보면 사용자가 입력한 값과 sg.ventagepoint.a.a.a의 리턴 값을 비교하여 참 or 거짓을 반환하는 것을 확인할 수 있다.
sg.ventagepoint.a.a.a 함수를 분석해보면 AES와 관련된 암복호화 함수인것으로 보인다. 해당 리턴값과 사용자 입력값을 비교하므로
리턴값을 출력시키면 Secret String을 확인할 수 있을 것으로 보인다.
다음은 frida를 이용하여 sg.ventagepoint.a.a.a 함수의 리턴 값을 출력 시키는 함수 이다.
import frida, sys package_name = "owasp.mstg.uncrackable1"; def on_message(message, data): if message['type'] == 'send': print("[*] {0}".format(message['payload'])) else: print(message) jscode = """ Java.perform(function () { console.log('[+] Hooking Start!'); console.log(""); var aaClass = Java.use("sg.vantagepoint.a.a"); aaClass.a.implementation = function(arg1, arg2) { retval = this.a(arg1, arg2); password = '' for(i = 0; i < retval.length; i++) { password += String.fromCharCode(retval[i]); } console.log("[*] Decrypted: " + password); return retval; } console.log("[*] sg.vantagepoint.a.a.a modified"); }); """ try: device = frida.get_usb_device(timeout=10) pid = device.spawn(package_name) print("App is starting ... pid : {}".format(pid)) process = device.attach(pid) device.resume(pid) script = process.create_script(jscode) script.on('message',on_message) print('[*] Running Frida') script.load() sys.stdin.read() except Exception as e: print(e) |
코드에 대해 간단히 설명하면 sg.ventagepoint.a.a.a 함수의 리턴값을 retval 변수에 저장하고 password 변수에 문자열 형태로 저장한다.
그 후 console.log를 이용하여 password에 저장된 문자열을 출력한다.
확인한 문자열을 입력한 결과 Success라는 메시지가 출력되는 것을 확인할 수 있다.
'Pentest > [Android]' 카테고리의 다른 글
Activity 강제 호출 with ADB(Android Debug Bridge) (3) | 2020.04.21 |
---|---|
Magisk를 이용한 안드로이드 루팅 (4) | 2020.04.10 |
안드로이드(갤럭시) 순정 펌웨어 설치 (3) | 2020.04.10 |
Uncrackable2 write-up (0) | 2019.03.03 |
Android 7.0 Nougat Burp Suite Proxy 설정 1 (0) | 2019.02.28 |