Android Debug Bridge

DOUIK·2022년 7월 25일
0

Android

목록 보기
1/7

Android Debug Bridge (adb)

Android SDK에 포함돼있는 프로그램
안드로이드 기기에 패키지 설치하거나 셸에 접근하는 등 디버깅 관련 기능 수행할 수 있는 다목적 명령줄 도구이다.
기기에서 명령어를 실행하거나 애플리케이션 설치 및 디버깅, 파일 업로드 및 다운로드 등 다양한 작업을 손쉽게 수행할 수 있다.
앱 동적 분석에 요구되는 Frida 서버 파일 업로드, 셸 명령어 실행, 패키지 apk 다운로드 등을 수행하기 위해 adb와 pm, am 명령어를 이용하기도 한다.

  • pm : Package Manager
  • am : Activity Manager

명령어

명령어 설명

adb devices [-l]

  • 연결된 기기 목록을 출력함
  • -l 옵션을 함께 사용할 시 기기의 상세한 정보를 함께 출력함

adb shell [command]

  • 연결된 기기의 셸에 접속할 때 사용
  • 셸로 접속하지 않고 명령어를 단일로 실행하고 싶을 때는 adb shell [command] 같은 형태로 사용 가능
  • command 부분에 셸 명령어를 입력 시 명령어를 실행함
  • 루팅되지 않은 기기의 셸은 권한 문제로 일부 명령어의 실행이 제한될 수 있음

adb push [local][remote]

  • 로컬에 존재하는 파일을 기기 내 경로에 업로드할 때 사용
  • local에는 파일 경로, remote에는 기기 내 파일 경로를 입력함
  • 보통 안드로이드 내의 임시 디렉터리인 /data/local/tmp/에 임의 파일을 업로드할 때 많이 사용됨

adb pull [remote][local]

  • puah 명령어와 반대로 기기 내에 존재하는 파일을 로컬로 다운로드 할 때 사용

adb logcat

  • 기기의 logcat 내용을 확인할 때 사용
  • 앱이 크래시 나거나 의도한 대로 동작하지 않을 때 보통 logcat을 통해 원인을 파악함

adb install [apk]

  • 기기에 패키지 이름에 해당하는 앱을 설치할 때 사용
  • apk 파일의 경로를 함께 전달하면 자동으로 apk를 기기에 업로드하고 설치함

adb uninstall [package]

  • 기기에서 패키지 이름에 해당하는 앱을 삭제할 때 사용함
  • 높은 권한의 앱은 삭제되지 않을 수 있음 => Package Manager 이용해야 함

adb forward [local][remote]

  • 기기 내에서 포트 포워딩 해서 로컬호스트로 연결할 때 사용
  • 보편적으로 frida-server의 포트를 변경해 열거나 앱을 원격으로 디버깅하기 위해 디버깅 포트를 열 때 사용함

Package Manager(pm)

adb 셸 내에서 Package Manager 도구로 명령어를 실행해 기기에 설치된 앱 페이지에 관한 작업 및 쿼리를 실행할 수 있음

명령어

명령어 설명

pm list packages [-f]

  • 기기 내에 설치된 패키지 리스트를 모두 조회하는 명령어로 패키지가 올바르게 설치되어 있는지 확인할 때 주로 사용함
  • -f 옵션을 함께 사용시 패키지 설치 apk 파일의 경로를 함께 출력함
  • pm list packages -f | grep package_name 명령어를 통해 apk 경로 찾고 adb pull apk_path local 명령어로 로컬 호스트로 패키지를 옮길 수 있음

pm install/uninstall [package]

  • [package] 인자로 전달한 패키지를 기기 내에 설치하거나, 설치된 패키지를 제거하는 명령어
  • 일반적으로 앱을 삭제하거나 설치할 때 adb install/uninstall [package] 명령어를 사용하는데 권한 문제로 앱이 설치/삭제되지 않은 문제가 발생함
  • 이 경우 adb root, adb shell 명령어를 통해 루트 권한으로 셀을 접속한 후 pm 명령어를 이용함

Activity Manager (am)

adb 셸 내에서 am 도구로 명령어 실행해 액티비티 시작, 프로세스 강제 종료, 인텐트 브로드캐스트, 기기 화면 속성 수정 등 다양한 시스템 작업 실행할 수 있음

명령어

명령어 설명

am start-activity (options) (intent)

  • (intent)에서 지정한 액티비티를 실행함

intent 구성

  • -a : 액션을 지정합니다.
  • -d : 데이터 URI를 지정합니다.
  • -n : 컴포넌트 이름을 지정합니다. 컴포넌트 이름은 패키지 이름과 액티비티 이름으로 구성됩니다.\
  • -e : 추가 데이터를 지정합니다. 데이터의 자료형에 따라 접미사 (s, i, l, u, …)가 붙을 수 있습니다.

am broadcast (options) (intent)

  • (intent)에서 지정한 브로드캐스트 인텐트를 실행함
  • 브로드캐스트로 전달할 데이터와 대상 인텐트 설정 가능

am kill [options] package

  • package(앱의 패키지 이름)와 관련된 모든 프로세스를 종료

정리

  • Android Debug Bridge (ADB): 안드로이드 기기에 패키지를 설치하거나 셸에 접근하는 등 디버그와 관련된 기능을 수행할 수 있는 툴

  • Package Manager (PM): Package Manager 도구로 명령어를 실행하여 기기에 설치된 앱 패키지에 관한 작업 및 쿼리를 실행

  • Activity Manager (AM): Activity Manager 도구로 명령어를 실행하여 액티비티 시작, 프로세스 강제 종료, 인텐트 브로드캐스트, 기기 화면 속성 수정 등 다양한 시스템 작업을 실행

Rooting

루팅(rooting)은 모바일 기기에서 구동되는 안드로이드 운영 체제의 최상위 권한(root 권한)을 얻음으로써 해당 기기의 생산자 또는 판매자 측에서 걸어 놓은 제약을 해제하는 행위
루팅 된 기기를 사용하면 root 권한이 필요한 앱을 실행할 수 있고 애플리케이션 분석에도 용이하다.

adb를 사용하면 adb root 명령어를 통해 손쉽게 기기를 루팅할 수 있다.

AVD가 아니라 실제 기기를 루팅하면 소프트웨어 업데이트와 A/S를 받을 수 없고 대부분의 금융앱도 사용할 수 없다.

0개의 댓글