가. UnCrackable 정의 및 설치
1. UnCrackable 란?
- MAS Crackmes의 UnCrackable Apps는 모바일 리버스 엔지니어링을 실습할 수 있는 앱으로, OWASP MSTG(Mobile Security Testing Guide)로 활용할 수 있다.
- 쉽게 말해 런타임 조작 또는 탈옥탐지 우회 등과 같은 안드로이드 모의해킹 실습을 할 수 있는 앱이다.
2. UnCrackable 설치 방법
- 아래의 링크에 접속하여 "UnCrackable-Level1.ipa" 파일을 다운로드한다.
https://mas.owasp.org/crackmes/
- 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!"라는 문자가 숨김처리되어 있는 것을 확인할 수 있다.
- 현재 윈도우에 저런 글자가 숨김처리되어 있는 게 수상하여 해당 문자를 입력해 보니 성공하였다는 문구가 뜬다.
'Mobile App 취약점 진단 · 모의해킹 > iOS App 취약점 진단 · 모의해킹' 카테고리의 다른 글
아이폰 앱 구버전 설치 및 업데이트 방지 방법(AppStore++) (0) | 2023.11.26 |
---|---|
Odysseyra1n Sileo Tweak 설치 방법 정리(오류 해결) (0) | 2023.11.25 |
아이폰 탈옥 방법 - Odysseyra1n(오디세이레인) (0) | 2023.11.22 |
모바일 앱 개발 방식에 따른 차이점 및 진단 방법 정리 (0) | 2023.11.04 |
[iOS 취약점 진단] 16강 - Web View 종류 및 취약점 (0) | 2023.11.04 |