본문으로 바로가기

가. UnCrackable 정의 및 설치

1. UnCrackable 란?

- MAS Crackmes의 UnCrackable Apps는 모바일 리버스 엔지니어링을 실습할 수 있는 앱으로, OWASP MSTG(Mobile Security Testing Guide)로 활용할 수 있다.

- 쉽게 말해 런타임 조작 또는 탈옥탐지 우회 등과 같은 안드로이드 모의해킹 실습을 할 수 있는 앱이다.

 

2. UnCrackable 설치 방법

- 아래의 링크에 접속하여 "UnCrackable-Level1.ipa" 파일을 다운로드한다.

https://mas.owasp.org/crackmes/

 

MAS Crackmes - OWASP Mobile Application Security

MAS Crackmes Welcome to the MAS Crackmes aka. UnCrackable Apps, a collection of mobile reverse engineering challenges. These challenges are used as examples throughout the OWASP MASTG. Of course, you can also solve them for fun.

mas.owasp.org

 

- 3uTools를 이용하거나 본인이 알고 있는 다양한 방법으로 디바이스에 다운로드한 ipa파일을 설치한다.

 

나. 문제 풀이

1. 문제 의도 파악

- 앱 실행 후 텍스트박스에 임의의 값을 넣고 'Verify' 글자를 탭 한다.

- "Verification Failed", "This is not the string you are looking for. try again."이라는 오류창이 출력된다.

- 아무래도 앱이 원하는 Secret Key를 찾는 게 이번 문제의 핵심인 듯하다.

 

2. 뷰 계층 구조 분석

- 어느 부분을 후킹 해야 할지 알 수 없으므로 기초 정보를 수집하기 위해 뷰 계층 구조를 분석한다.

*뷰 계층 구조를 보는 것은 iOS 애플리케이션의 UI를 정밀하게 분석하고, 이를 기반으로 원하는 기능을 후킹 하거나 앱 동작을 이해하는 데 중요한 첫 단계입니다. 특히, 앱의 내부 동작을 이해하고 취약점을 분석하거나, UI 기반 자동화 작업을 수행하려는 경우 매우 유용합니다

 

- 뷰 계층을 분석하기 위한 프리다 소스코드는 다음과 같다.

01	if (ObjC.available) {
02		console.log("Objective-C hooking start.");
03
04		// UIWindow 클래스 참조
05		var UIWindow = ObjC.classes.UIWindow;
06
07		// 앱에서 현재 활성화된 윈도우 가져오기
08		var keyWindow = UIWindow.keyWindow();
09		if (keyWindow)
10		{
11			console.log("Key Window Handle: " + keyWindow.handle);
12
13			// 윈도우의 뷰 계층구조 가져오기
14			var description = keyWindow.recursiveDescription().toString();
15			console.log("Recursive Description:\n" + description);
16		} 
17		else 
18		{
19			console.log("No key window available.");
20		}
21	} 
22	else
23	{
24		console.log("Objective-C runtime is not available.");
25	}

08 line : 현재 앱에서 가장 앞에 있는 윈도우의 메모리 주소를 저장

13 line : 앱의 뷰 계층 구조(View Hierarchy)를 문자열로 저장

 

- 위 프리다 소스코드의 실행결과는 다음과 같다.

 

3. Secret Key 도출

- 출력된 뷰 계층구조를 보니 "i am groot!"라는 문자가 숨김처리되어 있는 것을 확인할 수 있다.

 

- 현재 윈도우에 저런 글자가 숨김처리되어 있는 게 수상하여 해당 문자를 입력해 보니 성공하였다는 문구가 뜬다.