> For the complete documentation index, see [llms.txt](https://hacktricks.xsx.tw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacktricks.xsx.tw/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md).

# AVD - Android Virtual Device

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS红队专家）</strong></a><strong>！</strong></summary>

支持HackTricks的其他方式：

* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>

非常感谢[**@offsecjay**](https://twitter.com/offsecjay)在创建此内容时提供的帮助。

## 什么是

Android Studio允许**运行Android的虚拟机，用于测试APK文件**。为了使用它们，您将需要：

* **Android SDK工具** - [在此处下载](https://developer.android.com/studio/releases/sdk-tools)。
* 或者**Android Studio**（带有Android SDK工具） - [在此处下载](https://developer.android.com/studio)。

在Windows（我的情况下）**安装Android Studio后**，我将**SDK工具安装在**：`C:\Users\<UserName>\AppData\Local\Android\Sdk\tools`

在mac上，您可以**下载SDK工具**并将其添加到PATH中运行：

```bash
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问题：

```java
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
```

## GUI

### 准备虚拟机

如果您已安装Android Studio，只需打开主项目视图并访问：***工具*** --> ***AVD 管理器***。

<div align="center" data-full-width="false"><figure><img src="/files/Xv2jQLVPFCMap5LJ2a9L" alt="" width="293"><figcaption></figcaption></figure></div>

然后，点击 ***创建虚拟设备***

<figure><img src="/files/X4x7qWLlBSunnwFRTMWm" alt="" width="188"><figcaption></figcaption></figure>

***选择** 您想要使用的手机*，然后点击 ***下一步***。

{% hint style="warning" %}
如果您需要安装了 Play Store 的手机，请选择带有 Play Store 图标的手机！

<img src="/files/Bq1mzfP0TP2sARRn9ywb" alt="" data-size="original">
{% endhint %}

在当前视图中，您将能够**选择并下载手机将运行的 Android 映像**：

<figure><img src="/files/xmZGzCRrH3nrIFgaGbY4" alt="" width="375"><figcaption></figcaption></figure>

因此，请选择它，如果尚未下载，请单击名称旁边的 ***下载*** 符号（**现在等待映像下载完成）**。\
一旦映像下载完成，只需选择 **`下一步`** 和 **`完成`**。

虚拟机将被创建。现在**每次访问 AVD 管理器时，它都会出现**。

### 运行虚拟机

为了**运行**它，只需按下 ***启动按钮***。

![](/files/Jc9A19YXYw0GIaSbfRF9)

## 命令行工具

首先，您需要**决定要使用哪款手机**，以查看可能的手机列表，请执行：

```
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`列出所有选项：

```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
```

并使用以下命令下载您想要使用的一个（或全部）：

{% code overflow="wrap" %}

```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64"
```

{% endcode %}

一旦你下载了想要使用的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映像，因此**您可以使用以下命令创建虚拟机**：

{% code overflow="wrap" %}

```bash
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"
```

{% endcode %}

在上一个命令中，我使用**设备**“*Nexus 5X*”和**Android映像**“*system-images;android-28;google\_apis;x86\_64*”创建了一个名为“*AVD9*”的虚拟机。\
现在，您可以使用以下命令**列出您创建的虚拟机**：

```bash
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
```

### 运行虚拟机

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

```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
AVD9
Pixel_2_API_27
```

您可以简单地使用以下命令**运行创建的任何虚拟机**：

{% code overflow="wrap" %}

```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName"
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9"
```

{% endcode %}

或者使用更高级的选项，您可以运行一个虚拟机，如：

{% code overflow="wrap" %}

```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
```

{% endcode %}

### 命令行选项

然而，有**许多不同的命令行有用选项**可用于启动虚拟机。下面您可以找到一些有趣的选项，但可以[**在此处找到完整列表**](https://developer.android.com/studio/run/emulator-commandline)

**启动**

* `-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 操作系统上将安全增强型 Linux 安全模块设置为禁用或宽松模式。
* `-timezone Europe/Paris`：为虚拟设备设置时区
* `-screen {touch(default)|multi-touch|o-touch}`：设置模拟触摸屏模式。
* **`-writable-system`**：使用此选项在仿真会话期间拥有可写系统映像。您还需要运行 `adb root; adb remount`。这对于在系统中安装新证书非常有用。

## 对 Play 商店设备进行 Root

如果您下载了带有 Play 商店的设备，则无法直接获取 root 权限，您将收到此错误消息

```
$ adb root
adbd cannot run as root in production builds
```

使用[rootAVD](https://github.com/newbit1/rootAVD)与[Magisk](https://github.com/topjohnwu/Magisk)，我成功对其进行了root操作（请参考[**此视频**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **或** [**这个视频**](https://www.youtube.com/watch?v=qQicUW0svB8)）。

## 安装Burp证书

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

{% content-ref url="/pages/T86gZsYdzBCNnr9vdTYD" %}
[Install Burp Certificate](/mobile-pentesting/android-app-pentesting/install-burp-certificate.md)
{% endcontent-ref %}

## AVD的有用选项

### 拍摄快照

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

![](/files/7TXRdrVMDtkW4grtusjS)

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS Red Team Expert）</strong></a><strong>！</strong></summary>

支持HackTricks的其他方式：

* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>
