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

241 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
2023-08-03 19:12:22 +00:00
## AVD - Android虚拟设备
2022-05-01 13:25:53 +00:00
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
### 准备虚拟机
2023-08-03 19:12:22 +00:00
如果你已经安装了Android Studio你可以打开主项目视图并访问_**工具**_ --> _**AVD管理器**_
2022-12-24 12:04:26 +00:00
![](<../../.gitbook/assets/image (330).png>)
2023-08-03 19:12:22 +00:00
然后,点击 _**创建虚拟设备**__**选择**_ 你想要使用的手机,并点击 _**下一步**_。\
在当前视图中,你将能够**选择和下载**手机将要运行的Android镜像
![](<../../.gitbook/assets/image (331).png>)
所以,选择它并点击 _**下载**_**现在等待镜像下载完成)。**\
**一旦镜像下载完成,只需选择** `下一步``完成`
![](<../../.gitbook/assets/image (332).png>)
2023-08-03 19:12:22 +00:00
虚拟机将被创建。现在,**每次访问AVD管理器时它都会出现**。
2023-08-03 19:12:22 +00:00
### 运行虚拟机
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 %}
2023-08-03 19:12:22 +00:00
一旦你下载了想要使用的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 %}
或者使用更高级的选项,您可以运行一个虚拟机,比如:
{% 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 %}
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`。这对于在系统中安装新证书非常有用。
2023-08-03 19:12:22 +00:00
## 在虚拟机上安装Burp证书
首先您需要从Burp中下载Der证书。您可以在_Proxy_ --> _Options_ --> _Import / Export CA certificate_ 中完成此操作。
![](<../../.gitbook/assets/image (367).png>)
2023-08-03 19:12:22 +00:00
以Der格式**导出证书**,然后将其转换为**Android**能够**理解的形式**。请注意为了在AVD中配置Burp证书您需要使用**`-writable-system`**选项运行此虚拟机。例如,您可以这样运行它:
{% 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 %}
2023-08-03 19:12:22 +00:00
然后,要**配置Burp的证书**,请执行以下操作:
```bash
openssl x509 -inform DER -in burp_cacert.der -out burp_cacert.pem
CERTHASHNAME="`openssl x509 -inform PEM -subject_hash_old -in burp_cacert.pem | head -1`.0"
mv burp_cacert.pem $CERTHASHNAME #Correct name
adb root && sleep 2 && adb remount #Allow to write on /syste
adb push $CERTHASHNAME /sdcard/ #Upload certificate
adb shell mv /sdcard/$CERTHASHNAME /system/etc/security/cacerts/ #Move to correct location
adb shell chmod 644 /system/etc/security/cacerts/$CERTHASHNAME #Assign privileges
adb reboot #Now, reboot the machine
```
2023-08-03 19:12:22 +00:00
一旦**机器完成重启**burp证书将被其使用
2023-08-03 19:12:22 +00:00
## 拍摄快照
2023-08-03 19:12:22 +00:00
您可以使用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)
* 发现我们的独家[NFT收藏品**The PEASS Family**](https://opensea.io/collection/the-peass-family)
2023-08-03 19:12:22 +00:00
* 获取[**官方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>