Cycript

Tags
tools
동적분석
요약
런타임에서 동적분석 가능

런타임 조작

  • Objective-Cruntime oriented language.
  • 실제 함수에서 어떤 동작을 할 지가 런타임에서 결정됨.
  • 이 특성으로 인해 공격자가 함수 내용을 런타임에서 조작해도 됨.

Cycript

  • Cycript라는 런타임 디버깅 도구를 이용한 동적 분석.
  • Objectvie-C 문법Javascript 문법 지원.
  • 앱이 실행되고 있는 상태에서 분석을 진행할 수 있다.
  • 클래스 덤프로 파악한 함수 정보를 바탕으로 함.
  • 인스턴스 메소드, 클래스메소드 등을 직접 호출 및 변경, 멤버변수 값을 조회하고 바꾸는 등의 행위 가능.
  • Cycript 활용에 앞서 필요한 기초 문법부터 알아보자.

1) 앱 인스턴스 얻기

$ [UIApplication sharedApplication] # cycript에서 alias로 UIApp를 제공함. $ UIApp
notion image

2) 앱 델리게이트 객체 획득

$ [UIApplication sharedApplication].delegate # alias인 UIApp 활용한 명령어 축약 $ UIApp.delegate
  • UIApplicationDelegate 프로토콜을 채택한 객체 획득.
  • 모든 앱은 앱과 연관된 메세지 처리를 위한 delegate를 가진다.
    • 로딩을 끝냈거나
    • 백그라운드로 전환 시
    • 포그라운드로 전환 시 등

3) keyWindow 획득

인스턴스 메소드인 keyWindow로 바로 키 윈도우 획득 가능.
$ [[UIApplication sharedApplication] keyWindow] # alias 활용 $ [UIApp keyWindow]
notion image
  • windows 메소드로 윈도우 목록 획득 후, UIWindow 클래스의 keyWindow 인스턴스 메소드로 키 윈도우인지 확인
    • [[[UIApplication sharedApplication] windows][0] keyWindow]

4) rootViewController 획득

  • root view controller
    • 현재 화면에 콘텐츠를 보여주는 것을 담당하고 있는 윈도우.
    • 화면에 있는 버튼 클릭 시, 연결된 행위를 실행하는 등 핵심 요소
$ [[[UIApplication sharedApplication] keyWindow ] rootViewController] # alias 활용 $ [[UIApp keyWindow] rootViewController]
 

실습 예시

1) 알림창 띄워보기

  • SpringBoardUIAlertView를 띄워보자.
  • 앱이 돌아가는 상태에서 분석 (디버거는 멈춰서 한줄한줄)
notion image
notion image

2) Document 디렉토리 경로 출력시키기

notion image
 

3) keyWindow의 뷰 계층구조 확인

notion image
 

4) Class dump로 확인 후 특정 메소드 강제 호출

notion image
notion image
인증을 거치지 않고 다음화면과 관련된 메소드를 강제 호출하였다.
인증을 거치지 않고 다음화면과 관련된 메소드를 강제 호출하였다.

5) 날씨앱 알림 뱃지 개수 바꿔보기

notion image
야후 날씨앱의 알림뱃지 개수가 1234개로 바뀌었다.
야후 날씨앱의 알림뱃지 개수가 1234개로 바뀌었다.