Cycript 를 이용해 iOS 앱 로그인 우회 실습

 

Notice : 해당 자료가 저작권등에 의해서 문제가 있다면 바로 삭제하겠습니다.
연구목적으로 사용하지 않고 악의적인 목적으로 이용할 경우 발생할 수 있는 법적은 책임은 모두 본인에게 있습니다.

iOS 앱 보안진단을 위한 환경설정
iOS 앱 정적 분석하기(class-dump-z, clutch)
Objective-C Runtime의 이해와 gdb attach 하기
iOS 앱 Cycript를 이용항 동적분석 및 변조
개발자 등록하지 않고 iOS 기기에 앱 설치 하기
Cycript 를 이용해 iOS 앱 로그인 우회 실습
Snoop-it 을 이용해서 iOS 앱 분석하기

다운로드 : 바이너리(MethodSwizzlingDemo.ipa), 프로젝트 소스(MethodSwizzlingDemo.zip)

1. 아래의 샘플 을 다운받아서 iOS 기기에 설치 해보자.
XCode 로 빌드해서 설치해도 되고, 바이너리 파일을 installipa 나 itunes 으로 설치해도된다.
나는 sftp 를 이용해 ipa 업로드후 installipa 으로 설치 했다.

ios_cycript_1

2. 앱을 실행하고 attach 하기.
앱을 실행하고 iOS 기기에 ssh 으로 접속하여 cycript 를 attach한다.
ios_cycript_2

3. 앱 분석하기.

ios_cycript_3

먼저 앱을 실행해보면 입력창 두개와 로그인 버튼이 2개있다.
현재는 두 버튼을 모두 눌러봐도 로그인은 되지 않는다.

이제 로그인을 우회하기 위해 분석을 해보자.

먼저 앱의 rootViewController를 확인한다.(RVC = UIApp.keyWindow.rootViewController)
현재 ipad 화면에 보여지는 뷰를 확인한다.(RVC.visibleViewController)
cycript으로 작성한 printMethods 함수로 ViewController의 메소드를 확인해보자.(printMethods(ViewController))

ios_cycript_4

ViewController의 ViewController.messages 를 이용해서도 메소드를 확인할 수 있다.

ios_cycript_5

확인한 메소드를 보면, validateLogin이나 pushLoginPage 와 같은 의미심장한 메소드들이 보인다.

해당 메소드의 정확한 선언을 보려면 class-dump-z를 이용한다.

ios_cycript_6

4. 앱 변조하기.

그럼 이번에는 로그인을 위해서 ViewController의 validateLogin을 변조해보자.
위의 class-dump-z의 결과에서 보듯이 validateLogin 는 bool 형을 리턴한다.
그래서 validateLogin을 호출하면 무조건 true 를 리턴하도록 함수를 덮어썼다.
(ViewController.messages[‘validateLogin’] = function () { return true; })

ios_cycript_7

이제 화면에서 로그인 버튼을 눌러보면 아래와 같이 로그인이 성공한 것을 볼수 있다.

ios_cycript_8

또 pushLoginPage 메소드는 웬지. 로그인이 성공하면 호출될 것 같은 메소드이다.

해당 메소드를 직접 호출해보자.

[UIApp.keyWindow.rootViewController.visibleViewController pushLoginPage]

명령을 실행하고 난 후에 화면을 확인해보니 동일하게 로그인된 화면을 볼 수 있었다.

 

This entry was posted in Objective-C/iPhone, Security/Hacking. Bookmark the permalink.

6 Responses to Cycript 를 이용해 iOS 앱 로그인 우회 실습

댓글 남기기