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

11 KiB
Raw Blame History

AVD - Android虚拟设备

☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

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

什么是

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

在Windows中以我的情况为例安装Android Studio后,我将SDK工具安装在C:\Users\<用户名>\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管理器

然后,点击 创建虚拟设备

选择你想要使用的手机,然后点击 下一步

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

{% endhint %}

在当前视图中,你可以选择并下载手机将要运行的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

并使用以下命令下载您想要使用的一个(或全部):

{% code overflow="wrap" %}

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" %}

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”的虚拟机。
现在,您可以使用以下命令列出您创建的虚拟机:

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

您可以使用以下命令来运行任何创建的虚拟机:

{% code overflow="wrap" %}

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 %}

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

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

{% endcode %}

命令行选项

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

启动

  • -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操作系统上将Security-Enhanced 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

使用rootAVDMagisk我成功对其进行了root可以参考这个视频 或者 这个视频)。

安装Burp证书

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

{% content-ref url="install-burp-certificate.md" %} install-burp-certificate.md {% endcontent-ref %}

不错的AVD选项

拍摄快照

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

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥