모바일/모바일 보안

ADB(Android Debug Bridge) 사용법

비니화이팅 2019. 6. 1. 17:29

ADB(Android Debug Bridge) 

- 안드로이드 애뮬레이터나 PC에 실제 연결된 장치를 제어하기 위한 안드로이드 디버깅 도구

- CLI를 통해 명령어를 입력하여 안드로이드 기기와 통신

 

ADB 설치 위치

- 안드로이드 SDK에 기본적으로 포함

- SDK 폴더의 하위 폴더인 platform-tools에 포함

- Nox의 ADB 경로 : C:\Program Files (x86)\Nox\bin

 

ADB 동작 과정

1. ADB 클라이언트가 시작되면 가장 먼저 ADB 서버 프로세스가 실행중인지를 점검

2. 만약 서버 프로세스가 실행 상태가 아니라면 서버 프로세스를 구동

3. 서버가 구동되면서 TCP 5037 포트에 바인드시키고, 모든 클라이언트는 5037 포트를 통해 ADB 서버와 통신

  1) 서버가 동작중인 모든 에뮬레이터/장치 인스턴스에 대한 연결을 설정하면 5555부터 5585까지의 홀수 번호 포트를 스캐닝

  2) 스캐닝을 통해 ADB 데몬이 발견되면 해당 포트 번호에 연결함

  - 안드로이드 장치를 USB를 통해 연결 시에는 장치 시스템 설정의 개발자 옵션에서 USB 디버깅 옵션을 활성화해야 함

  - 안드로이드 장치가 4.2 버전 이상인 경우, 개발자 옵션(설정 > 휴대전화 정보 > 빌드 번호를 일곱 번 터치)을 활성화 해야 함

 

SDK 설치

developer.android.com/studio

 

SDK 없이 ADB 설치

http://forum.xda-developers.com/showthread.php?t=2317790

 

ADB 사용법

안드로이드 장치 목록 확인

adb devices		// 에뮬레이터, USB 장치 등 확인 가능

 

원격 쉘 기능

adb shell		// 장치가 한 대 연결된 경우
adb -d shell		// USB 장치가 한 대 연결된 경우
adb -e shell		// 에뮬레이터 장치가 한 대 연결된 경우
adb -s <장치명> shell	//USB 장치 또는 에뮬레이터 장치가 각각 두대 이상 연결된 경우

- 리눅스 기본 명령어와 함께 쉘 환경에서 사용할 수 있는 명령들 존재

- adb shell 또는 adb shell <명령어>로 사용(명령 수행 후 다시 쉘로 복귀할 것인지, 운영체제의 쉘로 복귀될 것인지에 따라 원하는 것으로 사용)

 

[디버깅]

로그 분석

adb logcat [<option>] ... [<filter-spec>]	//안드로이드 장치에서 발생하는 로그 메시지를 화면으로 출력하거나 파일 형태로 저장
//	or
//	adb shell > logcat

 

버그 보고서 확인

adb bugreport	// dumpsys, dumpstate, logcat 명령의 결과를 한번에 출력

 

프로세스 정보(PID) 확인

adb jdwp	// 연결된 안드로이드 장치에서 사용할 수 있는 jdwp 프로세스의 목록을 출력

- jdwp는 Java Debug Write Protocol로 자바 애플리케이션 디버깅에 사용

- jdwp를 이용해 특정 애플리케이션의 프로세스 번호를 알아내고, 이를 디버거에 연결하여 디버깅을 수행

 

[애플리케이션 제어]

애플리케이션 설치

adb install <apk_파일>		// apk 파일 설치
adb -r install <apk_파일>	//동일한 애플리케이션이 설치되어 있을 경우 기존 데이터 삭제 없이 애플리케이션 재설치

 

설치된 애플리케이션 패키지 목록 확인

adb shell pm list packages -f	// 설치된 애플리케이션 패키지 목록 확인
adb shell pm list packages -f | grep <설치된_애플리케이션>

 

애플리케이션 삭제

adb uninstall <설치된_패키지명>	//애플리케이션 삭제

 

[파일 제어]

에뮬레이터/장치 -> PC로 파일 복사

adb pull <장치_경로/파일> <pc_저장_위치>	// 장치에 있는 파일을 pc로 복사

- 권한을 갖고 있지 않으면 명령이 취소될 수 있음

 

PC -> 애뮬레이터/장치로 파일 복사

adb pull <pc_파일_위치> <장치_저장_위치>	//pc에 있는 파일을 장치로 복사
ls	//확인

 

[포트와 네트워킹]

포워딩

forward <로컬> <원격지>	//로컬 포트를 안드로이드 장치의 특정 포트와 소켓 통신이 가능하도록 포워딩
// EX) adb forward tcp:7777 tcp:8888 -> 호스트의 7777포트가 안드로이드 장치의 8888포트로 전달되도록 함

// 디버깅
adb forward tcp:7777 jdwp:1824
jdb -sourcepath <경로> -connect <>	// 대상 어플리케이션에 대한 디버깅 활성화(디버깅 가능한 상태로 만듬)

- forward 명령을 사용하기 위해서는 USB 디버깅 옵션이 활성화되어야 함

 

[스크립팅]

장치 시리얼 번호 출력

adb get-serialno	//연결된 장치의 시리얼 번호를 문자열로 출력

 

장치 상태 출력

adb get-state	// 연결된 안드로이드 에뮬레이터나 장치 상태를 문자열로 출력(Device|Offline)

 

장치 구동시 명령어 실행

adb wait-for-device <명령어>	// 연결되는 에뮬레이터나 장치가 구동될 때까지 ADB를 통한 명령 실행을 멈춰놓고 장치가 device 상태가 되면 명령과 함께 설정된 명령어를 실행
// EX) adb wait=-for-device shell getprop -> 연결된 장ㅊ피가 devicve될 때까지 아무런 명령도 수행하지 못하고 대기하고 있다가 장치가 구동되면 shell getprop를 수행

 

[서버]

서버 구동

adb start-server	// ADB 서버 프로세스가 동작하는지의 여부를 확인한 후 결과를 표시하고, 서버가 동작하지 않은 상태라면 서버를 구동시킴

 

서버 종료

adb kill-server	// ADB를 이용하면서 서버에 문제가 발생했거나 상태가 좋지 않은 경우 서버를 종료