iOS 앱 Cycript를 이용한 동적분석 및 변조


 

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

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

Cycript 는 본래 javascript와 Obj-C 를 결합한 스크립트의 인터프리터이지만
실행중인 프로세스에 침투하여 프로퍼티를 변경하고 함수를 동적으로 호출이 가능하다.

Cycript는 http://www.cycript.org/debs/ 에서 다운로드가 가능하다.

최신버전인 cycript_0.9.501_iphoneos-arm.deb 를 다운로드 받아 iPad에 sftp으로 업로드하고 설치했다.

ios-cycript1

잘 설치 되었다.!!

자 이제 Yahoo Weather 앱을 분석해보자.

먼저 Yahoo Weather 앱을 실행하고, ps 를 이용해 pid를 확인한다.

그리고 -p 옵션으로 pid를 넣어서 cycript를 실행하면 된다.
ios-cycript2

먼저 [UIApplication sharedApplication] 객체를 호출해보았다.

그리고 a변수에 객체를 넣었다.

그리고 a의 delegate정보를 확인해보니, YWAppDelegate 라는 것을 알 수 있다.

yahoo weather 앱은 아래 그림과 같이 iPad 상태바가 없다.

ios-cycript3

상태바를 나타나도록 하려면 아래와 같이 입력한다.

그러면 아래와 같이 상태바가 나타나는 것으 확인할수 있다.

ios-cycript4

이번에는 yahoo weather 앱 아이콘에 알림이 999개 온 것 처럼 변경해보자.

ios-cycript5

그리고 특정 url 으로 보낼수도 있다.

보통 앱을 분석할 때 keyWindow를 많이 확인한다.

keyWindow는 사용자의 터치 이벤트를 받아 처리하는 역할을 한다.

만약 앱에서 모든 윈도우를 확인하고 싶으면 아래와 같이 하면된다.

그리고 keyWindow를 찾으려고 하면 아래와 같이 찾을 수 있다.

그러면 UIApp.keyWindow에서 rootViewController를 확인해보자

Javascript와 Objective-C를 섞어서 이용하면 더 고급분석이 가능하다.

method를 프린트하는 함수를 작성해보자

이제 위에서 확인 했던 Delegate 클래스였던 YWAppDelegate을 넣어줘서 호출해보자.
ios-cycript6

@selector 뒤의 값이 메소드명이다.
getter 와 setter도 볼 수 있고 private method로 보이는 메소드도 있다.

같은 방법으로 위에서 확인했던 rootViewController인 YahooSlidingViewController를 넣어서 확인해보자
ios-cycript7

실제로 응용 프로그램에서 날씨 표시를 담당하는 뷰 컨트롤러를 찾기 위해, 우리는 다음과 같은 명령을 사용할 수 있다.

YWMainViewController 가 실제로 날씨표시하는 뷰으로 확인할 수 있다.

다시 printMethods를 통해 YWMainViewController를 살펴보면..
ios-cycript8

화면에는 길어서 잘렸지만 viewDidLoad 라는 메소드를 볼 수 있다.
selector:@selector(viewDidLoad),implementation:0x3428d

이 메소드는 view가 처음 로드될 때 호출되는 메소드로 보인다.

이 함수를 call 해보자

처음 로드할 때 정보를 업데이트 하는지 새로고침이 되는 것을 확인할 수 있다
ios-cycript10

이번에는 instance 변수를 확인하는 코드를 만들어보았다.

ios-cycript9

여기서 locationViewControllers 변수를 볼 수 있는데 사용자가 추가한 도시를 배열로 저장해두는 것으로 보인다.

와~ 신기하다..
cycript 를 이용하면 앱을 다양하게 분석할 수 있을듯.
특히 class-dump를 이용해 클래스와 메소드를 확인하고 동적으로 메소드 call을 하거나 인스턴스 변수들의 값을 변경하면서 분석하면, 강력한 도구가 될것으로 보인다.

참고 : http://highaltitudehacks.com/2013/07/02/ios-aios-appllication-security-part-4-runtime-analysis-using-cycript-yahoo-weather-app/
http://highaltitudehacks.com/2013/07/02/ios-application-security-part-5-advanced-runtime-analysis-and-manipulation-using-cycript-yahoo-weather-app/
http://iphonedevwiki.net/index.php/Cycript_Tricks

 


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

One Response to iOS 앱 Cycript를 이용한 동적분석 및 변조

  1. apollo89 says:

    현재뷰 사라지도록 : [xxxViewController dismissViewControllerAnimated:YES completion:nil]
    원하는뷰 나타나도록 : [xxxViewController presentViewController:newViewController animated:YES completion:nil]

    https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/index.html

댓글 남기기