안드로이드 앱 분석 팀 기반의 설계 프로젝트 2019.03.27 박민재 souling4you@gmail.com.

Slides:



Advertisements
Similar presentations
All Rights Reserved, Copyright© UBIVELOX co.,Ltd LG U+ 과금 API 소개 Version1.0 Authorubivelox Date21-Feb
Advertisements

모바일 프로그래밍 개론 UNIT 01 로봇 SW 컨텐츠 교육원 조용수. 학습 목표 모바일 프로그래밍이란 ? Embedded System 특성 Mobile OS Hybrid and Native SDK and NDK 2.
For Android 이재원.  페이스북 SDK 설치  2 가지 예제 & 소스  API 사용 예제 프로젝트 만들기  Graph API  참고사항 & 사이트.
삼성소프트웨어멤버십 20 th 박희근 ( A n d r o i d.
안드로이드 (Android) 발표자 : 이강민. 1. 안드로이드란 ? 구글에서 제작한 모바일 디바이스를 위한 플랫폼 ▫ 모바일 디바이스 플랫폼이란 ?  모바일 디바이스를 위한 소프트웨어 집합 ( 미들웨어, 키 어플리케이션, 운영체제 등 ) 2. 모바일 플랫폼 시장 점유율.
© IBM Corporation 2006 목 차목 차  자바 언어의 소개  자바 언어의 역사  자바 환경 설정 (JDK 1.5)  Documentation API 의 설치  Eclipse 의 설치와 사용법  HelloWorld.
Page 1 Android Programming November 04 / 2009 S/W Junhyuk Jang.
© DBLAB, SNU 화일구조. 강의 소개 - 화일구조  Instructor : Prof. Sukho Lee (301 동 404 호 )  홈페이지 :  교과목 개요 – 이 과목은 데이타 관리와 응용을 위한 화일 구조의 설계와.
일 시 : (목) 장 소 : 문산종합사회복지관장) 파주시문산종합사회복지관 기관안내.
2013학년도 3-1 정보컴퓨터공학부 컴퓨터 소프트웨어 설계 및 실험
화일구조.
3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
객체지향 프로그래밍.
어서와 Java는 처음이지! 제1장 기초 사항.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
A n d r o i d Android 2010 년 5월 19일 작성자 : 백 선 재.
Programming for the java Virtual machine
알기 쉽게 해설한 Java 8th edition
Java Presentation 중간 시험2 풀이
[INA470] Java Programming Youn-Hee Han
어서와 Java는 처음이지! 제1장 기초 사항 IT응용시스템공학과 김형진 교수.
제 1 장. JAVA란 작성자 : NLIP.
자바란 무엇인가? JDK의 다운로드 및 설치 방법 Hello, Java 프로그램의 작성 자바 프로그램의 작동 원리
System Call Linux Kernel 수업 3번째.
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
제1강 안드로이드 특징과 개발환경 구축 안드로이드 앱 개발 강좌.
Power Java 제4장 자바 프로그래밍 기초.
Kasimov C언어 세미나 1st.
소프트웨어공학 UML 학기.
안드로이드 개요 2005년 휴대폰 소프트웨어 개발사인 Android를 구글이 인수 2007년 11월 오픈소스로 공개
3주차 Android Application ANDROID App..
가속도 감지센서를 이용한 안드로이드 게임 지도교수님 : 전진우 이동훈.
소프트웨어설계 UML 학기.
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
Android 개발환경 설치 및 Hello World
윤 홍 란 4 장 클래스 작성 윤 홍 란
This, static, final 지정 예약어 자바 4대 중첩 클래스
Power Java 제1장 자바 소개.
02. 처음으로 만드는 안드로이드 애플리케이션 제목.
Visual Studio 2010 프로젝트 생성하기 PC화면에서 Visual Studio 2010 아이콘을 더블클릭 하거나
( Overview of the Course Kwangman Man ( SangJi University.
제1장 서론.
객체 지향 프로그래밍.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
DataScience Lab. 박사과정 김희찬 (월)
자바의 신 Volume 1 1부(1~3장) 자바의 신 메인 홈 : 자바의 신 페이스북: 자바의 신 문제 풀이 :
모바일 운영 체제 구글의 안드로이드 애플의 iOS 마이크로소프트의 윈도폰 8 RIM의 블랙베리 OS
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
WAP Java Seminar
소프트웨어 공학 (Software Engineering)
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
김 정 석 Web Programming 김 정 석
CHAP 13. 서비스와 방송 수신자.
SpringFramework 중간고사 요약 REST by SpringFramework.
좋은징조 담당교수 : 조성제 김도엽 김현일 이상훈.
[INA470] Java Programming Youn-Hee Han
컴퓨터공학실습(I) 3주 인공지능연구실.
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
프로그래머를 위한 첫걸음 JDBC Lecture 001 BY MINIO
자바 5.0 프로그래밍.
7강. 객체지향 프로그램의 본질 메소드 프로그래밍의 한계 객체의 개념 및 클래스의 이해
운영체제의 종류 장승빈.
화일구조.
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
Java 5장. 객체지향 개념 public class SumTest {
운영체제보안 3번 과제 설명 팀 기반의 설계 프로젝트 박민재
C.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
발 표 자 : 7조 손 창 국 윤 오 성, 박 진 완 객체 지향 프로그래밍 C++
Presentation transcript:

안드로이드 앱 분석 팀 기반의 설계 프로젝트 2019.03.27 박민재 souling4you@gmail.com

안드로이드 앱 분석 안드로이드 앱 빌드 과정 개발자는 Java를 이용하여 앱을 빌드 Java source code는 Java compiler에 의해 .class 파일로 컴파일됨 .class 파일은 표준 Java bytecode를 포함 Java bytecode는 classes.dex로 컴파일됨 classes.dex는 모든 Dalvik bytecode와 .jar file을 포함 일반적인 경우 classes.dex 파일은 하나이지만 앱의 크기가 클 경우 여러 개의 dex 파일로 분리됨 설치 시점에, Android runtime은 dex2oat 도구를 이용하여 classes.dex 파일을 컴파일 출력 결과는 실행 가능한 코드이며, Dalvik bytecode보다 성능이 뛰어남 .apk 파일은 dex 파일과 resource 파일을 포함 출처(논문): Who Changed You Obfuscator Identificaton for Android

안드로이드 앱 분석 제임스 아서 고슬링 (James Arthur Gosling) Java 캐나다 출신의 소프트웨어 개발자 Write once, run anywhere. 썬 마이크로시스템즈에서 자바(Java) 언어를 발표했는데 오라클(Oracle)이 썬 마이크로시스템즈를 인수함에 따라 현재는 오라클에서 documentation을 제공. ① 이식성이 높은 언어 ② 객체 지향 언어 ③ 함수적 스타일 코딩을 지원 (ex. Lambda Expressions) ④ 메모리를 자동으로 관리 ⑤ 다양한 운영체제에서 실행되는 프로그램을 개발 ⑥ 멀티 스레드(Multi-Thread)를 쉽게 구현 ⑦ 동적 로딩(Dynamic Loading)을 지원 ⑧ 막강한 오픈소스 라이브러리가 풍부 출처(책): 이것이 자바다

안드로이드 앱 분석 자바 가상 기계(JVM) 클래스 운영체제는 자바 프로그램을 바로 실행할 수 없는데, 그 이유는 자바 프로그램은 완전한 기계어가 아닌, 중간 단계의 바이트 코드이기 때문에 이것을 해석하고 실행할 수 있는 가상의 운영체제가 필요하다. 이것이 자바 가상 기계(JVM: Java Virtual Machine)이다. 클래스 클래스에는 객체가 가져야 할 구성 멤버가 선언된다. 구성 멤버에는 필드(Field), 생성자(Constructor), 메소드(Method)가 있다. public class ClassName { // 필드 int fieldName; // 생성자 ClassName() { } // 메소드 void methodName() { } } 출처(책): 이것이 자바다

안드로이드 앱 분석 필드 생성자 메소드 public class ClassName { // 필드 int fieldName; 객체의 고유 데이터, 부품 객체, 상태 정보를 저장하는 곳 생성자 new 연산자로 호출되는 특별한 중괄호 { } 블록 객체 생성 시 초기화를 담당 메소드 객체의 동작에 해당하는 중괄호 { } 블록 public class ClassName { // 필드 int fieldName; // 생성자 ClassName() { } // 메소드 void methodName() { } } 출처(책): 이것이 자바다

안드로이드 앱 분석 메소드 오버로딩(Method Overloading) 파라미터의 타입, 개수, 순서 중 하나라도 다르면 메소드 이름이 동일하더라도 다른 메소드로 인식 public class Java { public String Java() { String hello = "Hello from Java"; return hello; } public String Java(int a) { char i; int sum=0; for(i=1; i<=a; i++) { sum += i; } String output = String.format("add from 1 to 20: %d", sum); return output; } public String Java(double b) { String output2 = "?"; if(b==0) { output2 = "zero"; } else { output2 = "nonzero"; } return output2; } public class Java { public String stringFromJava() { String hello = "Hello from Java"; return hello; } public String calculateDec(int a) { char i; int sum=0; for(i=1; i<=a; i++) { sum += i; } String output = String.format("add from 1 to 20: %d", sum); return output; } public String calculateDec2(double b) { String output2 = "?"; if(b==0) { output2 = "zero"; } else { output2 = "nonzero"; } return output2; } 출처(책): 이것이 자바다

안드로이드 앱 분석 메소드 오버라이딩(Method Overriding) 상속된 메소드의 내용이 자식 클래스에 맞지 않을 경우, 자식 클래스에서 동일한 메소드를 재정의하는 것 출처(책): 이것이 자바다

안드로이드 앱 분석

안드로이드 앱 분석 리플렉션(Reflection) 리플렉션은 자바 코드가 필드, 메소드, 로드하는 클래스의 생성자에 대한 정보를 찾고 이용하기 위한 것. 출처(논문): DroidRA

안드로이드 앱 분석 public class Box<T> { private T t; 제네릭 타입(Generic type) 타입을 파라미터로 가지는 클래스와 인터페이스 public class Box<T> { private T t; public T get() { return t; } public void set(T t) { this.t = t; } } Box<String> box = new Box<String>(); public class Box<String> { private String t; public String get() { return t; } public void set(String t) { this.t = t; } }

안드로이드 앱 분석 안드로이드 4대 컴포넌트 1. 액티비티 (Activity) 2. 서비스 (Service) 하나의 화면을 하나의 액티비티로 생각 앱을 구성하는 화면을 액티비티로 구현하고 각각의 화면간에 이동하는 과정은 각각의 액티비티를 필요에 따라 열거나 닫거나 하는 과정 2. 서비스 (Service) 백그라운드에서 실행되는 프로세스 3. 브로드캐스트 수신자(Broadcast Receiver) 브로드캐스팅은 메시지를 여러 객체에서 전달하는 방법을 의미 전달된 브로드캐스팅 메시지는 브로드캐스트 수신자라는 앱 구성 요소를 이용해서 받을 수 있음 4. 콘텐츠 제공자 (Content Provider) 콘텐츠 제공자는 한 프로세스의 데이터에 다른 프로세스에서 실행 중인 코드를 연결하는 표준 인터페이스 안드로이드 시스템에서 앱은 콘텐츠 제공자를 통해 제공하고자 설정한 공유 범위 내에서 네트워크, 데이터베이스, 파일시스템을 제공할 수 있고, 다른 앱은 콘텐츠 해결자(Content Resolver)를 통해서 관련 정보를 얻을 수 있음 출처(책): 안드로이드 애플리케이션 리버스 엔지니어링

안드로이드 앱 분석 안드로이드 앱 설정 파일 AndroidManifest.xml package : 앱을 구분하기 위한 이름 동일한 디바이스에 동일한 패키지 이름을 갖는 앱은 설치될 수 없음

안드로이드 앱 분석 안드로이드 앱 설정 파일 AndroidManifest.xml permission : 앱의 기능 상 필요한 권한을 명시 Android 6.0 이상에서 dangerous permission은 실행 중에 user에게 요청하도록 프로그래밍 해야함

안드로이드 앱 분석 안드로이드 앱 설정 파일 AndroidManifest.xml application 속성 : 앱에 필요한 컴포넌트 등을 명시 application 속성 안에 있는 android:name은 처음 시작하는 클래스명을 의미

안드로이드 앱 분석 안드로이드 Sdk 버전 앱 개발 시에 최소 Sdk 버전과 대상 Sdk 버전을 설정할 수 있음 Apktool로 앱을 디스어셈블하면 "apktool.yml"이라는 파일이 생성되는데, 그 파일을 열면 sdkInfo 정보를 확인할 수 있음 출처(웹사이트): https://mindster.in/blog/evolution-android

안드로이드 앱 분석 안드로이드 액티비티 수명 주기 main() 메서드로 앱이 실행되는 다른 프로그래밍 패러다임과는 달리, 안드로이드 시스템은 Activity 인스턴스 수명 주기의 특정 단계에 부합하는 특정 콜백 메서드를 호출하여 해당 인스턴스 내 코드를 실행한다 https://developer.android.com/training/basics/activity-lifecycle/starting?hl=ko

안드로이드 앱 분석 안드로이드 디바이스 드라이버 Binder 최대 크기가 512바이트인 패킷까지만 전송할 수 있다. 따라서 소용량 데이터 전송에 사용한다. string을 쓸 때는 Java의 표준에 맞춰서 length, unicode(2바이트)의 형태로 맞춰준다. 원격지에 있는 함수를 호출한다. 그러기 위해선 객체를 보내주어야 하는데 이를 보통 객체 직렬화(object serialization)라고 하지만, 안드로이드에서는 flatten 이라는 용어를 쓴다. https://developer.android.com/training/basics/activity-lifecycle/starting?hl=ko 출처(논문): TaintDroid An Information-Flow Tracking System for Realtime Privacy

안드로이드 앱 분석 안드로이드 OS app process service process Binder driver 출처(강의): 아임구루 김정인대표님 기기의 led를 on시키는 device driver

안드로이드 앱 분석 안드로이드 인텐트 및 인텐트 필터 인텐트(Intent) 인텐트 필터(Intent filter) 일종의 매시지 객체, 이것을 사용해 다른 앱 구성 요소로부터 작업을 요청할 수 있다. 명시적 인텐트 : 시작할 구성 요소를 이름으로 지정(완전히 정규화된 클래스 이름) 암시적 인텐트 : 특성 구성 요소의 이름을 대지 않지만, 그 대신 수행할 일반적인 작업을 선언하여 또 다른 앱의 구성 요소가 이를 처리할 수 있도록 해준다. 인텐트 필터(Intent filter) 앱의 매니페스트 파일에 들어 있는 표현으로, 해당 구성 요소가 수신하고자 하는 인텐트의 유형을 나타낸 것 https://developer.android.com/guide/components/intents-filters?hl=ko

안드로이드 앱 분석 안드로이드 앱 정적 분석 Jadx 디컴파일 도구 https://github.com/skylot/jadx Gui와 Cli 버전 모두 존재

안드로이드 앱 분석 Virus Total https://www.virustotal.com/ko/

Thank You !