안드로이드 디버그 브리지
| 파일:Android robot head.svg | |
| 파일:Android Debug Bridge in GNOME terminal.png 그놈 터미널에서 adb 서버를 시작하여 장치를 열거하고 있는 모습. | |
| 원저자 | 구글 |
|---|---|
| 안정화 버전 | 34.0.1 (2023년 3월)
|
| 저장소 | android.googlesource.com |
| 프로그래밍 언어 | C++ |
| 엔진 | |
| 운영 체제 | Windows, Linux, macOS |
| 기본 포함 | 안드로이드 SDK |
| 종류 | 소프트웨어 개발 도구 |
| 라이선스 | 아파치 라이선스 2.0 |
| 웹사이트 | developer |
안드로이드 디버그 브리지(Android Debug Bridge)는 안드로이드 기반 기기들의 디버깅에 사용되는 프로그래밍 도구이다. 안드로이드 장치의 데몬은 USB나 TCP를 통해 호스트 PC의 서버에 연결하며, TCP를 통해 최종 사용자에 의해 사용되는 클라이언트에 연결된다. 2007년부터 구글이 아파치 라이선스로 오픈 소스 소프트웨어로 배포하고 있으며 셸을 내장하고 있고 백업도 가능하다. adb 소프트웨어는 마이크로소프트 윈도우, 리눅스, macOS와 호환된다. 봇넷 및 기타 악성 소프트웨어에 의해 악용되었으며, 이를 위해 RSA 인증 및 장치 화이트리스팅과 같은 완화 조치가 개발되었다.
기능
adb의 기능에는 호스트 컴퓨터에서 파일 복사,[1] 앱 설치, logcat 출력 보기, 유닉스 셸 가져오기,[2] 퀄컴 EDL 모드로 재부팅 등이 있다.[3] 예를 들어, 안드로이드 애플리케이션은 백업 명령을 사용하여 파일로 저장할 수 있다.[4] 또한 자바 디버그 와이어 프로토콜에 대한 지원도 포함된다.[5]
일부 그래픽 사용자 인터페이스도 제공되었다. 안드로이드 스튜디오의 그래픽 안드로이드 장치 모니터는 안드로이드 장치에서 정보를 검색하는 데 사용할 수 있다.[6]
안드로이드 장치에 APK 파일을 설치하는 안드로이드의 방식은 Windows Subsystem for Android[7] 및 크롬 OS의 안드로이드 가상 머신에 비공식 앱을 사이드로드하는 방법으로 사용되었다.[8]
Shizuku를 사용하면 안드로이드 전화가 무선 네트워크에 연결되었을 때 자체 ADB에 연결할 수 있다. 이 애플리케이션은 구글 플레이 스토어에서 무료로 사용할 수 있다.[9]
개발 역사
안드로이드 소프트웨어 개발 키트 (SDK)는 2007년에 처음 출시되었다.[10] 2017년부터 구글은 안드로이드 SDK와 별도로 adb를 다운로드할 수 있도록 했다.[11]
2015년 마이크로소프트는 adb 클라이언트에 연결할 수 있는 안드로이드 에뮬레이터를 출시했다.[12] 2016년 안드로이드 스튜디오 2.0에서는 adb를 통한 앱 설치 및 파일 푸시 성능이 5배 향상되었다.[13] 2017년 안드로이드 씽스의 사용 편의성을 위해 수동 adb 명령을 래핑하는 래퍼가 만들어졌다.[14] 2020년 안드로이드 11에서는 adb 점진적 설치 기능이 추가되었다.[15] 2020년 macOS용 안드로이드 스튜디오에 Wi-Fi adb가 통합되었다.[16] 2021년 안드로이드 12에서는 adb backup 명령이 제한되어 앱의 사용자 데이터 백업이 앱별 매니페스트 구성을 통해 옵트인 방식으로 이루어지도록 변경되었다.[17] 이는 안드로이드 10에서 adb restore와 함께 사용 중단된 이후의 조치이다.[18] 구글 퓨시아는 adb와 하위 호환성을 가질 예정이다. adb는 fx와 ffx로 대체될 것이다.[19]
설정
-
안드로이드 장치에서 USB 디버깅을 활성화하려면 "개발자 옵션" 창에서 활성화해야 한다
-
장치가 호스트 컴퓨터에 연결된 후, 사용자는 호스트 컴퓨터의 RSA 키 지문을 확인해야 한다
호스트 컴퓨터
윈도우의 경우 안드로이드 SDK에 adb.exe 바이너리가 포함되어 있으며, 이를 추출하여 설치할 수 있다.[20] 하우투긱은 바이너리가 포함된 폴더를 PATH 환경 변수에 추가할 것을 권장한다.[21]
우분투에서는 android-tools-adb 패키지를 통해 adb를 설치할 수 있다.[22] 데비안의 경우, adb 패키지 옆에 android-sdk-platform-tools-common 패키지도 설치하여 Udev 규칙을 적용하면 루트 권한 없이 도구를 실행할 수 있도록 권장된다.[23] macOS 및 다른 리눅스 배포판에서는 플랫폼 도구를 다운로드하고 bashrc에서 PATH 변수를 수정할 수 있다.[24]
안드로이드 장치
안드로이드 4.2.2 이상 ((API 레벨 17))에서는 사용자가 수락해야 하는 RSA 지문 대화 상자가 표시된다. 이는 장치 사용자의 동의 없이 디버깅 메커니즘을 악용하는 컴퓨터로부터 보호한다.[25] 안드로이드 4.2부터 개발자 옵션은 기본적으로 숨겨져 있다. 정보 메뉴에서 빌드 번호를 7번 누르면 사용자에게 표시된다. 그 후 USB 디버깅 옵션을 활성화할 수 있다.[26] 일부 안드로이드 공급업체는 이를 활성화하는 절차가 다르다. 예를 들어 화웨이는 adb를 활성화하기 전에 PIN 코드를 입력해야 한다.
안드로이드 장치의 터치스크린이 고장난 경우, USB 온더고를 사용하여 장치에 마우스를 연결하고 USB 디버깅을 활성화할 수 있다.[27][28]
아키텍처
adb 프로토콜은 USB 또는 TCP를 통해 와이파이로 전송될 수 있다. 클라이언트-서버 아키텍처를 사용한다. 사용되는 두 가지 다른 프로토콜이 있다. 첫 번째는 클라이언트와 서버 간이고, 두 번째는 서버와 데몬 간이다. adb 데몬은 C로 구현되었으며 안드로이드 사용자 공간에 위치한다. 데몬은 안드로이드 USB 프레임워크인 UsbDeviceManager 및 UsbDebuggingManager에 의해 지원된다.[5]
클라이언트 ↔ 서버 프로토콜
클라이언트와 서버 간의 통신 모드는 TCP 소켓이다. 서버는 포트에서 수신 대기하며, 클라이언트는 이 포트로 요청을 보내야 한다. 요청에는 4바이트 ASCII 초기 필드와 페이로드가 포함된다. 페이로드는 서버로 전송되어야 함을 나타내기 위해 host라는 단어로 시작한다. 그러면 서버는 상태를 나타내는 OKAY 또는 FAIL로 응답할 수 있으며, 선택적 페이로드 및 길이와 함께 제공될 수 있다.[5]
서버 ↔ 데몬 프로토콜
서버에서 전송되는 메시지는 다음과 같은 필드를 가진 24바이트 길이의 헤더로 구성된다.[5]
- 명령
- 첫 번째 인수
- 두 번째 인수
- 페이로드 길이, 0 이상
- 데이터 페이로드의 CRC-32
- 매직 값, 명령 XOR
0xFFFFFFFF를 통해 계산됨
보안
안드로이드 2.2까지 안드로이드는 RageAgainstTheCage 익스플로잇에 취약했다. adb 데몬은 권한 하강 시 setuid 시스템 호출의 반환 값을 확인하지 않았다. 익스플로잇은 프로세스 식별자의 고갈로 인해 실패할 때까지 프로세스를 포크한다. 데몬이 충돌하고 다시 시작하면 권한이 하강된 새 프로세스를 시작할 수 없으며 루트로 계속 실행된다. 그러면 adb는 루트 셸을 제공했다.[29] 2017년에는 ADB를 악용하여 온보드 모뎀을 장악하는 보안 취약점이 공개되었다. 이 공격은 adb가 이미 활성화되고 승인되어 있어야 했지만, 일부 해결 방법이 있었다.[30]
ADB.Miner, Ares, IPStorm, Fbot, Trinity와 같은 다양한 악성 소프트웨어군은 인터넷에서 adb 인터페이스의 공개 가용성을 스캔하고 해당 장치에 악성 소프트웨어를 설치했다.[31] adb는 안전 모드로 부팅하고 adb uninstall 명령을 실행하여 악성 소프트웨어를 제거하는 데도 사용될 수 있다.[32]
각주
- ↑ Darcey, Lauren (2012). 《Android wireless application development》 3판. Shane Conder. Upper Saddle River, NJ: Addison-Wesley. ISBN 978-0-321-81383-1. OCLC 749852462.
- ↑ “Things You Can Do with Android's adb Command” (영어). 《천재반》. 2018년 5월 15일에 원본 문서에서 보존된 문서. 2021년 9월 9일에 확인함.
- ↑ EASTTOM, CHUCK (2021). 《An In-Depth Guide to Mobile Device Forensics》. [S.l.]: CRC PRESS. 72쪽. ISBN 978-0-367-63300-4. OCLC 1250310301.
- ↑ Jack Wallen (2015년 3월 6일). “How to create a full backup of your Android device without root”. 2016년 1월 24일에 원본 문서에서 보존된 문서. 2016년 1월 29일에 확인함.
- ↑ 가 나 다 라 Regupathy, Rajaram (2014). 《Unboxing Android USB: a hands-on approach with real World examples》. Berkeley, CA. ISBN 978-1-4302-6209-1. OCLC 880673864.
- ↑ Morgillo, Ivan; Viola, Stefano (2016). 《Learning embedded Android N programming: create the perfectly customized system by unleashing the power of Android OS on your embedded device》. Birmingham, UK. 89쪽. ISBN 9781785283284. OCLC 1020708322. 2021년 9월 26일에 원본 문서에서 보존된 문서. 2021년 9월 26일에 확인함.
- ↑ “How to sideload Android apps on Windows 11”. 2022년 1월 23일.
- ↑ “How to sideload apps to a Chromebook”. 2023년 3월 5일.
- ↑ “User manual | Shizuku”. 《shizuku.rikka.app》. 2024년 7월 19일에 확인함.
- ↑ “Google releases Android SDK” (미국 영어). 《Macworld》. 2021년 9월 10일에 원본 문서에서 보존된 문서. 2021년 9월 10일에 확인함.
- ↑ “Google makes ADB, fastboot, and other platform tools available without full SDK or Android Studio download” (미국 영어). 《Android Police》. 2017년 1월 5일. 2021년 4월 10일에 원본 문서에서 보존된 문서. 2021년 9월 9일에 확인함.
- ↑ Vasile, Cosmin (2015년 7월 29일). “Microsoft Releases Android Emulator and It's Supposed to Be Faster than Google's” (영어). 《소프트피디아》. 2021년 9월 10일에 원본 문서에서 보존된 문서. 2021년 9월 10일에 확인함.
- ↑ “Android Studio 2.0 - Beta” (영어). 《Android Developers Blog》. 2021년 9월 10일에 원본 문서에서 보존된 문서. 2021년 9월 10일에 확인함.
- ↑ “Android Things Developer Preview 6” (영어). 《Android Developers Blog》. 2021년 9월 10일에 원본 문서에서 보존된 문서. 2021년 9월 10일에 확인함.
- ↑ “Turning it up to 11: Android 11 for developers” (영어). 《Android Developers Blog》. 2021년 9월 17일에 원본 문서에서 보존된 문서. 2021년 9월 10일에 확인함.
- ↑ “Announcing Android Studio Arctic Fox (2020.3.1) & Android Gradle plugin 7.0” (영어). 《Android Developers Blog》. 2021년 9월 12일에 원본 문서에서 보존된 문서. 2021년 9월 10일에 확인함.
- ↑ “Behavior changes: Apps targeting Android 12 | Android 12 Beta” (영어). 《Android Developers》. 2021년 9월 28일에 원본 문서에서 보존된 문서. 2021년 9월 28일에 확인함.
- ↑ “Google Considers Removing Android ADB Backup and Restore”.
- ↑ Bradshaw, Kyle (2022년 8월 26일). “Google wants to make Fuchsia devices manageable with Android's ADB tool” (미국 영어). 《9to5Google》. 2022년 8월 29일에 확인함.
- ↑ Harwani, B. M. (2013). 《PhoneGap build: developing cross platform mobile applications in the cloud》. Boca Raton. 38쪽. ISBN 978-1-4665-8975-9. OCLC 862745697.
- ↑ Hoffman, Chris; Fedewa, Joe (2021년 9월 4일). “How to Install and Use ADB, the Android Debug Bridge Utility” (미국 영어). 《How-To Geek》. 2021년 9월 18일에 원본 문서에서 보존된 문서. 2021년 9월 9일에 확인함.
- ↑ Smyth, Neil (2020). 〈7〉. 《Android Studio 4. 0 Development Essentials - Java Edition: Developing Android Apps Using Android Studio 4. 0, Java and Android Jetpack.》. Cary. ISBN 978-1-951442-21-7. OCLC 1190906409.
- ↑ “Debian -- Details of package adb in bullseye”. 《packages.debian.org》. 2021년 9월 8일에 원본 문서에서 보존된 문서. 2021년 9월 8일에 확인함.
- ↑ “How to Install Android Debug Bridge (ADB) and Fastboot” (영어). 《Lifewire》. 2022년 1월 30일에 원본 문서에서 보존된 문서. 2022년 1월 18일에 확인함.
- ↑ “Run apps on a hardware device” (영어). 《Android Developers》. 2021년 9월 8일에 원본 문서에서 보존된 문서. 2021년 9월 8일에 확인함.
- ↑ Wallen, Jack. “How to enable Developer options in Android 4.2” (영어). 《TechRepublic》. 2021년 9월 9일에 원본 문서에서 보존된 문서. 2021년 9월 9일에 확인함.
- ↑ Ogubuike, Udochi (2019년 8월 9일). “How to enable USB debugging mode on Android” (미국 영어). 《더 펀치》. 2019년 9월 17일에 원본 문서에서 보존된 문서. 2021년 9월 9일에 확인함.
- ↑ Aranzulla, Salvatore. “Come attivare debug USB” (이탈리아어). 《Salvatore Aranzulla》. 2021년 9월 9일에 원본 문서에서 보존된 문서. 2021년 9월 9일에 확인함.
- ↑ Drake, Joshua J. (2014). 《Android hacker's handbook》. Zach Lanier, Collin Mulliner, Pau Oliva, Stephen A. Ridley, Georg Wicherski. Indianapolis, IN: Wiley. 75쪽. ISBN 978-1-118-60861-6. OCLC 875820167.
- ↑ Mendelsohn, Tom (2017년 1월 9일). “Google plugs severe Android vulnerability that exposed devices to spying” (미국 영어). 《아르스 테크니카》. 2021년 9월 10일에 원본 문서에서 보존된 문서. 2021년 9월 10일에 확인함.
- ↑ Cimpanu, Catalin. “Android devices ensnared in DDoS botnet” (영어). 《ZDNet》. 2021년 9월 10일에 원본 문서에서 보존된 문서. 2021년 9월 10일에 확인함.
- ↑ Schuman, Evan. “This Vultur app takes malicious to the next level” (영어). 《컴퓨터월드》. 2021년 9월 10일에 원본 문서에서 보존된 문서. 2021년 9월 10일에 확인함.
외부 링크
- 스크립트 오류가 있는 문서
- 잘못된 파일 링크가 포함된 문서
- CS1 - 영어 인용 (en)
- CS1 - 미국 영어 인용 (en)
- CS1 - 이탈리아어 인용 (it)
- 웹아카이브 틀 웨이백 링크
- 위키데이터 속성 P18을 사용하는 문서
- 위키데이터 속성 P41을 사용하는 문서
- 위키데이터 속성 P94를 사용하는 문서
- 위키데이터 속성 P117을 사용하는 문서
- 위키데이터 속성 P154를 사용하는 문서
- 위키데이터 속성 P213을 사용하는 문서
- 위키데이터 속성 P227을 사용하는 문서
- 위키데이터 속성 P242를 사용하는 문서
- 위키데이터 속성 P244를 사용하는 문서
- 위키데이터 속성 P245를 사용하는 문서
- 위키데이터 속성 P268을 사용하는 문서
- 위키데이터 속성 P269를 사용하는 문서
- 위키데이터 속성 P271을 사용하는 문서
- 위키데이터 속성 P347을 사용하는 문서
- 위키데이터 속성 P349를 사용하는 문서
- 위키데이터 속성 P350을 사용하는 문서
- 위키데이터 속성 P373을 사용하는 문서
- 위키데이터 속성 P380을 사용하는 문서
- 위키데이터 속성 P396을 사용하는 문서
- 위키데이터 속성 P409를 사용하는 문서
- 위키데이터 속성 P428을 사용하는 문서
- 위키데이터 속성 P434를 사용하는 문서
- 위키데이터 속성 P435를 사용하는 문서
- 위키데이터 속성 P436을 사용하는 문서
- 위키데이터 속성 P454를 사용하는 문서
- 위키데이터 속성 P496을 사용하는 문서
- 위키데이터 속성 P549를 사용하는 문서
- 위키데이터 속성 P650을 사용하는 문서
- 위키데이터 속성 P651을 사용하는 문서
- 위키데이터 속성 P691을 사용하는 문서
- 위키데이터 속성 P716을 사용하는 문서
- 위키데이터 속성 P781을 사용하는 문서
- 위키데이터 속성 P791을 사용하는 문서
- 위키데이터 속성 P864를 사용하는 문서
- 위키데이터 속성 P865를 사용하는 문서
- 위키데이터 속성 P886을 사용하는 문서
- 위키데이터 속성 P902를 사용하는 문서
- 위키데이터 속성 P906을 사용하는 문서
- 위키데이터 속성 P947을 사용하는 문서
- 위키데이터 속성 P950을 사용하는 문서
- 위키데이터 속성 P966을 사용하는 문서
- 위키데이터 속성 P982를 사용하는 문서
- 위키데이터 속성 P1003을 사용하는 문서
- 위키데이터 속성 P1004를 사용하는 문서
- 위키데이터 속성 P1005를 사용하는 문서
- 위키데이터 속성 P1006을 사용하는 문서
- 위키데이터 속성 P1015를 사용하는 문서
- 위키데이터 속성 P1045를 사용하는 문서
- 위키데이터 속성 P1048을 사용하는 문서
- 위키데이터 속성 P1053을 사용하는 문서
- 위키데이터 속성 P1146을 사용하는 문서
- 위키데이터 속성 P1153을 사용하는 문서
- 위키데이터 속성 P1157을 사용하는 문서
- 위키데이터 속성 P1186을 사용하는 문서
- 위키데이터 속성 P1225를 사용하는 문서
- 위키데이터 속성 P1248을 사용하는 문서
- 위키데이터 속성 P1273을 사용하는 문서
- 위키데이터 속성 P1315를 사용하는 문서
- 위키데이터 속성 P1323을 사용하는 문서
- 위키데이터 속성 P1330을 사용하는 문서
- 위키데이터 속성 P1362를 사용하는 문서
- 위키데이터 속성 P1368을 사용하는 문서
- 위키데이터 속성 P1375를 사용하는 문서
- 위키데이터 속성 P1407을 사용하는 문서
- 위키데이터 속성 P1556을 사용하는 문서
- 위키데이터 속성 P1584를 사용하는 문서
- 위키데이터 속성 P1695를 사용하는 문서
- 위키데이터 속성 P1707을 사용하는 문서
- 위키데이터 속성 P1736을 사용하는 문서
- 위키데이터 속성 P1886을 사용하는 문서
- 위키데이터 속성 P1890을 사용하는 문서
- 위키데이터 속성 P1907을 사용하는 문서
- 위키데이터 속성 P1908을 사용하는 문서
- 위키데이터 속성 P1960을 사용하는 문서
- 위키데이터 속성 P1986을 사용하는 문서
- 위키데이터 속성 P2041을 사용하는 문서
- 위키데이터 속성 P2163을 사용하는 문서
- 위키데이터 속성 P2174를 사용하는 문서
- 위키데이터 속성 P2268을 사용하는 문서
- 위키데이터 속성 P2349를 사용하는 문서
- 위키데이터 속성 P2418을 사용하는 문서
- 위키데이터 속성 P2456을 사용하는 문서
- 위키데이터 속성 P2484를 사용하는 문서
- 위키데이터 속성 P2558을 사용하는 문서
- 위키데이터 속성 P2750을 사용하는 문서
- 위키데이터 속성 P2980을 사용하는 문서
- 위키데이터 속성 P3223을 사용하는 문서
- 위키데이터 속성 P3233을 사용하는 문서
- 위키데이터 속성 P3348을 사용하는 문서
- 위키데이터 속성 P3372를 사용하는 문서
- 위키데이터 속성 P3407을 사용하는 문서
- 위키데이터 속성 P3430을 사용하는 문서
- 위키데이터 속성 P3544를 사용하는 문서
- 위키데이터 속성 P3562를 사용하는 문서
- 위키데이터 속성 P3563을 사용하는 문서
- 위키데이터 속성 P3601을 사용하는 문서
- 위키데이터 속성 P3723을 사용하는 문서
- 위키데이터 속성 P3788을 사용하는 문서
- 위키데이터 속성 P3829를 사용하는 문서
- 위키데이터 속성 P3863을 사용하는 문서
- 위키데이터 속성 P3920을 사용하는 문서
- 위키데이터 속성 P3993을 사용하는 문서
- 위키데이터 속성 P4038을 사용하는 문서
- 위키데이터 속성 P4055를 사용하는 문서
- 위키데이터 속성 P4114를 사용하는 문서
- 위키데이터 속성 P4143을 사용하는 문서
- 위키데이터 속성 P4186을 사용하는 문서
- 위키데이터 속성 P4423을 사용하는 문서
- 위키데이터 속성 P4457을 사용하는 문서
- 위키데이터 속성 P4534를 사용하는 문서
- 위키데이터 속성 P4535를 사용하는 문서
- 위키데이터 속성 P4581을 사용하는 문서
- 위키데이터 속성 P4613을 사용하는 문서
- 위키데이터 속성 P4955를 사용하는 문서
- 위키데이터 속성 P5034를 사용하는 문서
- 위키데이터 속성 P5226을 사용하는 문서
- 위키데이터 속성 P5288을 사용하는 문서
- 위키데이터 속성 P5302를 사용하는 문서
- 위키데이터 속성 P5321을 사용하는 문서
- 위키데이터 속성 P5368을 사용하는 문서
- 위키데이터 속성 P5504를 사용하는 문서
- 위키데이터 속성 P5587을 사용하는 문서
- 위키데이터 속성 P5736을 사용하는 문서
- 위키데이터 속성 P5818을 사용하는 문서
- 위키데이터 속성 P6213을 사용하는 문서
- 위키데이터 속성 P6734를 사용하는 문서
- 위키데이터 속성 P6792를 사용하는 문서
- 위키데이터 속성 P6804를 사용하는 문서
- 위키데이터 속성 P6829를 사용하는 문서
- 위키데이터 속성 P7293을 사용하는 문서
- 위키데이터 속성 P7303을 사용하는 문서
- 위키데이터 속성 P7314를 사용하는 문서
- 위키데이터 속성 P7902를 사용하는 문서
- 위키데이터 속성 P8034를 사용하는 문서
- 위키데이터 속성 P8189를 사용하는 문서
- 위키데이터 속성 P8381을 사용하는 문서
- 위키데이터 속성 P8671을 사용하는 문서
- 위키데이터 속성 P8980을 사용하는 문서
- 위키데이터 속성 P9070을 사용하는 문서
- 위키데이터 속성 P9692를 사용하는 문서
- 위키데이터 속성 P9725를 사용하는 문서
- 위키데이터 속성 P9984를 사용하는 문서
- 위키데이터 속성 P10020을 사용하는 문서
- 위키데이터 속성 P10299를 사용하는 문서
- 위키데이터 속성 P10608을 사용하는 문서
- 위키데이터 속성 P10832를 사용하는 문서
- 위키데이터 속성 P11249를 사용하는 문서
- 위키데이터 속성 P11646을 사용하는 문서
- 위키데이터 속성 P11729를 사용하는 문서
- 위키데이터 속성 P12204를 사용하는 문서
- 위키데이터 속성 P12362를 사용하는 문서
- 위키데이터 속성 P12754를 사용하는 문서
- 위키데이터 속성 P13049를 사용하는 문서
- 안드로이드 (운영체제)
- 디버깅
- 통신 프로토콜
- 안드로이드 개발 소프트웨어