AVD - Android Virtual Device

学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks

非常感谢 @offsecjay 在创建此内容时的帮助。

什么是

Android Studio 允许运行 Android 的虚拟机,以便测试 APK。为了使用它们,您需要:

在 Windows(以我的情况为例)安装 Android Studio 后,我在以下位置找到了 SDK 工具C:\Users\<UserName>\AppData\Local\Android\Sdk\tools

在 mac 上,您可以下载 SDK 工具并通过运行将其放入 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,您可以直接打开主项目视图并访问:工具 --> AVD 管理器。

然后,点击 创建虚拟设备

选择 您想要使用的手机 并点击 下一步。

如果您需要安装了 Play 商店的手机,请选择带有 Play 商店图标的手机!

在当前视图中,您将能够 选择并下载 Android 镜像,该手机将运行:

所以,选择它,如果没有下载,请点击名称旁边的 下载 符号(现在等待镜像下载完成)。 一旦镜像下载完成,只需选择 下一步完成

虚拟机将被创建。现在 每次您访问 AVD 管理器时,它都会存在

运行虚拟机

为了 运行 它,只需按下 启动按钮

命令行工具

首先,您需要 决定要使用哪个手机,为了查看可能的手机列表,请执行:

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" 的虚拟机,使用的设备是"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

运行虚拟机

我们已经看到如何列出创建的虚拟机,但您也可以使用以下命令列出它们

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

命令行选项

然而,有许多不同的命令行有用选项可以用来启动虚拟机。下面你可以找到一些有趣的选项,但可以在这里找到完整列表

启动

  • -snapshot name : 启动虚拟机快照

  • -snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img : 列出所有记录的快照

网络

  • -dns-server 192.0.2.0, 192.0.2.255 : 允许用逗号分隔的DNS服务器指向虚拟机。

  • -http-proxy 192.168.1.12:8080 : 允许指示要使用的HTTP代理(非常有用以使用Burp捕获流量)

  • -port 5556 : 设置用于控制台和adb的TCP端口号。

  • -ports 5556,5559 : 设置用于控制台和adb的TCP端口。

  • -tcpdump /path/dumpfile.cap : 将所有流量捕获到文件中

系统

  • -selinux {disabled|permissive} : 将安全增强Linux安全模块设置为禁用或宽容模式。

  • -timezone Europe/Paris : 设置虚拟设备的时区

  • -screen {touch(default)|multi-touch|o-touch} : 设置模拟触摸屏模式。

  • -writable-system : 使用此选项在仿真会话期间拥有可写的系统映像。你还需要运行adb root; adb remount。这对于在系统中安装新证书非常有用。

获取Play Store设备的Root权限

如果你下载了带有Play Store的设备,你将无法直接获取root权限,并且会收到此错误消息

$ adb root
adbd cannot run as root in production builds

使用 rootAVDMagisk,我成功地对其进行了root(例如可以参考 这个视频 这个视频)。

安装 Burp 证书

查看以下页面以了解如何安装自定义 CA 证书:

Install Burp Certificate

优秀的 AVD 选项

拍摄快照

您可以 使用 GUI 随时拍摄虚拟机的快照:

学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks

Last updated