AVD - Android Virtual Device
Reading time: 9 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
이 콘텐츠 작성에 도움을 주신 @offsecjay께 감사드립니다.
무엇인가
Android Studio는 Android 가상 머신을 실행할 수 있게 해주며, 이를 통해 APKs를 테스트할 수 있습니다. 이를 사용하려면 다음이 필요합니다:
- The Android SDK tools - Download here.
- Or Android Studio (with Android SDK tools) - Download here.
Windows(제 경우)에서 Android Studio를 설치한 후 SDK Tools는 다음 경로에 설치되어 있었습니다: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools
mac에서는 SDK tools를 다운로드하고 PATH에 추가하려면 다음을 실행하세요:
brew tap homebrew/cask
brew install --cask android-sdk
또는 Android Studio GUI에서 https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a에 표시된 것처럼 설치할 수 있으며, 이는 ~/Library/Android/sdk/cmdline-tools/latest/bin/
와 ~/Library/Android/sdk/platform-tools/
및 ~/Library/Android/sdk/emulator/
에 설치됩니다
Java 문제의 경우:
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
GUI
가상 머신 준비
Android Studio를 설치했다면, 메인 프로젝트 뷰를 열고 다음으로 접근할 수 있습니다: Tools --> AVD Manager.
.png)
그런 다음 Create Virtual Device 를 클릭하세요
.png)
사용할 phone을 선택하세요 그리고 Next. 를 클릭하세요
warning
Play Store가 설치된 phone이 필요하면 Play Store 아이콘이 있는 항목을 선택하세요!
.png)
현재 화면에서 폰이 실행할 Android image를 선택하고 다운로드할 수 있습니다:
.png)
이미지를 선택하고 아직 다운로드되지 않은 경우 이름 옆의 Download 아이콘을 클릭하세요 (이미지가 다운로드될 때까지 기다리세요).
이미지가 다운로드되면 Next
와 Finish
를 선택하면 됩니다.
가상 머신이 생성됩니다. 이제 AVD Manager에 접근할 때마다 해당 가상 머신이 표시됩니다.
가상 머신 실행
실행하려면 Start button 을 누르기만 하면 됩니다.
명령줄 도구
warning
macOS의 경우 avdmanager
도구는 /Users/<username>/Library/Android/sdk/tools/bin/avdmanager
에, emulator
는 /Users/<username>/Library/Android/sdk/emulator/emulator
에 있습니다(설치된 경우).
먼저 어떤 phone을 사용할지 결정해야 하므로, 사용 가능한 phone 목록을 보려면 실행하세요:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list device
d: 0 or "automotive_1024p_landscape"
Name: Automotive (1024p landscape)
OEM : Google
Tag : android-automotive-playstore
---------
id: 1 or "Galaxy Nexus"
Name: Galaxy Nexus
OEM : Google
---------
id: 2 or "desktop_large"
Name: Large Desktop
OEM : Google
Tag : android-desktop
---------
id: 3 or "desktop_medium"
Name: Medium Desktop
OEM : Google
Tag : android-desktop
---------
id: 4 or "Nexus 10"
Name: Nexus 10
OEM : Google
[...]
사용할 디바이스의 이름을 결정했으면, 이 디바이스에서 어떤 Android 이미지를 실행할지 결정해야 합니다.
모든 옵션은 sdkmanager
를 사용해 나열할 수 있습니다:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
그리고 사용하려는 것(또는 모두)을 다음 명령으로 다운로드하세요:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64"
원하는 Android 이미지를 다운로드한 후 다음 명령어로 다운로드된 모든 Android 이미지를 나열할 수 있습니다:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list target
----------
id: 1 or "android-28"
Name: Android API 28
Type: Platform
API level: 28
Revision: 6
----------
id: 2 or "android-29"
Name: Android API 29
Type: Platform
API level: 29
Revision: 4
이제 사용할 디바이스를 결정하고 Android 이미지를 다운로드했으므로, 다음 방법으로 가상 머신을 생성할 수 있습니다:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat -v create avd -k "system-images;android-28;google_apis;x86_64" -n "AVD9" -d "Nexus 5X"
이전 명령에서 VM 이름을 _AVD9_로 생성했습니다 장치 "Nexus 5X" 및 Android image "system-images;android-28;google_apis;x86_64"를 사용하여.
이제 생성한 virtual machines를 나열하려면:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list avd
Name: AVD9
Device: Nexus 5X (Google)
Path: C:\Users\cpolo\.android\avd\AVD9.avd
Target: Google APIs (Google Inc.)
Based on: Android API 28 Tag/ABI: google_apis/x86_64
The following Android Virtual Devices could not be loaded:
Name: Pixel_2_API_27
Path: C:\Users\cpolo\.android\avd\Pixel_2_API_27_1.avd
Error: Google pixel_2 no longer exists as a device
가상 머신 실행
warning
macOS의 경우, 설치되어 있다면 avdmanager
도구를 /Users/<username>/Library/Android/sdk/tools/bin/avdmanager
에서, emulator
를 /Users/<username>/Library/Android/sdk/emulator/emulator
에서 찾을 수 있습니다.
생성된 가상 머신을 나열하는 방법은 이미 살펴보았지만, 다음 명령을 사용해 나열할 수도 있습니다:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
AVD9
Pixel_2_API_27
다음을 사용하여 생성된 모든 가상 머신을 간단히 실행할 수 있습니다:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName"
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9"
또는 더 고급 옵션을 사용하면 다음과 같은 가상 머신을 실행할 수 있습니다:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
명령줄 옵션
하지만 VM을 시작할 때 사용할 수 있는 다양한 유용한 명령줄 옵션이 많이 있습니다. 아래에 몇 가지 흥미로운 옵션을 찾을 수 있으며, 전체 목록은 여기에서 확인할 수 있습니다.
Boot
-snapshot name
: VM 스냅샷을 시작-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img
: 기록된 모든 스냅샷 나열
Network
-dns-server 192.0.2.0, 192.0.2.255
: 쉼표로 구분된 DNS 서버를 VM에 지정할 수 있음.-http-proxy 192.168.1.12:8080
: 사용할 HTTP 프록시를 지정할 수 있음 (Burp로 트래픽을 캡처할 때 매우 유용)- 프록시 설정이 어떤 이유로 작동하지 않으면, 내부에서 구성하거나 "Super Proxy"나 "ProxyDroid" 같은 애플리케이션을 사용해보세요.
-netdelay 200
: 네트워크 지연(에뮬레이션)을 밀리초 단위로 설정.-port 5556
: 콘솔과 adb에 사용되는 TCP 포트 번호 설정.-ports 5556,5559
: 콘솔과 adb에 사용되는 TCP 포트들 설정.-tcpdump /path/dumpfile.cap
: 모든 트래픽을 파일로 캡처
System
-selinux {disabled|permissive}
: Linux 운영체제에서 Security-Enhanced Linux 보안 모듈을 disabled 또는 permissive 모드로 설정.-timezone Europe/Paris
: 가상 디바이스의 시간대 설정-screen {touch(default)|multi-touch|o-touch}
: 에뮬레이션된 터치 스크린 모드 설정.-writable-system
: 에뮬레이션 세션 동안 시스템 이미지를 쓰기 가능하게 하려면 이 옵션을 사용하세요. 또한adb root; adb remount
를 실행해야 합니다. 시스템에 새 인증서를 설치할 때 매우 유용합니다.
Linux CLI setup (SDK/AVD quickstart)
공식 CLI 도구를 사용하면 Android Studio 없이도 빠르고 디버깅 가능한 에뮬레이터를 쉽게 만들 수 있습니다.
# Directory layout
mkdir -p ~/Android/cmdline-tools/latest
# Download commandline tools (Linux)
wget https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip -O /tmp/cmdline-tools.zip
unzip /tmp/cmdline-tools.zip -d ~/Android/cmdline-tools/latest
rm /tmp/cmdline-tools.zip
# Env vars (add to ~/.bashrc or ~/.zshrc)
export ANDROID_HOME=$HOME/Android
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH
# Install core SDK components
sdkmanager --install "platform-tools" "emulator"
# Install a debuggable x86_64 system image (Android 11 / API 30)
sdkmanager --install "system-images;android-30;google_apis;x86_64"
# Create an AVD and run it with a writable /system & snapshot name
avdmanager create avd -n PixelRootX86 -k "system-images;android-30;google_apis;x86_64" -d "pixel"
emulator -avd PixelRootX86 -writable-system -snapshot PixelRootX86_snap
# Verify root (debuggable images allow `adb root`)
adb root
adb shell whoami # expect: root
노트
- System image flavors: google_apis (디버그 가능, allows
adb root
), google_apis_playstore (not rootable), aosp/default (lightweight). - Build types: userdebug often allows
adb root
on debug-capable images. Play Store images are production builds and block root. - On x86_64 hosts, full-system ARM64 emulation is unsupported from API 28+. For Android 11+ use Google APIs/Play images that include per-app ARM-to-x86 translation to run many ARM-only apps quickly.
CLI에서의 스냅샷
# Save a clean snapshot from the running emulator
adb -s emulator-5554 emu avd snapshot save my_clean_setup
# Boot from a named snapshot (if it exists)
emulator -avd PixelRootX86 -writable-system -snapshot my_clean_setup
ARM→x86 바이너리 변환 (Android 11+)
Android 11+의 Google APIs 및 Play Store images는 시스템의 나머지 부분은 네이티브 x86/x86_64로 유지하면서 프로세스별로 ARM 앱 바이너리를 번역할 수 있습니다. 이는 데스크탑에서 많은 ARM 전용 앱을 테스트하기에 대체로 충분히 빠릅니다.
팁: pentests 동안 Google APIs x86/x86_64 images를 사용하는 것이 좋습니다. Play images는 편하지만
adb root
을 차단합니다; Play services가 꼭 필요하고 root가 없는 것을 받아들일 때만 사용하세요.
Play Store 기기 루팅
Play Store가 포함된 기기를 다운로드했다면 직접 root를 얻을 수 없으며 다음과 같은 오류 메시지가 나타납니다
$ adb root
adbd cannot run as root in production builds
Using rootAVD with Magisk [rootAVD]와 [Magisk]를 사용하여 루팅할 수 있었습니다 (예: this video 또는 this one).
Burp 인증서 설치
사용자 정의 CA 인증서를 설치하는 방법은 다음 페이지를 확인하세요:
유용한 AVD 옵션
스냅샷 찍기
언제든지 VM의 스냅샷을 GUI를 사용하여 찍을 수 있습니다:
참고자료
- Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa
- Android Emulator command line
- Run ARM apps on the Android Emulator (x86 translation)
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.