일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- LLVM
- linux debugging
- thread local storage
- custom packer
- tracing
- on-stack replacement
- initial-exec
- LLVM Obfuscator
- pthread
- android inject
- v8 optimizing
- LLVM 난독화
- 난독화
- TLS
- linux thread
- uftrace
- so inject
- v8 tracing
- Android
- 안티디버깅
- on stack replacement
- Injection
- pinpoint
- tracerpid
- apm
- anti debugging
- Linux packer
- OSR
- Linux custom packer
- Obfuscator
Archives
- Today
- Total
Why should I know this?
Android 파헤치기 - 개요 본문
Android 파헤치기
0. 시작하기 전에...
'Android 파헤치기'에서 다루고자 하는 것은 Android라는 오픈소스를 구성하는 Stack 중에 가상머신(현재는 Runtime으로 대체되었다) 자체이다. 그러므로 응용 개발이나 프레임워크 개발을 하시는 분들에게 유용한 정보가 많지 않을 수도 있다.
1. 가상머신?
Android는 흔히 알다시피 가상머신이다. 가상머신이라는 개념에 대해 아주 간단히 설명드리자면, 기존의 프로그래밍 패러다임은 '하나의 언어에 하나의 머신'으로 시작됐다. 여기서 언어는 고도화되어 C가 등장하여 공용어라는 개념이 생겨났으며 머신은 OS로 대체되어 플랫폼이 되었다. 하지만 C++이 등장하여 여러 Standard 라이브러리들이 제공되고, 여러 아키텍처와 플랫폼으로 크로스컴파일 및 컨버팅이 될 수 있는 지원팩들이 추가되기 전까지 여전히 공용어는 '알파벳'을 공유하는 각 OS 지방의 사투리나 다름없었다.
이에 Java라는 언어와 Java Virtual-Machine(JVM)이 등장하게 되었으니 비유하자면 Java라는 새로운 언어를 공용어라고 사용하자는 것이었다. 하지만 각 OS는 여전히 자기들 사투리를 쓰니까 Java Virtual-Machine이라는 번역가를 통해서 Java어를 번역하여 소통하게 만들자는 제안이었으며 프로그래밍 역사에 커다란 변화의 획을 그었다.
JVM 중에서도 각 지방사투리로 번역하는 부분을 Interpreter라고 부르고,
번역행위를 interpreting이라고 한다.
2. Android 가상머신의 구조
또한 Java라는 언어는 Object-Oriented Programming Language로, OOP라 부르는데, Object 단위로 설계되어 있는 언어이다. 이것을 언어에 비유하면, 주어라고 할 수 있다. 다른 말로 하면, Java는 무조건 주어가 있어야 하는 언어이다.
아래와 같은 소스코드는, 가상머신에서 다음과 같은 순서로 처리된다.
class me { public static void main(String args[]) {
System.out.println("HEllo world");
}
} |
1. 'me'라는 클래스를 로드한다.
2. 'me'라는 클래스에 정적 선언되어 있는 Method 'main'을 찾는다.
3. 'main'을 실행한다.
= '나'는 main({ })을 한다.
이처럼 주어가 절대로 빠지지 않는 Java와 Jvm의 특징은 안드로이드에도 고스란히 남아있다.
안드로이드의 가상머신의 실행 구조는 무조건 ClassLoader부터 시작한다. ClassLoader가 주어로 사용할 Class를 로드한 뒤에야 실행이 될 수 있다는 뜻이며, 로드되지 않은 클래스를 사용하려고 하면 ClassNotFound 같은 예외를 발생하게 된다.
요컨데, 이 ClassLoader는 가상머신의 핵심 중에 핵심으로 짜장면의 짜장이고 짬뽕의 짬이다.
ClassLoader가 어떤 동작을 하는지만 분석해도 가상머신의 90%의 이해를 하는것이 가능하다.
'Knowledge > Android' 카테고리의 다른 글
Android에서 so파일 injection 하는 쉬운 방법 (0) | 2019.02.18 |
---|---|
Android 파헤치기 - Dex 메모리 로드 (0) | 2019.02.18 |
Android 파헤치기 - Launching Application (0) | 2019.02.18 |
Android 파헤치기 - ClassLoader (2) | 2019.02.18 |
Android - 안티디버깅 우회법 (0) | 2018.03.20 |
Comments