hacktricks/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md

242 lines
11 KiB
Markdown
Raw Normal View History

2023-08-03 19:12:22 +00:00
# AVD - Android虚拟设备
2022-04-28 16:01:33 +00:00
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
* 你在一家**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
2022-04-28 16:01:33 +00:00
</details>
2023-08-03 19:12:22 +00:00
非常感谢[**@offsecjay**](https://twitter.com/offsecjay)在创建此内容时的帮助。
2020-09-10 15:57:58 +00:00
## 什么是
2023-08-03 19:12:22 +00:00
Android Studio允许**运行Android的虚拟机用于测试APK文件**。为了使用它们,您需要:
2023-08-03 19:12:22 +00:00
* **Android SDK工具** - [在这里下载](https://developer.android.com/studio/releases/sdk-tools)。
* 或者**Android Studio**带有Android SDK工具 - [在这里下载](https://developer.android.com/studio)。
2023-08-03 19:12:22 +00:00
在Windows中以我的情况为例**安装Android Studio后**,我将**SDK工具安装在**`C:\Users\<用户名>\AppData\Local\Android\Sdk\tools`
在Mac上您可以**下载SDK工具**并将其放在PATH中运行
2021-04-07 12:08:35 +00:00
```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](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问题&#x20;
```java
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
2021-04-07 12:08:35 +00:00
```
2022-05-01 13:25:53 +00:00
## GUI
2023-08-03 19:12:22 +00:00
### 准备虚拟机
如果你已经安装了Android Studio你可以打开主项目视图并访问_**工具**_ --> _**AVD管理器**_
<div align="center" data-full-width="false">
<figure><img src="../../.gitbook/assets/image (670).png" alt="" width="293"><figcaption></figcaption></figure>
</div>
然后,点击 _**创建虚拟设备**_
<figure><img src="../../.gitbook/assets/image (671).png" alt="" width="188"><figcaption></figcaption></figure>
_**选择**你想要使用的手机_然后点击 _**下一步**_
{% hint style="warning" %}
如果你需要安装了Play Store的手机请选择一个带有Play Store图标的手机
![](<../../.gitbook/assets/image (672).png>)
{% endhint %}
在当前视图中,你可以**选择并下载**手机将要运行的Android镜像
<figure><img src="../../.gitbook/assets/image (673).png" alt="" width="375"><figcaption></figcaption></figure>
所以选择它如果它还没有下载点击名称旁边的_**下载**_符号**现在等待镜像下载完成)。**\
一旦镜像下载完成,只需选择**`下一步`**和**`完成`**。
2023-08-03 19:12:22 +00:00
虚拟机将被创建。现在,**每次访问AVD管理器时它都会出现**。
2023-08-03 19:12:22 +00:00
### 运行虚拟机
为了**运行**它只需点击_**启动按钮**_。
![](<../../.gitbook/assets/image (334).png>)
2023-08-03 19:12:22 +00:00
## 命令行工具
2023-08-03 19:12:22 +00:00
首先,你需要**决定要使用哪个手机**,为了查看可能的手机列表,请执行:
```
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list device
d: 0 or "automotive_1024p_landscape"
Name: Automotive (1024p landscape)
2023-08-03 19:12:22 +00:00
OEM : Google
Tag : android-automotive-playstore
---------
id: 1 or "Galaxy Nexus"
2023-08-03 19:12:22 +00:00
Name: Galaxy Nexus
OEM : Google
---------
id: 2 or "desktop_large"
Name: Large Desktop
2023-08-03 19:12:22 +00:00
OEM : Google
Tag : android-desktop
---------
id: 3 or "desktop_medium"
Name: Medium Desktop
2023-08-03 19:12:22 +00:00
OEM : Google
Tag : android-desktop
---------
id: 4 or "Nexus 10"
Name: Nexus 10
2023-08-03 19:12:22 +00:00
OEM : Google
[...]
```
一旦您决定要使用的设备名称,您需要**决定在此设备上运行哪个Android映像**。\
2023-08-03 19:12:22 +00:00
您可以使用`sdkmanager`列出所有选项:
2020-09-10 15:57:58 +00:00
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
```
2023-08-03 19:12:22 +00:00
并使用以下命令**下载**您想要使用的一个(或全部):
{% code overflow="wrap" %}
2020-09-10 15:57:58 +00:00
```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"
2023-08-03 19:12:22 +00:00
Name: Android API 28
Type: Platform
API level: 28
Revision: 6
----------
id: 2 or "android-29"
2023-08-03 19:12:22 +00:00
Name: Android API 29
Type: Platform
API level: 29
Revision: 4
```
2023-08-03 19:12:22 +00:00
此时您已经决定要使用的设备并且已经下载了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 %}
2023-08-03 19:12:22 +00:00
在上一个命令中我使用设备“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
2023-08-03 19:12:22 +00:00
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:
2023-08-03 19:12:22 +00:00
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
```
2023-08-03 19:12:22 +00:00
### 运行虚拟机
2023-08-03 19:12:22 +00:00
我们已经看到了如何列出创建的虚拟机,但是**你也可以使用以下方法列出它们**
```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 %}
或者使用更高级的选项,您可以运行一个虚拟机,比如:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
```
{% endcode %}
2023-08-03 19:12:22 +00:00
### 命令行选项
然而,有很多不同的命令行选项可以用来启动虚拟机。下面是一些有趣的选项,你可以在[这里找到完整的列表](https://developer.android.com/studio/run/emulator-commandline)。
2023-08-03 19:12:22 +00:00
**启动**
2023-08-03 19:12:22 +00:00
* `-snapshot name`:启动虚拟机快照
* `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img`:列出所有记录的快照
2023-08-03 19:12:22 +00:00
**网络**
2023-08-03 19:12:22 +00:00
* `-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`**:将所有流量捕获到文件中
2023-08-03 19:12:22 +00:00
**系统**
* `-selinux {disabled|permissive}`在Linux操作系统上将Security-Enhanced Linux安全模块设置为禁用或宽容模式。
2023-08-03 19:12:22 +00:00
* `-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="install-burp-certificate.md" %}
[install-burp-certificate.md](install-burp-certificate.md)
{% endcontent-ref %}
## 不错的AVD选项
### 拍摄快照
您可以使用GUI随时拍摄虚拟机的快照
![](<../../.gitbook/assets/image (336).png>)
2022-04-28 16:01:33 +00:00
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* 您在一家**网络安全公司**工作吗您想在HackTricks中看到您的**公司广告**吗?或者您想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
2022-04-28 16:01:33 +00:00
</details>