AVD - Android Virtual Device

Reading time: 11 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

このコンテンツの作成中に助けてくれた@offsecjayに感謝します。

とは

Android Studioは、APKをテストするために使用できるAndroidの仮想マシンを実行することを可能にします。これらを使用するには、次のものが必要です:

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をインストールした場合は、メインプロジェクトビューを開いて、Tools --> AVD Manager. にアクセスできます。

次に、Create Virtual Device をクリックします。

使用したい電話を選択し、Next. をクリックします。

warning

Play Storeがインストールされた電話が必要な場合は、Play Storeアイコンのあるものを選択してください!

現在のビューでは、電話が実行するAndroidイメージを選択してダウンロードできます:

それを選択し、ダウンロードされていない場合は、名前の横にある_Download_シンボルをクリックします(今、イメージがダウンロードされるまで待ちます)。
イメージがダウンロードされたら、NextFinish を選択します。

仮想マシンが作成されます。これで、AVDマネージャーにアクセスするたびにそれが表示されます

仮想マシンの実行

実行するには、Start button を押します。

コマンドラインツール

まず、使用したい電話を決定する必要があります。可能な電話のリストを見るには、次のコマンドを実行します:

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

そして、使用したいもの(またはすべて)をダウンロードします:

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

ダウンロードしたい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イメージをダウンロードしたので、次のコマンドを使用して仮想マシンを作成できます:

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"

最後のコマンドで、デバイス "Nexus 5X" と Android イメージ "system-images;android-28;google_apis;x86_64" を使用して、VM 名 "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

任意の仮想マシンを作成して実行することができます:

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"

より高度なオプションを使用することで、次のような仮想マシンを実行できます:

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

コマンドラインオプション

ただし、仮想マシンを起動するために使用できるさまざまなコマンドラインの便利なオプションがたくさんあります。以下にいくつかの興味深いオプションを示しますが、完全なリストはここで見つけることができます

ブート

  • -snapshot name : VMスナップショットを開始
  • -snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img : 記録されたすべてのスナップショットをリスト表示

ネットワーク

  • -dns-server 192.0.2.0, 192.0.2.255 : VMにカンマ区切りで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ストアデバイスのルーティング

Playストアのあるデバイスをダウンロードした場合、直接rootを取得することはできず、このエラーメッセージが表示されます。

$ adb root
adbd cannot run as root in production builds

Using rootAVD with Magisk を使用して、ルート化することができました(例えば、この動画 または こちら を参照してください)。

Burp証明書のインストール

カスタムCA証明書のインストール方法については、以下のページを確認してください:

Install Burp Certificate

便利なAVDオプション

スナップショットを撮る

GUIを使用して、いつでもVMのスナップショットを撮ることができます:

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする