Inside Android Applications

Similar documents
Secure Programming Lecture1 : Introduction

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

Android Master Key Vulnerability

4S 1차년도 평가 발표자료

1. 안드로이드개발환경설정 안드로이드개발을위해선툴체인을비롯한다양한소프트웨어패키지가필요합니다 툴체인 (Cross-Compiler) 설치 안드로이드 2.2 프로요부터는소스에기본툴체인이 prebuilt 라는이름으로포함되어있지만, 리눅스 나부트로더 (U-boot)

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

서현수

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Google Maps Android API v2

슬라이드 1

슬라이드 1

(Microsoft PowerPoint - AndroG3\306\367\306\303\(ICB\).pptx)

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

기술문서 작성 XXE Attacks 작성자 : 인천대학교 OneScore 김영성 I. 소개 2 II. 본문 2 가. XML external entities 2 나. XXE Attack 3 다. 점검방법 3 라.

OM2M 기반의 OHP-M2M 오픈소스설치가이드 2015 년 8 월 경북대학교통신프로토콜연구실 최예찬, 강형우 요약 사물인터넷 (Internet of Things: IoT) 이이슈가되면서다양한사

PowerPoint Presentation

Facebook API

Spring Boot

PowerPoint 프레젠테이션

02_3 지리산권 스마트폰 기반 3D 지도서비스_과업지시서.hwp

Microsoft PowerPoint Application Resources[Part1](2.0h).pptx

을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을

슬라이드 1

Microsoft Word - src.doc

SBR-100S User Manual

PowerPoint Presentation

표준프레임워크로 구성된 컨텐츠를 솔루션에 적용하는 것에 문제가 없는지 확인

슬라이드 1

1부

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

쉽게 풀어쓴 C 프로그래밍

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

정보

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

Microsoft PowerPoint - 김창수 v2.pptx

Microsoft PowerPoint App Fundamentals[Part1](1.0h).pptx

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

PowerPoint Template

YUM(Yellowdog Updater,Modified) : RPM 패키지가저장된서버 ( 저장소 ) 로부터원하는패키지를자동으로설치한다. : YUM 도구는 RPM 의패키지의존성문제를해결

PowerPoint 프레젠테이션

[Brochure] KOR_TunA

Microsoft Word - 임베디드월드_WindowsEmbeddedCompact7_rev

리눅스설치가이드 3. 3Rabbitz Book 을리눅스에서설치하기위한절차는다음과같습니다. 설치에대한예시는우분투서버 기준으로진행됩니다. 1. Java Development Kit (JDK) 또는 Java Runtime Environment (JRE) 를설치합니다. 2.

Microsoft PowerPoint App Fundamentals[Part1].pptx

안드로이드 앱의 개인정보 유출 여부 분석

Studuino소프트웨어 설치

Microsoft Word - 안드로이드_개발_매뉴얼1.docx

ALTIBASE 사용자가이드 Templete

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

목차 1 전자정부프레임워크연동고려사항 실행환경 개발환경 어플리케이션배포 개발환경구성 Liberty profile 설치 Liberty profile v8.5.5 다운로드

슬라이드 1

( )부록

JVM 메모리구조

wtu05_ÃÖÁ¾

Cisco FirePOWER 호환성 가이드

SIGIL 완벽입문

Ⅰ. 스마트폰에대한보안위협현황 1. 국내스마트폰이용현황 2009 년 11월 28일아이폰의국내정식출시를시작으로스마트폰의보급과그이용이빠르게늘어나기시작하여 2012 년 8월에이르러서는국내스마트폰이용자가 3,000 만명을넘어서게되었다. 방송통신위원회의무선통신서비스현황자료 (

PowerPoint 프레젠테이션

Raspbian 설치 라즈비안 OS (Raspbian OS) 라즈베리파이 3 Model B USB 마우스 USB 키보드 마이크로 SD 카드 마이크로 SD 카드리더기 HDM I 케이블모니터

Microsoft PowerPoint Android-구조.애플리케이션 기초(1.0h).pptx

스마트월드캠퍼스 교육교제

슬라이드 1

PowerPoint 프레젠테이션

8.파일시스템과 파일 복구

8.파일시스템과 파일 복구

파워포인트

쉽게 풀어쓴 C 프로그래밊

PowerPoint Template

1) 리눅스커널 메모리관리, 프로세스관리, 파일시스템관리, 네트워크스택등하드웨어지원 2) Native 라이브러리 (C, C++) 안드로이드프레임워크에서필요한 C 와 C++ 라이브러리 3) 안드로이드런타임 코어라이브러리지원, Dalvik Virtual Machine 으로

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P

JDK이클립스

PowerPoint Presentation

Microsoft PowerPoint - 02처음으로만드는(Ver 1.0)

U.Tu System Application DW Service AGENDA 1. 개요 4. 솔루션 모음 1.1. 제안의 배경 및 목적 4.1. 고객정의 DW구축에 필요한 메타정보 생성 1.2. 제품 개요 4.2. 사전 변경 관리 1.3. 제품 특장점 4.3. 부품화형

Contents I. 취약점점검소개 II. III. IV. 점검프로세스분석 취약점점검방법 기타

View Licenses and Services (customer)

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

Install stm32cubemx and st-link utility

LATEX과 Mendeley를 활용한 문헌 관리 2017년 2월 6일 제1절 서지 관리 프로그램 연구 주제를 찾거나 선행 연구를 조사하는 가장 대표적인 방법이 문헌들을 찾아보는 것이다. 수없이 많은 논문들을 찾게 되고, 이런 논문들을 다운로드한 후 체계적으로 관리할 필

ICT03_UX Guide DIP 1605

소프트웨어 검증 및 설계

vRealize Automation용 VMware Remote Console - VMware

Inside Android Applications

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

ISP and CodeVisionAVR C Compiler.hwp

Operating Instructions

PowerPoint 프레젠테이션


Contributors: Myung Su Seok and SeokJae Yoo Last Update: 09/25/ Introduction 2015년 8월현재전자기학분야에서가장많이쓰이고있는 simulation software는다음과같은알고리즘을사용하고있다.

untitled

양정규 라온시큐리티

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

TipssoftAppActivity.java // 기본소스파일 main.xml // 배치와구성에관련된리소스파일 string.xml // 프로그램에서사용할문자열에관련된리소스파일 컴파일을하고나면 r.java 라는소스파일이하나추가되는데이파일은리소스파일을소스파일에서이용할수있도

Transcription:

Under the Hood: Reversing Android 번역문서 해당문서는연구목적으로진행된번역프로젝트입니다. 상업적으로사용을하거나, 악의적인목적에의한사용을할시 발생하는법적인책임은사용자자신에게있음을경고합니다. 원본 : http://resources.infosecinstitute.com/reversing-android-applications/ 번역자 : 김재기님 (jack2) 편집 / 감수 : 조정원님 ( 니키 )

내용 1. 들어가며... 2 2. 상세내역... 2 2.1. 미리보기... 2 2.2. 안드로이드개발에대한간략한설명... 3 2.3. Android Packages Dissected... 3 2.4. Security... 4 2.5. 역공학분석 ( 리버스엔지니어링 )... 5 2.6. 다음레벨을향하여... 7 2.7. 예제어플리케이션... 8 3. 마무리... 9 4. 끝맺음... 9

1. 들어가며 최근몇년동안모바일사용량은폭발적으로증가했다. 모바일소프트웨어의엄청난증가에는개인적이고민감한정보를저장, 처리, 전송하는어플리케이션도포함된다. 구글안드로이드와애플 IOS 플랫폼이유일한것은아니지만구글안드로이드와애플 IOS 플랫폼은우리일상컴퓨터습관을변화시켰다. 좋아하는모바일앱의숨겨진실제모습에놀란적이있는가? 이글에서숨겨진것들을발견하는법과안드로이드플랫폼에서좋아하는어플리케이션의숨겨진실제모습을보는방법을탐구할것이다. 안드로이드개발프로세스와안드로이드어플리케이션의내부그리고그것들을검토하는데사용할도구에대해대략적으로알아볼것이다. 또한현재있는안드로이드어플리케이션을변경하는방법과그것을할수있는범위그리고일부경고사항에대해알아볼것이다. 2. 상세내역 2.1. 미리보기 좋아하는모바일어플리케이션을정확히크랙하는방법에대해본격적으로알아보기전에, 이러한 프로그램을개발하는것에대해이야기해보도록하자. 안드로이드어플리케이션은실제로 java.lang.object 를확장시킨구글의 R 클래스기반 Java 어플리케이션이다. 구글은 Java 에서안드로이드 API 를개발했다. 그리고모든안드로이드어플리케이션은이기능의일부분을확장했다. 다른요소들은그래픽리소스를정의한 XML 설정파일 (AndroidManifest.xml, strings.xml 그리고 main.xml ), 어플리케이션에필요한권한, 화면상의위치와배치방법뿐만아니라다른기술적요구사항을포함한다. 바이트코드로컴파일되었을때, 안드로이드앱들은궁극적으로.dex(Dalvik executable) 파일이된다. 이러한.dex 파일들은달빅 (Dalvik) 가상머신에의해해석되고어플리케이션으로실행된다. 우리가안드로이드어플리케이션을리버싱하기위해사용하는도구들을커버할때.dex 포맷에대해더자세히이야기할것이다. 안드로이드플랫폼에대한한가지흥미로운점은패키지어플리케이션은리버싱을방지하기위해보호메커니즘이설계되어있지않다는것이다. 여러분의기기에서파일시스템일부분에접근하는것을허용시키지않는방식으로안드로이드운영체제는본질적으로보호기법이설계되어있다. 이러한환경에서해석된코드와컴파일되지않은코드만있기때문에,

어플리케이션리버싱은본질적으로올바른도구를찾는것과그것들을효율적으로사용하는것 만큼쉽다. 물론, 코드에대한더많은직접적인접근은비지니스로직, 구현결함또는안좋은 코딩관습사용에서결함을찾을수있는기회가될수있다는것을의미한다. 2.2. 안드로이드개발에대한간략한설명.apk 아카이브를떨어져분리하는경우, 안드로이드개발절차에대한일반적인이해가매우 유용하다. 아래내용은모든작업에대한방법에대해기본적인이해를하기위한프로세스의상위 버전을일반화한것이다. - 안드로이드개발환경설치. 이과정에대해구글에서는 'Installing the SDK' 문서에서설명하고 있다. 모든대부분운영체제를지원한다. - Java 코드개발. 나중에예제어플리케이션을통해알아볼것이다. - 패키치설치. 이것은 Eclipse IDE 통하거나또는커맨드라인도구를이용하여수행할수있다. - VM 또는실제기기에서어플리케이션테스트. - 마켓에배포. 이개발과정개요는본문에서의목적을위해충분하다. 그러나, 안드로이드어플리케이션개발에 대해더자세히알고싶다면, 구글안드로이드개발자가이드를참조해라. 이제우리는엔드 - 투 - 엔드개발과정이어떤지에대한생각을가지고.apk 파일의내부를 살펴보자. 2.3. ANDROID PACKAGES DISSECTED.apk 파일이어떤일이일어나는지에대해간력히살펴보자. 안드로이드어플리케이션은따라야 할기본구조를갖는다. 이목록은포괄적인것을의미하기보다는시작하는것을의미한다. 다음은안드로이드소스프로젝트가포함된중요항목들의간략한목록이다. AndroidManifest.xml - 패키지이름, 최소권장안드로이드버전어플리케이션을위한필수적인 XML 설정파일이다. /src - 소스파일 (.java) 위치. /res - 사용자프리젠테이션과관련된파일을포함하는리소스폴더. 일반적으로여기에그래픽 / 레이아웃 XML 문서들이존재한다. /res/layout/main.xml - 이설정파일은메인어플리케이션의레이아웃을설정하는정의를포함한다.

기본파일명은 'main.xml' 이다. /res/values/strings.xml - 무언가를상상할수있는경우, strings.xml 설정파일은문자열을포함한 다. 어플리케이션에의해다른곳에서참조하는정적 (static) 문자열정의들이다. 한가지중요한 문자열오브젝트이름은 "app_name" 이다. "app_name" 은안드로이드어플리케이션의이름을 포함한다. 기본파일명은 'strings.xml' 이다..apk 를리버싱하면, 아래의파일들을만날수있다. AndroidManifest.xml - 소스프로젝트에있는원본과동일한설정파일. 하지만바이너리형태로변환됨. /META-INF - CERT.RSA, CERT.SF 그리고 MANIFEST.MF 파일을포함하는폴더. 이파일들은어플리케이션디지털증명서뿐만아니라.apk 에서각파일에대한상대경로와 SHA1 다이제스트를포함한다. classes.dex - 모든자바.class 파일을포함하는.dex 아카이브 2.4. SECURITY 이전에우리는 AndroidManifest.xml 설정파일과그리고어플리케이션권한정의가어떤식으로 포함되어있는지언급했다. 다음라인은어플리케이션에권한을추가할수있는지침의예다. <uses-permission android:name="android.permission.internet" /> "android.permission.internet" 은어떤권한이필요되는지표시한다. 이특정값은어플리케이션이네트워크소켓을만들수있게하고, 효율적으로인터넷에인터넷에액세스권한을제공한다. 아래표는몇가지일반적인값을보여준다. 더완전한목록을보려면 android.manifest.permission 페이지를참조하길바란다. 몇몇일반적인 android.manifest.permission 값들 : ACCESS_COARSE_LOCATION - 포괄적인위치액세스 (Cell / WiFi) 허용 ACCESS_FINE_LOCATION - 자세한위치액세스 (GPS) 허용 ACCESS_WIFI_STATE - WiFi 네트워크정보에대한액세스허용 GET_ACCOUNTS - 기기에서계정목록에대한액세스허용 INTERNET - 네트워크및인터넷액세스허용 READ_CONTACTS - 연락처데이터액세스허용 VIBRATE - 진동설정 / 상태에대한액세스허용 WRITE_EXTERNAL_STORAGE - 외부저장소에대한쓰기허용 ( 예. SD Card)

안드로이드마켓에서아래의다이얼로그가나타나는이유는 AndroidManifest.xml 에서위에서 언급한권한관련항목이존재하기때문이다. 2.5. 역공학분석 ( 리버스엔지니어링 ) 이제우리는안드로이드어플리케이션의내부에무엇이있는지생각해보자. 어떻게하면이모바일프로그램들의본래모습이나타나도록분해해볼수있을까? 안드로이드어플리케이션을생성하는데필요한패킹과변환과정을리버싱할수있는다양한오픈소스도구들이있다. 안드로이드 apk 파일에서정보를추출하기위해사용되는도구들 : apktool -.apk 파일조작에사용되는도구 Download: http://code.google.com/p/android-apktool/

jad - 자바디컴파일러 ( 윈도우전용 ) Download: http://www.varaneckas.com/jad JD-Core + JD-GUI - 자바디컴파일러, 새로운자바버전과기능지원 Download: http://java.decompiler.free.fr dex2jar -.dex 파일을.class 파일로변환하는도구 Download: http://code.google.com/p/dex2jar/downloads/list (dex2jar) 안드로이드앱을디컴파일 / 리버싱하는과정은아래와같다 : - 분석하기원하는앱을마켓에서안드로이드기기에다운로드한다. - 안드로이드기기에서 PC 로.apk 파일을복사. 해당기기의파일시스템에대한전체액세스 권한을필요로한다. 이와같은이유로루팅된 Motorola Droid 를사용했다. 기기에있는.apk 파일의기본경로는 /data/app 이다. 여기에서목표를결정해야한다. 단순히어플리케이션에서 XML 문서또는그래픽을검토하거나 변경하는경우에는아래의방법을사용하는것으로충분하다. java jar apktool.jar d file.apk destination_directory 이명령은.apk 파일을압축해제할것이다. 그리고프로젝트의디렉토리구조를다시생성한다. 바이너리 XML 파일을평문 XML 로변환할것이다. 이방법은 AndroidManifest.xml 에서어플리케이션이요청하는특정권한을볼수있는빠르고간단한검사방법이다. 이과정이진행되는동안.dex 코드는.smali 포맷으로변환된다..smali 포맷은원래.dex 바이트코드의디스어셈블버전이다. C 언어로작성된바이너리에서어셈블리언어를생성하기위해유틸리티를사용하는것과대략적으로동일하다. 반면에이과정에서원본소스코드를얻지못하는경우에는바이트코드로변환할수있는원본코드에대한매우정확한설명을얻을수있을것이다..java 소스코드를검증하기위한것이목적인경우에는, 더많은수동적인접근이필요하다. 자세한 과정은아래와같다. -.apk 파일압축해제 (unzip file.apk) dex2jar classes.dex

- classes.dex 를.jar 파일로변환 (dex2jar classes.dex) -.jar 파일압축해제 (unzip classes_dex2jar.jar) jad s.java *.class - jad( 또는유사한도구 ) 로바이트코드를디컴파일 (jad s.java *.class) 이시점에서이제원본어플리케이션과본질적으로동일한자바소스파일을갖는다. 이러한두가지방법을결합하는경우, XML 설정파일과자바소스파일을리뷰해서원본어플리케이션이작동하는방식에대한좋은이해를할수있다. 모든게좋은동안에스스로에게물어볼수있다 - 여기에서우리는어디로가야하는것인가? 한가지간단한리뷰를통해서좀더실질적인측면에대해살펴보자. 2.6. 다음레벨을향하여심사숙고할수있는한가지는어플리케이션을변경할수있는방법과기기에설치를위해어플리케이션을리빌드하는방법이다. 보안관점에서, 지금까지설명한방법을이용한리버싱된안드로이드어플리케이션의가장쉬운타겟은 XML 설정파일이다. 해당파일을바꾸는것은자바소스코드상에서변경이필요없다. 또한권한변경은전체어플리케이션에부여될수있다. 이것은어떤리소스를접근하거나추가적인권한을더하는것을방지하길원할경우유용할수있다. AndroidManifest.xml 에서 android.permission.internet 을제거하는것은한가지좋은예이다. 이것은효과적으로어플리케이션에서내장된광고를사용하기위한목적과같은네트워크연결을차단할수있다. 그러나이러한변경는자바소스자체를변경하는것보다는훨씬더적은영향을미친다. 응용프로그램이코딩되어있는방법을고려하지않아서이러한접근은문제가될수있다. 특정권한집합을제거하는것은어플리케이션을무력화하고사용할수없게만들수있을가능성이크다. 기존안드로이드어플리케이션의자바소스를변경하고리패키징하는것에는몇가지문제가있다. 첫째로패키지는키로서명이되어야한다. 가상머신과기기에서안드로이드어플리케이션을테스트하는데사용되는디버그키가있다. 그러나, 해당키로서명하는것은몇가지부작용이있다. 마켓에서소프트웨어를설치하지않았기때문에안드로이드기기는출처를알수없는소프트웨어의설치를허용하도록설정해야한다. 다른문제는 zipalign 도구는패키지에서사용되지않는점이다. 안드로이드문서에따르면어플리케이션이더많은메모리를사용하게된다고한다. 이것은자신의어플리케이션을개발자키없이적합하지않게사용하는것이다.

이전두문장에서설명된내용에딱맞는주목할만한어플리케이션이있다. 즉, 압축해제한.apk 파일에서보여지는 AndroidManifest.xml 상에서부적합한권한을제거하고확인한다. 그다음다시빌드한뒤유효한키로서명된패키지를재설치한다. 아래의 URL 을통해관련된더많은내용을알수있다. https://market.android.com/details?id=com.xeudoxus.privacy.blocker&hl=en 2.7. 예제어플리케이션 여기서다루는부분의일부를설명하기위해매우단순한샘플어플리케이션을만들었다. 이 프로그램은단순히사전에정의된 URL( 구글파비콘 ) 을가지고온다. 그리고이것을 Webview 컨테이너에나타낸다. 해당어플리케이션은 android.permission.internet 권한이필요하다. 아래의스크린샷중왼쪽은적절한권한이있는어플리케이션을보여준다. 그리고오른쪽스크린 샷은해당권한이제거된어플리케이션이다. 어플리케이션이리소스에접근할적절한권한이없음에도불구하고프로그램이그래픽을표시하고로드하려는시도를주의해라. 이와같은결과는검사하기위한코딩을하지않았기때문이다. 이것은설정파일에서권한을변경하는것은의도하지않은결과를가져온다는것을나타낸다. 해당소스와어플리케이션은각각의링크를통해다운로드받을수있다. (fetch.zip, fetch.apk)

3. 마무리안드로이드어플리케이션을구성하는요소, 내용을검토하기 위한.apk 분해하는방법, 프로그램의요소를더분석하는데사용할수있는도구들에대해다루어보았다. 그리고 AndroidManifest.xml 에있는시스템기반의안드로이드권한, 기기리소스에접근하는방법, 리소스 제어를 변경하는 방법에 대해서도 살펴보았다. 추후에는.smali 코드를 사용한 어플리케이션변경과.apk 파일리패키징그리고취약성평가도구를다루어볼예정이다. 관련된컨텐츠 infosec android resources reversing android applications reversing android apps ollydbg resource rebuilding reverse android apps quickview apk converting smali code legality of reverse engineering android apps how to break the source code for a android application reverse engineering android apps 저자에관하여 Carl Benedict 은보안엔지니어이고취약점리서치와개발, 웹어플리케이션보안, 리버시엔지니어링에열정을가지고있는컨설턴트이다. 그는현재 Forbes에서발표한 200개의최고소규모회사 에포함되어있는한회사에서일하고있다. 그외에 Carl은작은비지니스들, 포춘 500의회사들, 연방정부를위해일하고있다 4. 끝맺음 http://resources.infosecinstitute.com/ 사이트에서는다양한해킹공격시연문서및방어들이정기적으로배포되고있습니다. 입문자들대상으로설명한문서들이많아서연구목적으로번역을시작하였습니다. 앞으로도좋은컨텐츠에대해서는정기적으로번역을해서배포하도록하겠습니다. 또한꾸준히활동하는멤버들에게번역출판의기회를드리고있습니다. 번역에참여해주신멤버들에게감사합니다.