# 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>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hacktricks.xsx.tw/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
