Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 웹 프레임워크
- 백엔드
- function scope
- 한국정보보호산업협회
- 마감임박
- 무료교육
- 한국산업인력공단
- 동적타이핑
- node.js
- 곱셈 암호
- 한국정보보호산업협회기자단
- 유클리드_알고리즘
- 호이스팅
- package-lock.json
- 포너블
- 디오판투스 알고리즘
- pwnable.tw
- 개인정보안전성
- 가명정보처리
- Writeup
- arrow function
- 국가인적자원개발컨소시엄
- 개인정보보호교육
- 백엔드입문
- 덧셈 암호
- 개인정보보호
- package.json
- 개인정보보호위원회
- 모듈러 연산
- 확장 유클리드 알고리즘
Archives
- Today
- Total
짱짱해커가 되고 싶은 나
[안드로이드 취약점 진단] 2-2. adb 본문
ADB(Android Debug Bridge)
안드로이드 에뮬레이터나 실제 연결된 장치를 제어하기 위한 안드로이드 디버깅 도구
ADB 구성요소
- client : 안드로이드 개발 시스템에서 실행, 사용자가 adb 명령 실행 -> 쉘에서 client 호출
- server : 안드로이드 개발 시스템의 백그라운드 프로세서, 클라이언트, 에뮬레이터, adb demon 사이 통신 관리
- demon : 에뮬레이터나 장치에서 background 프로세서로 동작하는 인스턴스
ADB client 시작 -> 서버 프로세서 실행 상태 확인 및 서버 구동 -> TCP 5037 포트에 바인드 -> 서버가 동작 중인 모든 에뮬레이터/장치 인스턴스에 대한 연결을 설정 -> 포트 번호 555~5585의 홀수 번호의 포트 스캐닝 -> ADB 데몬 발견 시 해당 포트에 연결
device 장치 선택
연결된 장치가 1대이면 별도로 선택하지 않아도 됨
- 연결된 장치 확인
adb devices
-> 결과는 [시리얼 번호] [상태] 로 구분
시리얼 번호 : 에뮬레이터나 장치를 구분하기 위해 타입과 함께 콘솔 포트 번호 표시
상태 : 연결되어 있지 않거나 응답이 없을 경우 device 위치에 offline이라고 뜸, 연결되면 device로 상태 변경
- adb 실행 with device 선택 옵션
- -d : USB 장치
- -e : 에뮬레이터
- -s : 같은 종류의 장치가 여러 개 연결되어 있을 때
//usb 장치나 에뮬레이터 장치가 1개씩 있을 때
adb -d shell //usb
adb -e shell //에뮬레이터
//장치별로 2개씩 있을 때
adb - s <장치명> shell
adb 디버그 기능
- logcat : 안드로이드 장치에서 발생하는 로그 메시지 화면 출력 or 파일 형태로 저장
- -b [ buffer<radio | events | main> ]
- radio : radio/telephony 관련 메시지
- events : 이벤트 관련 메시지
- main : 메인 로그 버퍼(default)
- -c : 기록된 로그 메시지 삭제 & 종료
- -d : 로그 메시지 화면에 덤프하고 종료
- (-d) -f <filename> : d 옵션 없이 쓰면 작업 중단 신호가 입력될 때까지 로그 메시지 기록
- -g (-b <radio|events|main>) : 선택된 버퍼의 크기를 출력하고 종료, 기본으로 main이 선택되어 있음
- -n <count> -r <로그 파일 용량> -f <파일 이름> : n 옵션이 없으면 기본값으로 4개 설정, 파일이름은 filename.1, .2로 저장 (숫자가 낮을수록 최신 로그)
- -r <kbytes> : 파일로 저장하는 경우, 파일 용량 설정 옵션
- -s (ActivityManger:I) : 기본 필터의 종류를 slient로 변경하도록 설정, 모든 메시지를 출력하지 않도록 하고 입력된 태그만 사용자가 확인
- -v <format> : 특정 메타데이터 필드를 선택해서 출력
- brief : 우선순위/태그, 메시지가 발생한 프로세스의 pid 출력 (default)
- process : pid 출력
- tag : 우선순위/태그 출력
- raw : 원본 메시지만 출력
- time : 날짜, 호출 시간, 우선순위/태그, pid 출력
- threadtime : time + thread의 tid 출력
- long : 모든 메타데이터 필드와 메시지 표시 (각 메시지당 한 줄씩 공백 생성)
- -b [ buffer<radio | events | main> ]
//방법 1
adb logcat
//방법 2
adb shell
root@test# logcat
-> 로그캣을 종료하지 않으면 실시간으로 계속 출력
안드로이드에서 발생하는 모든 로그는 태그보다 우선수위를 갖는다.
(태그 : 시스템 구성 요소를 나타내는 짧은 문자열, ex.D/dalvikvm : dalvikvm 요소에서 발생한 로그 메시지)
우선순위 : 로그의 가장 앞 1문자
V : verbose (가장 일반적)
D : debug
I : info
W : warning
E : error
F : fatal
S : silent (가장 높은 우선순위)
-> 로그캣 필터링 ㅣ기능
filter expressions - tag:priority로 구성 (우선순위는 최소한위 등급, 공백을 통해 구별 & 여러 개 설정 가능)
adb logcat ActivityManager:I art:I *:S
(*:S는 모든 메시지가 출력되지 않도록 하는 것)
bugreport (버그 보고서)
dumpsys, dumpstate, logcat 명령 결과를 한 번에 출력
- dumpsys : 연결된 장치 정보를 자세히 표시 (ex. adb shell dumpsys meminfo)
- meminfo, cpuinfo, account, acitivity, window, wifi, pwoer 등
- dumpstate : 연결된 안드로이드 장치의 모든 상태 정보 출력
- logcat
adb bugreport
Jdwp (프로세스 정보 확인)
안드로이드에서 사용할 수 있는 jdwp(Java Debug Wire Protocol) 프로세스 목록 출력
- jdwp : java 애플리케이션의 디버깅에 사용 -> 특정 애플리케이션의 프로세스 번호를 알아내고 디버거에 연결해서 디버깅 수행 (Ctrl^C로 명령 취소) (제일 마지막에 새롭게 추가된 프로세스 번호 = jdwp 프로세스 번호)
- jwdp 명령 수행 -> 대상 애플리케이션 실행 -> 다시 jdwp 명령 수행 -> 새롭게 추가된 항목 = 대상 pid 확인
데이터 기능
- install : 장치에 원하는 apk 설치
adb install ~.apk
- uninstall <패키지명> : 장치에 원하는 apk 삭제
//패키지 이름 확인 방법 ex. 인시큐어뱅크
adb shell pm list packages -f | grep insecurebankv2
//apk 삭제
adb uninstall com.android.insecurebankv2
- adb pull <파일 위치> <저장 위치> : 장치에 저장된 파일을 PC에 복사
adb pull /sdcard/testfile.txt c:\android\testfile.txt
- adb push <파일 위치> <저장 위치> : pc에 저장된 파일을 장치에 복사
(저장 위치와 파일명은 권한을 갖고 있을 경우 임의 변경 가능)
adb push c:\android\testfile.txt /sdcard/pulltest.txt
포트와 네트워킹 기능
- forward <호스트> <기기> : 특정 로컬 포트를 안드로이드 장치의 특정 포트와 소켓 통신이 가능하도록 포워딩
- 단, usb 디버깅 옵션이 활성화되어 있어야 가능- tcp:<portnum>
- local:<UNIX domain socket name>
- dev:<character device name>
- jdwp:<pid>
특정 app을 대상으로 디버깅을 하기 위해 호스트 포트와 jwdp pid 연결
이후 jdb를 이용해 대상 애플리케이션에 대한 디버깅 활성화
adb forward tcp:7777 tcp:8888
-> 호스트의 7777 포트가 장치의 8888 포트로 전달
adb forward tcp:7888 jdwp:1824
jdb -sourcepath .\src -connect com.sun.jdi.SocketAttach:hostname=localhost.port=7888
스크립팅 기능
- get-serialno : 연결된 장치의 시리얼 번호 문자열로 출력 (adb devices 명령을 수행했을 때 나오는 장치 이름)
- get-state :연결된 장치의 상태를 문자열로 출력 (adb devices 명령을 수행했을 때 나오는 상태)
- wait-for-deivce <명령어> : 연결된 장치가 구동될 때까지 adb를 통한 명령 실행을 멈춰놓고, 실행되면 설정된 명령어 실행
adb wait-for-device shell getprop
서버 기능
- set-start : adb 서버 프로세스가 동작하는지 여부 확인 -> 동작하지 않으면 서버 구동
- kill-server : adb 서버 종료
쉘 기능
- shell : 기기를 원격 쉘을 사용할 수 있도록 하는 기능
리눅스와 비슷한 환경에서 대상 장치 제어 가능 (리눅스 기본 명령어, 쉘 환경에서 사용할 수 있는 명령어)
'모바일' 카테고리의 다른 글
[안드로이드 취약점 진단] 3-1. 브로드캐스트 리시버 결함 (0) | 2022.06.11 |
---|---|
[안드로이드 취약점 진단] 2-3. 드로저(drozer) (0) | 2022.06.09 |
[안드로이드 취약점 진단] 2-1. 분석 환경 설정 (인시큐어뱅크, apktool, dex2jar, jadx, BytecodeViewer) (0) | 2022.06.09 |
[안드로이드 취약점 진단] 1-4. 안드로이드 앱 취약점 점검 기준 (0) | 2022.06.08 |
[안드로이드 취약점 진단] 1-3. 안드로이드 파일시스템 및 프로젝트 파일 구성 (0) | 2022.06.07 |
Comments