iOS App Hooking with Frida(1)


이번 포스팅에서는 Frida를 사용한 iOS App hooking에 대하여 다루도록 하겠습니다.

(도구 설치와 같은 기초 지식은 다루지 않습니다.)


문제파일은 아래 경로를 통하여 다운받을 수 있습니다.

https://github.com/OWASP/owasp-mstg/tree/master/Crackmes


분석환경
OS: Ubuntu 18.04 LTS
Tools: Frida, Frida-Server

ipa 파일 설치 과정은 iOS의 버전에 따라 다르기 때문에 생략하였습니다.

먼저 앱을 iOS 기기에 설치합니다.

[그림 1 앱 설치]


앱을 실행 시키면 "A Secret is Found In The Hidden Label!" 이라는 문구가 적혀있는 앱의 메인이 출력됩니다.

[그림 2 앱 메인 화면]


아이폰과 PC를 USB로 연결 후 frida-ps를 이용해 앱의 프로세스 정보를 확인합니다.

[그림 3 frida-ps 정보 확인]


아무런 문자나 입력하고 Verify를 클릭하면 키 값을 찾는데 실패했다는 문구가 출력됩니다.

[그림 4 키 값 검증 실패]


힌트의 내용으로 볼 때 비밀 키의 값은 숨겨진 라벨에 존재하는 것으로 추측할 수 있습니다.

Apple의 Developer Document를 보면 UIWindow라는 클래스가 앱의 사용자 인터페이스와 뷰에 이벤트를 전달하는 객체의 배경이며

라벨과 관련된 이벤트를 다룬다는 것을 알 수 있습니다.

위에서 얻은 정보를 통해 Frida로 앱의 UI 인터페이스를 살펴보겠습니다.

Frida를 실행시켜 앱의 프로세스에 Attach합니다.

[그림 5 frida Attach]


 Frida의 ObjC 함수를 이용해 UIWinodw에서 최상위 뷰를 확인하기 위해 다음과 같이 입력합니다.

[그림 6 keyWindow()함수를 이용한 최상위 뷰 확인]


이제 해당 뷰의 rootViewController를 통해 UIWindow를 구성하는데 사용된 항목들을 살펴보겠습니다.
명령어는 다음과 같이 입력합니다.
1
console.log(ObjC.classes.UIWindow.keyWindow().rootViewController().view().subviews().toString())
cs

[그림 7 UIWindow 필드 확인]


UILabel의 text에 "i am groot!"라는 값이 hidden=YES 속성으로 숨겨져 있으며 그 밑에는 힌트에 해당하는 문자열 값이 존재합니다.
UITextField에도 키 입력창에 입력했던 키 값이 보입니다.

따라서 힌트에 해당하는 숨겨져 있는 라벨의 값인 "i am groot!"를 입력하면 성공 메시지가 출력됩니다.


지금까지 Frida를 사용한 iOS App Hooking에 대하여 알아봤습니다.

다음 포스팅에서는 두번째 Crackme 문제를 가지고 포스팅을 이어가도록 하겠습니다.

참고 : https://www.nowsecure.com/blog/2017/04/27/owasp-ios-crackme-tutorial-frida/

이 글을 공유하기

댓글