본 문서는 iPhone iOS 의 기본 구조를 이해하고, 프로세스 및 Debug 등에 활용될 수 있는 도구를 소개하는데 목적이 있습니다. 다. 해당 내용은 아래와 같이 4개의 주제로 나눠 연재하겠습니다.
1. iOS Framework 이해 2. iOS App 분석 및 프로세스/툴 도구 소개 3. Static, Dynamic Code Analyzer 소개 4. Forensic Tools 소개 |
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