AVD - Android Virtual Device
Reading time: 13 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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 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 上你可以 download the 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)
选择 要使用的手机 并点击 Next.
warning
如果你需要带有 Play Store 的手机,请选择带有 Play Store 图标的机型!
.png)
在当前视图中,你可以选择并下载手机将运行的 Android 镜像:
.png)
所以,选择它;如果还没下载,请点击名称旁的 Download 图标(现在等待镜像下载完成)。
镜像下载完成后,选择 Next
然后 Finish
。
虚拟机将被创建。现在 每次访问 AVD manager 时它都会出现。
运行虚拟机
要运行它,只需按下 Start button。
命令行工具
warning
在 macOS 上,如果已安装,你可以在 /Users/<username>/Library/Android/sdk/tools/bin/avdmanager
找到 avdmanager
工具,在 /Users/<username>/Library/Android/sdk/emulator/emulator
找到 emulator
。
首先你需要决定你要使用哪个手机,要查看可用手机列表,执行:
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"
在上一个命令中 我创建了一个名为 "AVD9" 的 VM,使用 设备 "Nexus 5X" 和 Android 镜像 "system-images;android-28;google_apis;x86_64"。
现在你可以使用下面的命令 列出你已创建的虚拟机:
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,如果已安装,你可以在 /Users/<username>/Library/Android/sdk/tools/bin/avdmanager
找到 avdmanager
工具,在 /Users/<username>/Library/Android/sdk/emulator/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
命令行选项
不过有 许多不同的有用命令行选项 可用于启动虚拟机。下面列出一些有意思的选项,但可以 find a complete list here
Boot
-snapshot name
: Start VM snapshot-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img
: 列出记录的所有快照
Network
-dns-server 192.0.2.0, 192.0.2.255
: 允许为 VM 指定以逗号分隔的 DNS 服务器。-http-proxy 192.168.1.12:8080
: 允许指定要使用的 HTTP 代理(在使用 Burp 捕获流量时非常有用)- If the proxy settings aren't working for some reason, try to configure them internally or using an pplication like "Super Proxy" or "ProxyDroid".
-netdelay 200
: 以毫秒为单位设置网络延迟仿真。-port 5556
: 设置用于控制台和 adb 的 TCP 端口号。-ports 5556,5559
: 设置用于控制台和 adb 的 TCP 端口。-tcpdump /path/dumpfile.cap
: 将所有流量捕获到文件中
System
-selinux {disabled|permissive}
: 将 Security-Enhanced Linux 安全模块设置为 disabled 或 permissive 模式(在 Linux 操作系统上)。-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
备注
- 系统镜像类型: google_apis (可调试,允许 adb root), google_apis_playstore (不可 root), aosp/default (轻量级).
- 构建类型: userdebug 通常允许在支持调试的镜像上运行
adb root
。Play Store images 属于生产构建,会阻止 root。 - 在 x86_64 主机上,从 API 28+ 起不支持全系统 ARM64 模拟。对于 Android 11+,使用包含 per-app ARM-to-x86 translation 的 Google APIs/Play images 来快速运行许多仅限 ARM 的应用。
来自 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 镜像可以按进程翻译 ARM 应用的二进制文件,同时保持系统其余部分为原生 x86/x86_64。这通常足够快,可以在桌面上测试许多仅支持 ARM 的应用。
Tip: 在 pentests 期间优先使用 Google APIs x86/x86_64 镜像。Play images 使用起来方便,但会阻止
adb root
;只有在你确实需要 Play services 并接受无法获得 root 的情况下才使用它们。
Rooting a Play Store device
如果你下载了带有 Play Store 的设备,你将无法直接获得 root,并且会看到如下错误信息
$ adb root
adbd cannot run as root in production builds
Using rootAVD with Magisk 我能够对其进行 root(例如参见 this video 或 this one)。
安装 Burp 证书
请查看以下页面以了解如何安装自定义 CA 证书:
实用的 AVD 选项
创建快照
你可以使用 GUI随时对 VM 创建快照:
参考资料
- 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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。