Objective-C Runtime의 이해와 gdb attach 하기

 

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

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

Objective-C 는 런타임 기반의 언어이다.

런타임 언어란 무엇인가?

런타임 언어란 기능과 링크 등의 구현을 응용 프로그램을 실행하는 중에 결정을 하는 언어다.

그러면, Objective-C는 런타임 언어인가?

아니다. 런타임 기반의 언어이다.

응용 프로그램 코드가 실제로 실행때까지 컴파일 및 링크 작업을 연기한다.

컴파일 타임 및 런타임 링크 등의 결정을 할 수있는 한 연기한다는 것이다. 즉, 가능하면 동적으로 하려고 한다는 의미다.

그러면, 프로그램에서 import하는 런타임 라이브러리를 살펴보자

먼저, /var/mobile/Applications/ 으로 이동한다.

ls * 을 하면 앱들을 확인할수 있다.

ios_obj-c1

이 중에 Twitter 앱을 otool을 사용해서 import 를 살펴보면 아래와 같이 나온다.

그러면, Twitter에서 사용하는 런타임 라비으러리들을 볼수 있으며,
이 중 우리가 주목해서 봐야 할 라이브러리는 39번 줄의 /usr/lib/libobjc.A.dylib 이다.

이 라이브러리가 동적인 처리를 가능하게 해주는 라이브러리다.

다른 앱에서도 이 라이브러리를 볼 수 있다.

그럼 이제 gdb 를 이용해서 앱을 동적분석해보자.

twitter 앱을 실행한다.

그리고 ps aux |grep twitter 를 하면 twitter 앱의 pid를 확인할 수 있다.

pid으로 twitter 앱에 gdb attach 했다.
ios_obj-c2

그런데 보면 bp도 잘안걸리고.. 정상적으로 gdb가 동작하지 않는 것을 확인할수 있다.

There is absolutely no warranty for GDB. Type “show warranty” for details.
This GDB was configured as “–host=arm-apple-darwin9 –target=”.

그래서 인터넷에서 ios 용 gdb를 다운받아서 넣었다.
http://reverse.put.as/2012/04/16/how-to-compile-gdb-for-ios/

ios_obj-c3

이제야 뭔가가 되는 느낌이다..

이제 어디에 brack point를 걸어야 할까?

Objective-C 는 메세지 기반의 언어이다.

모든 처리를 메세지를 보내고 받으면서 동작한다.

메세지를 보낼때 사용하는 메소드가 objc_msgSend() 이다.

이 메소드에 break point를 걸어두면 앱을 분석하는데 많은 도움이 된다.

그리고 $r0과 $r1 레지스터의 정보도 확인하면 좋다.

$r0 는 어떤 클래스의 어떤 메소드가 메세지를 보내는지 확인할수 있고,
$r1 은 selector 를 찾을 수있다.

자 그럼 objc_msgSend 에 bp를 걸고 $r0 와 $r1 레지스터를 확인해보자
ios_obj-c4

오 근데 $r0 은 주소만 나오고 클래스와 메소드가 안보인다.(어떤설정을 해줘야 하는지 모르겠다..ㅠ)

그래도 이런 방식으로 동적디버깅을 진행하면 될듯.,.

참고 : http://highaltitudehacks.com/2013/06/16/ios-application-security-part-3-understanding-the-objective-c-runtime/
 

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

3 Responses to Objective-C Runtime의 이해와 gdb attach 하기

댓글 남기기