상세 컨텐츠

본문 제목

[IOS] 프리다를 이용한 IOS 앱 후킹 (Level1)

기술보안/Mobile:IOS

by about_SC 2019. 1. 18. 16:01

본문

[IOS] 프리다를 이용한 IOS 앱 후킹 (Level1)

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

(도구 설치 방법론은 다루지 않는다)


환경분석
:
OS : Win7
TOOL : Frida, Frida-server, adb, Python2.7, 4S Rooting Phone


1) 앱을 단말기에 설치한다.




2) 앱을 실행하면 힌트가 되는 라벨문구가 적혀있는 앱의 메인 액티비티가 출력된다.
(라벨의 내용은 패스워드는 숨겨진 라벨에 존재한다는 내용이다)
임의의 문자 입력 후 verify 버튼을 클릭하면 패스워드가 일치하지 않는다는 메시지를 확인할 수 있다.




3) 아이폰과 PC를 USB로 연결 한 뒤 frida-ps -U 명령어를 통해 해당 앱의 프로세스 넘버를 확인한다.




4) 힌트의 내용을 되새겨보면, 요구되는 패스워드는 숨겨진 라벨에 존재하는 것으로 추측할 수 있다.

Apple의 Developer Document(https://developer.apple.com/documentation/uikit/uiwindow)
를 보면 UIWindow라는 클래스가 앱의 사용자 인터페이스와 뷰에 이벤트를 전달하는 객체의 배경이며,
라벨과 관련된 이벤트를 다룬다는 것을 확인할 수 있다.

Frida로 앱의 UI 인터페이스를 살펴보자.




5) 프리다를 실행 시켜 앱의 프로세스에 Attach 하자.




6) 한 화면에는 여러개의 뷰와 컨트롤들이 겹겹히 쌓이게 되는데, 이럴 경우 최상단의 UIWindow에 접근해야할 경우가 있다.
이럴 경우 keyWindow() 를 통해 최상단의 주소값을 가져올 수 있다. 이러한 특성을 이용하여 UIWindow 최상단에 접근해보자.





7) recursiveDescription() 을 이용하여 전체 뷰의 계층 구조를 출력할 수 있다. 해당 함수를 통해 최상단 뷰의 내용을 출력해보자.





8) 출력 시 숨겨진 라벨의 값을 확인할 수 있는데, 이 중 패스워드로 추측되는 값을 확인할 수 있다.





9) 획득한 패스워드 입력 시 문제 풀이가 성공되는 것을 확인할 수 있다.




참고 사이트

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

https://gflow-security.tistory.com/category/Mobile/iOS

https://developer.apple.com/documentation/uikit/uiwindow

https://www.frida.re/docs/javascript-api/#objc

관련글 더보기