본 문서는 iPhone iOS 의 기본 구조를 이해하고, 프로세스 및 Debug 등에 활용될 수 있는 도구를 소개하는데 목적이 있습니다. 다.  해당 내용은 아래와 같이 4개의 주제로 나눠 연재하겠습니다.
 

1. iOS Framework 이해
2. iOS App 분석 및 프로세스/툴 도구 소개
3. Static, Dynamic Code Analyzer 소개
4. Forensic Tools 소개



iOS App 분석 프로세스/툴 소개

1. Web App with a Proxy
다양한 iOS용 App 가운데 Web 기반의 App에 적용될 수 있는 진단 방법입니다.

가. Simulator with a Proxy
(1) 특징
기존의 웹 모의해킹 시 프록시 툴을 사용하는 것과 동일하게 에뮬레이터 상에서 접근하는 모든 HTTP(S) 패킷을 열람/수정/전송 할 수 있습니다.

(2) 실행 경로
/<설치경로>/Charles.app

(3) 세부 기능
● SSL Proxying – view SSL requests and responses in plain text
● Bandwidth Throttling to simulate slower Internet connections including latency
● AJAX debugging – view XML and JSON requests and responses as a tree or as text
● AMF – view the contents of Flash Remoting / Flex Remoting messages as a tree
● Repeat requests to test back-end changes
● Edit requests to test different inputs
● Breakpoints to intercept and edit requests or responses
● Validate recorded HTML, CSS and RSS/atom responses using the W3C validator

(4) 사용 예

                                                                  [그림 1] 프록시 설정

                                                  [그림 2] 프록시 실행 후 HTTP 패킷 확인



나. in Web Browser
(1) 특징
웹 브라우저 상에서 실행되는 아이폰 시뮬레이터에서 접근하는 아이폰 용 웹 어플리케이션을 기존의 웹 모의해킹 시 프록시 툴을 사용하는 것과 마찬가지로 에뮬레이터 상에서 접근하는 모든 HTTP(S) 패킷을 열람/수정/전송 할 수 있습니다.


(2) 실행 경로
http://www.testiphone.com/


(3) 세부 기능
아이폰 용 웹 어플리케이션을 웹 브라우저 기반 시뮬레이터를 통해 실행 가능합니다.


(4) 사용 예

                                       [그림 3] 웹 시뮬레이터로 iPhone App 실행


                                         [그림 4] 웹 시뮬레이터 및 웹 프록시 실행


나. in Web Browser
(1) 특징
웹 브라우저 상에서 실행되는 아이폰 시뮬레이터에서 접근하는 아이폰 용 웹 어플리케이션을 기존의 웹 모의해킹 시 프록시 툴을 사용하는 것과 마찬가지로 에뮬레이터 상에서 접근하는 모든 HTTP(S) 패킷을 열람/수정/전송 할 수 있습니다.


(2) 실행 경로
http://www.testiphone.com/


(3) 세부 기능
아이폰 용 웹 어플리케이션을 웹 브라우저 기반 시뮬레이터를 통해 실행 가능합니다.


(4) 사용 예

                                         [그림 5] 웹 시뮬레이터로 iPhone App 실행


                                           [그림 6] 웹 시뮬레이터 및 웹 프록시 실행



2. Decompiling

가. otool
(1) 특징
otool은 실행파일(or obj, lib 등)의 정보를 보여주거나 오브젝트 파일을 디컴파일 하여 어셈블리 코드를 추출해주는 툴입니다.


(2) 실행 경로
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/otool
(otool은 기본적으로 환경변수에 등록되어 있기 때문에 bash shell에서 실행파일 명(otool)과 인자 값을 주어 실행할 수 있습니다.)


(3) 세부 기능
다음은 otool에서 사용되는 옵션들입니다.

Options

Description

-a

Display the archive header, if the file is an archive.

-S

Display the contents of the `__.SYMDEF' file, if the file is an archive.

-f

Display the universal headers.

-h

Display the Mach header.

-l

Display the load commands.

-L

Display the names and version numbers of the shared libraries that the object file uses. As well as the shared library ID if the file is a shared library.

-D

Display just install name of a shared library.

-s segname sectname

Display the contents of the section (segname,sectname).  If the -v flag is specified, the section is displayed as its type, unless the type is zero (the section header flags). Also  the sections  (__OBJC,__protocol), (__OBJC,__string_object) and (__OBJC,__runtime_setup) are displayed symbolically if the -v flag is specified.

-t

Display the contents of the (__TEXT,__text) section.  With the -v flag, this disassembles the text.  And with -V, it also symbolically disassembles the operands.

-d

Display the contents of the (__DATA,__data) section.

-o

Display the contents of the __OBJC segment used by the Objective-C run-time system.

-r

Display the relocation entries.

-c

Display the argument strings (argv[] and envp[]) from a core file.

-I

Display the indirect symbol table.

-T

Display the table of contents for a dynamically linked shared library.

-R

Display the reference table of a dynamically linked shared library.

-M

Display the module table of a dynamically linked shared library.

-H

Display the two-level namespace hints table.

-p name

Used  with  the -t and -v or -V options to start the disassembly from symbol name and continue to the end of the (__TEXT,__text) section.

-v

Display verbosely (symbolically) when possible.

-V

Display the disassembled operands symbolically (this implies the -v option). This is useful with the -t option.

-X

Don't print leading addresses or headers with disassembly of sections.

-m

The object file names are not assumed to be in the archive(member) syntax, which allows file names containing parenthesis.



(4) 사용 예

                                     [그림 7] 어플리케이션 패키지 내용 보기


                                                      [그림 8] otool 실행


                                                      [그림 9] 결과파일 확인


                                        [그림 10] 어셈블리 코드 생성 확인



※ 악의적인 목적으로 이용될 수 있는 상세 설명은 해당 포스팅에서는 제외 되었습니다.


참고자료
[1] Static Analysis in Xcode, Apple Inc, 2009-08-28
http://developer.apple.com/library/mac/#featuredarticles/StaticAnalysis/index.html
[2] Mobile Web and App Development Testing and Emulation Tools, Paul Andrew, 2010-04-12
http://speckyboy.com/2010/04/12/mobile-web-and-app-development-testing-and-emulation-tools/
[3] iPhone Simulator
http://www.testiphone.com/
[4] charlesproxy
http://www.charlesproxy.com/
[5] Penetration Testing for iPhone/iPad Applications, Kunjan Shah,
[6] iOS Development Guide, Apple Inc, 2010-11-15
http://developer.apple.com/library/ios/documentation/Xcode/Conceptual/iphone_development/iOS_Development_Guide.pdf
[7] iOS Application Programming Guide, Apple Inc, 2011-02-24
http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html
[8] Mac OS X Developer Tools Manual Page, Apple Inc, 2010-11-03
http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/otool.1.html
[9] class-dump
http://www.codethecode.com/projects/class-dump/
[10] Mac OS X Developer Library, Apple Inc, 2009-08-28
http://developer.apple.com/library/mac/#featuredarticles/StaticAnalysis/_index.html
http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/Introduction/Introduction.html
http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/SharkUserGuide/CommandReference/CommandReference.html
[11] charlesproxy
http://www.charlesproxy.com/
[12] iPhone Database Details, DAMON, 2007-08-21
http://damon.durandfamily.org/archives/000487.html
[13] iPhone Privacy, Nicolas seior

댓글을 달아 주세요

  1. 엔신 2011.04.22 14:19  댓글주소  수정/삭제  댓글쓰기

    연구 많이 하고 계시군요 ㅎㅎ
    앱에서 전송되는 http 패킷을 보기 위해 제가 가끔 쓰는 방법으로 포트 미러링도 있습니다.
    유무선 공유기를 이용하여 wifi 환경에서 포트 미러링을 통하여 http 패킷을 볼 수 있습니다.
    또 특수한 앱의 경우 wifi 환경에서는 실행을 제한하고 3G 환경에서만 실행되도록 되어 있는 경우가 있는데
    이 경우에는 3G 환경에서 유무선공유기의 VPN 기능을 활성화하고, 아이폰의 VPN 기능을 이용하여 VPN 에 접속하게 되면, 포트 미러링으로 3G 환경에 제한된 패킷을 볼 수 있습니다.(아마 3G로 제한해둘 정도라면 HTTPS겠지만요...)

  2. 밤벌레 2011.07.02 23:55  댓글주소  수정/삭제  댓글쓰기

    글 잘보구 갑니다.. 4G LTE가 나온 시점에서의 분석환경도 찾아봐야겠군요..