반응형
SMALL

'안드로이드 앱 취약점 진단/안드로이드 특징 및 보안'에 해당되는 글 4건

반응형
LIST
반응형
SMALL

이번엔 안드로이드 OS 부팅과정에 대해서 포스팅해보려고한다. 안드로이드 운영체제만큼 중요하다고 생각하는 것이 안드로이드 OS 부팅과정이다. 전체적인 그림은 다음과 같다.




<출저: Google>



1. 커널(Kernel) 부팅


- 전원이 인가되고 부트로더를 통해 리눅스 기반 커널이 제일 먼저 시작된다.

- 커널이 부팅되면 일반적인 리눅스부팅과정처럼 커널 초기화를 수행한다.

- 커널 초기화를 수행하고나서 init 프로세서를 호출한다.


2. init 프로세서 실행


- init 프로세스는 각종 디바이스를 초기화해주고 안드로이드 프레임워크 동작에 필요한 각종 데몬, 컨택스트 매니져 등을 실행하는 역할을 해준다.


** init프로세서가 실행하는 주요 데몬프로세스**


- USB 데몬: usbd

- 안드로이드 디버그 브릿지 데몬: adbd

- 디버그데몬: debuggerd

- 무선 인터페이스 레이어 데몬: rild


3. 컨텍스트 매니저


- 안드로이드의 시스템 서비스를 관리하는 중요한 프로세서다. 

- 카메라, 오디오, 비디오 처리에서부터 애플리케이션 제작에 필요한 API를 제공한다.


4. 미디어 서버

- 오디오출력, 카메라 서비스와 같이 C, C+기반으로 작성되어있는 네이티브 시스템 서비스를 실행하는 역할을한다.

- 미디어 서버가 실행되야 소리가 실행될 수 있다.


5. 자이고트(Zygote), 달빅(Dalvik)

- 자이고트는 안드로이드 애플리케이션의 로딩시간을 단축시키기 위한 프로세스다. 모든 자바 기반 안드로이드 애플리케이션은 자이고트를 통해 포크된 프로세스 상에서 동작되게 된다.

- 달빅 가상머신은 애플리케이션 샌드박스를 만들기 위해 구글이 선택한 기술이며, 모든 자바기반 안드로이드 애플리케이션을 처리해주게 된다.


6. 시스템서버(System Server)

- 시스템서버는 자이고트에서 최초로 포크되어 실행되는 안드로이드 애플리케이션 프로세서이다.

- 로케이션매니져와 같은 자바서비스를 실행한다.(위치추적)

- 추가로 하나 더 설명하자면 바인더 IPC를 통해 자바시스템서비스를 C언어 기반의 서비스매니저에 등록하기위해 자바와 C언어 간의 인터페이스 역할을 하는 JNI를 추가로 이용한다.





이상으로 안드로이드 부팅과정에 대해 포스팅해보았다. 적어도 안드로이드 구성이 어떻게 되있고 부팅과정정도는 알고 써야 진정한 안드로이드 프로그래머가 될 수 있지 않을까 생각한다.

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

안드로이드 운영체제 구조는 리눅스 커널을 기반으로 만들어졌다. 안드로이드는 코드를 짜는 것도 중요하지만 os자체는 어떻게 구성되어 있는지, 또 그것이 어떤역할을 하는지에 대해 확실히 알 필요성이 있다. 그만큼 이런 구조도 확실하게 알고 있어야 개발이든 보안이든 둘다 가능하다. 




<안드로이드 os의 구조>


안드로이드 os는 굉장히 무거운 os에 속한다. 리눅스에 htop을 켜봐도 메모리 상태를 보게 되면 안드로이드 스튜디오를 돌리는 것자체로도 2GB씩 차지한다. 하지만 무거운 만한데는 다 이유는 있다. 아래 사진이 안드로이드 OS의 전체적 구조다.





1. Linux Kernel

C,C++언어를 기반으로 이루어져 있으며 리눅스 계열로 이루어진 만큼 보안이 상당히 강력하다. 주로 드라이버로 이루어져 있으며 화면드라이버, 키보드드라이버, 카메라 드라이버 등으로 구성되어져 있다.


2. Library

Linux Kernel과 마찬가지로 C,C++언어를 기반으로 이루어져 있으며, 안드로이드 앱개발에 필요한 중요한 오픈소스 기반의 솔루션들이 다 모여있다. 하지만 취약점이 많아서 보안상에 문제점이 Library쪽에서 많이 발생한다.


3. Android Runtime


구글에서 자체 제작한 Dalvik Virtual Machine, 애플리케이션 제작은 JVM으로 개발한 후에 최종적으로 Dalvik 코드로 변경해서 Target장치에서 구동한다. 안드로이드는 리눅스,라이브러리가 C, C++로 개발되어지고 이루어졌지만 자바로 개발이 가능한 이유가 JVM이라는 자바가상머신이 얹어졌기 때문에 자바로 코딩이 가능하다. 하지만 mySQL, ORACLE과 같은 엔진들은 너무 무겁기때문에 안드로이드에서는 사용하기가 어렵다.


4. Applications Framework


구글에서 JAVA로 자체 제작한 애플리케이션 프레임 페키지다. 주로 활동매니저, 윈도우매니져 등으로 구성되어있다. 말그대로 응용프로그램을 돌리기 위한 프레임워크이다.


5. Applications


이것도 Applications Framework과 마찬가지로 구글에서 JAVA로 자체 제작했다. Application에는 연락처, 전화 브라우저 등등 우리가 주로 일상생활에서 많이 사용하는 휴대폰 앱이 굉장히 많다.







반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

그럼 지난시간에 이어 ADB명령어에는 어떤것들이 있는지 살펴보겠다. 




※ 많이 사용되는 간단한 명령어


1. adb devices - 연결된 디바이스 리스트 보기

<여러개 디바이스 연결시 리스트보는 명령어들>

adb -d logcat (device)

adb -e logcat (emulator)

adb -s emulator-xxx logcat (device serial)


2. adb backup... 디바이스로부터 앱, 데이터 등 백업하는 명령어

3. adb logcat - 디바이스 로그 보기

4. adb -d install 파일명.apk - 디바이스 파일 설치



※ 디바이스에서 많이 사용되는 adb am 명령어들


1. adb kill-server device - 인식이 잘 안될때 케이블을 꼽았다 꼽거나 adb server를 죽인다.

2. adb -d shell - 쉘실행

3. adb -d install -r 파일명.apk - 재설치 

4. adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings - 특정액티비티 실행

5. adb shell am start -a android.intent.action.VIEW -d facebook://facebook.com/inbox  - 페이스북 앱실행  

6. adb shell am start -a android.intent.action.VIEW -d file:///sdcard/me.vcard -t text/x-vcard  - sd카드 실행

7. adb shell am start -a android.intent.action.GET_CONTENT -t image/jpeg  -갤러리 실행

8. adb shell am start -a android.media.action.IMAGE_CAPTURE - 카메라 실행

9. adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings - 환경설정 실행

10. adb shell am start -a android.intent.action.VIEW http://www.google.com - 구글 실행

11. adb shell am start -a android.intent.action.DIAL tel:010XXXXXXX - 전화번호 다이얼 실행

12. adb shell am start -a android.intent.action.CALL tel:010XXXXXXX - 전화걸기 

13. adb shell am start -a android.intent.action.DAIL -d tel:010-XXXX-XXXX -전화걸기

14. adb shell am start -a android.intent.action.VIEW geo:37.111111-222.333333 - GPS 실행

15. adb shell am start -n com.android.calendar/com.android.calendar.LaunchActivity - 달력실행

16. adb shell am start -a android.intent.action.MAIN -n  패키지명/액티비티 경로 - MainActivity 실행시 사용 
ex) adb shell am start -a android.intent.action.MAIN -n com.example.gunjoolee.stopwatch/com.example.gunjoolee.stopwatch.MainActivity


<출저: http://www.dreamy.pe.kr/zbxe/CodeClip/163972>




이외에도 명령어들을 더 알고 싶으면 이 홈페이지로 가면 더 많은걸 알 수 있다.

http://developer.android.com/tools/help/adb.html





반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

이번시간엔 안드로이드 ADB에 대해서 써본다. ADB란 안드로이드 안에 있는 디버그 툴중 하나이다. 핸드폰에 연결해서 무언가 앱을 실행하고 싶고 디버그 하고 싶을때 리눅스에 명령어만 치면 바로 실행시킬 수 있다. 너무 숨어있는 기능들이 있는데 아마 그런거 찾을때 사용하면 좋지 않나 라는 생각도 해본다. 


1. 터미널 설정



일단 맥북기준으로 설명하겠다. 일단 adb툴이 저장되어 있는 폴더의 경로를 설정해야한다. 경로는 다음과 같다.


export PATH=$PATH:/Users/사용자이름/Library/Android/sdk/platform-tools


안드로이드가 깔리면 파란색으로 표시된 경로쪽에 adb툴이 있다. 그렇기때문에 일단 경로는 저렇게 잡아주고 터미널쪽 환경설정 셸쪽에 다음과 같이 입력한다.




이렇게 경로설정이 완료되면 터미널을 실행하고 adb version을 입력시켜보면 adb가 잘 실행된다는 걸 볼 수 있다. 아래 그림과 같이 실행되면 adb명령어는 잘 실행된다.


2. iterm 설정


iterm에서도 사용하고 싶을때는 경로를 아까 파란색으로 바꿔놨던 경로를 그대로 설정해주면 된다. 조금 더 이해를 돕기위해 다음 아래 그림을 보면 된다.




이런식으로 설정해주고 아까 터미널은 그냥 adb만 입력해주면 명령어가 잘 실행이 되는데 iterm같은 경우는 조금 다르다. 만약 adb 그대로 입력하면 다음과 같은 화면이 나온다.



명령어 실행이 불가능하다고 나온다. 그래서 iterm에서 할때는 다음과 같이 입력을 해야 한다.



adb 앞에 ./을 붙여줘야 실행이 된다는걸 볼 수 있을 것이다. 그럼 하나만 더 예를 들어보면 또 다음과 같다.



지금 방금 친 명령어는 현재 연결되어있는 디바이스 리스트를 나타낸 명령어인데 항상 adb를 실행할땐 ./를 꼭 붙여줘야 한다는걸 알 수 있다. 어떻게보면 터미널에서 사용하는게 더 편할수도 있겠지만 iterm은 툴사용이 자유롭고 배우기도 어렵지 않아 적응만 하면 금방 사용할 수 있을것이다. 어떤걸 사용할 지는 본인이 선택하면 될 것 같다.

반응형
LIST
블로그 이미지

만년필석사

,