AVD - Android仮想デバイス
Reading time: 14 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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
このコンテンツの作成に協力してくれた @offsecjay に深く感謝します。
概要
Android Studioでは、APKをテストするために使用できるAndroidの仮想マシンを実行できます。それらを使用するには次が必要です:
- The Android SDK tools - Download here.
- Or Android Studio (with Android SDK tools) - Download here.
Windows(私の場合)では、Android Studioをインストールした後、SDK Toolsは次の場所にインストールされました: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools
macでは、SDK toolsをダウンロードして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
仮想マシンを準備する
If you installed Android Studio, you can just open the main project view and access: Tools --> AVD Manager.
.png)
Then, click on Create Virtual Device
.png)
使用する電話を選択 して、Next. をクリックします。
warning
Play Store がインストールされた端末が必要な場合は、Play Store アイコンが付いたものを選んでください!
In the current view you are going to be able to select and download the Android image that the phone is going to run:
.png)
選択して、まだダウンロードされていない場合は名前の横にある Download アイコンをクリックしてください(イメージのダウンロードが完了するまで待ちます)。
イメージがダウンロードされたら、Next と Finish を選択します。
仮想マシンが作成されます。以後、AVD manager にアクセスするたびに その仮想マシンが表示されます。
仮想マシンを起動する
起動するには、Start button を押すだけです。
.png)
コマンドラインツール
warning
macOS では、avdmanager ツールは /Users/<username>/Library/Android/sdk/tools/bin/avdmanager に、emulator は /Users/<username>/Library/Android/sdk/emulator/emulator にあります(インストールされている場合)。
まず どの端末を使うかを決める 必要があります。利用可能な端末の一覧を表示するには、次を実行してください:
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
そして、使用したいもの(またはすべて)を次のコマンドで download してください:
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イメージをダウンロードしているので、仮想マシンを作成するには以下を使用できます:
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"
直前のコマンドで 名前を付けたVMを作成しました "AVD9"、デバイス "Nexus 5X" と Androidイメージ "system-images;android-28;google_apis;x86_64" を使用しました。
これで、作成した仮想マシンを一覧表示できます:
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
仮想マシンの起動
warning
macOSでは、avdmanager ツールは /Users/<username>/Library/Android/sdk/tools/bin/avdmanager に、emulator は /Users/<username>/Library/Android/sdk/emulator/emulator にあります(インストールしている場合)。
作成した仮想マシンを一覧表示する方法はすでに見ましたが、次の方法でも一覧表示できます:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
AVD9
Pixel_2_API_27
次のコマンドを使って、作成した任意のvirtual machineを簡単に起動できます:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName"
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9"
または、より高度なオプションを使用して、次のような仮想マシンを実行できます:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
コマンドラインオプション
ただし、仮想マシンを起動する際に使える 多くの有用なコマンドラインオプション が存在します。以下はいくつかの興味深いオプションですが、find a complete list here
起動
-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 を使ってトラフィックをキャプチャする際に非常に便利)- プロキシ設定が何らかの理由で動作しない場合は、内部で設定するか "Super Proxy" や "ProxyDroid" のようなアプリケーションを使って構成してみてください。
-netdelay 200: ネットワーク遅延のエミュレーションをミリ秒単位で設定する-port 5556: console と adb に使用される TCP ポート番号を設定する-ports 5556,5559: console と adb に使用される TCP ポートを設定する-tcpdump /path/dumpfile.cap: すべてのトラフィックをファイルにキャプチャする
システム
-selinux {disabled|permissive}: Linux オペレーティングシステム上で Security-Enhanced Linux セキュリティモジュールを disabled または permissive モードに設定する-timezone Europe/Paris: 仮想デバイスのタイムゾーンを設定する-screen {touch(default)|multi-touch|o-touch}: エミュレートされたタッチスクリーンのモードを設定する-writable-system: エミュレーションセッション中にシステムイメージを writable にするオプションです。adb root; adb remountの実行も必要になります。システムに新しい証明書をインストールするのに非常に便利です。
Linux CLI セットアップ (SDK/AVD quickstart)
公式の CLI ツールを使えば、Android Studio を使わずに高速でデバッグ可能なエミュレータを簡単に作成できます。
# Directory layout
mkdir -p ~/Android/cmdline-tools/latest
# Download commandline tools (Linux)
wget https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip -O /tmp/cmdline-tools.zip
unzip /tmp/cmdline-tools.zip -d ~/Android/cmdline-tools/latest
rm /tmp/cmdline-tools.zip
# Env vars (add to ~/.bashrc or ~/.zshrc)
export ANDROID_HOME=$HOME/Android
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH
# Install core SDK components
sdkmanager --install "platform-tools" "emulator"
# Install a debuggable x86_64 system image (Android 11 / API 30)
sdkmanager --install "system-images;android-30;google_apis;x86_64"
# Create an AVD and run it with a writable /system & snapshot name
avdmanager create avd -n PixelRootX86 -k "system-images;android-30;google_apis;x86_64" -d "pixel"
emulator -avd PixelRootX86 -writable-system -snapshot PixelRootX86_snap
# Verify root (debuggable images allow `adb root`)
adb root
adb shell whoami # expect: root
メモ
- システムイメージのフレーバー: google_apis (デバッグ可能、adb root を許可), google_apis_playstore (root化不可), aosp/default (軽量).
- ビルドタイプ: userdebug はデバッグ対応のイメージで
adb rootを許可することが多い。Play Store イメージはプロダクションビルドで root をブロックする。 - x86_64 ホストでは、API 28+ 以降でフルシステムの ARM64 エミュレーションはサポートされない。Android 11+ では、多くの ARM 専用アプリを高速に実行するために、アプリ単位の ARM→x86 翻訳を含む Google APIs/Play images を使用する。
CLI からのスナップショット
# Save a clean snapshot from the running emulator
adb -s emulator-5554 emu avd snapshot save my_clean_setup
# Boot from a named snapshot (if it exists)
emulator -avd PixelRootX86 -writable-system -snapshot my_clean_setup
ARM→x86 バイナリ翻訳 (Android 11+)
Android 11+ の Google APIs と Play Store イメージは、システムの残りをネイティブな x86/x86_64 のままに保ちながら、プロセスごとに ARM アプリのバイナリを翻訳できます。これは、多くの ARM 専用アプリをデスクトップでテストするのに十分高速であることがよくあります。
ヒント: Pentests 中は Google APIs x86/x86_64 イメージを優先してください。Play イメージは便利ですが
adb rootをブロックします; Play services がどうしても必要で root がないことを受け入れる場合のみ使用してください。
Play Store デバイスを root する
Play Store を搭載したデバイスをダウンロードした場合、直接 root を取得することはできず、次のエラーメッセージが表示されます。
$ adb root
adbd cannot run as root in production builds
Using rootAVD with Magisk を使用して root化できました (follow for example this video or this one).
Burp 証明書のインストール
カスタム CA 証明書のインストール方法については、以下のページを確認してください:
便利な AVD オプション
スナップショットを取得
VM のスナップショットはいつでも GUI を使って 取得できます:
.png)
参考資料
- Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa
- Android Emulator command line
- Run ARM apps on the Android Emulator (x86 translation)
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
HackTricks