mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
207 lines
9.9 KiB
Markdown
207 lines
9.9 KiB
Markdown
# AVD - Android Virtual Device
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
このコンテンツの作成中に助けてくれた[**@offsecjay**](https://twitter.com/offsecjay)に感謝します。
|
||
|
||
## とは
|
||
|
||
Android Studioは、**APKをテストするために使用できるAndroidの仮想マシンを実行することを可能にします**。これらを使用するには、次のものが必要です:
|
||
|
||
- **Android SDKツール** - [ここからダウンロード](https://developer.android.com/studio/releases/sdk-tools)。
|
||
- または**Android Studio**(Android SDKツール付き) - [ここからダウンロード](https://developer.android.com/studio)。
|
||
|
||
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](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.**_ にアクセスできます。
|
||
|
||
<div align="center" data-full-width="false">
|
||
|
||
<figure><img src="../../images/image (1142).png" alt="" width="293"><figcaption></figcaption></figure>
|
||
|
||
</div>
|
||
|
||
次に、_**Create Virtual Device**_ をクリックします。
|
||
|
||
<figure><img src="../../images/image (1143).png" alt="" width="188"><figcaption></figcaption></figure>
|
||
|
||
_**使用したい電話を選択**_し、_**Next.**_ をクリックします。
|
||
|
||
> [!WARNING]
|
||
> Play Storeがインストールされた電話が必要な場合は、Play Storeアイコンのあるものを選択してください!
|
||
>
|
||
> <img src="../../images/image (1144).png" alt="" data-size="original">
|
||
|
||
現在のビューでは、**電話が実行するAndroidイメージを選択してダウンロード**できます:
|
||
|
||
<figure><img src="../../images/image (1145).png" alt="" width="375"><figcaption></figcaption></figure>
|
||
|
||
それを選択し、ダウンロードされていない場合は、名前の横にある_**Download**_シンボルをクリックします(**今、イメージがダウンロードされるまで待ちます)。**\
|
||
イメージがダウンロードされたら、**`Next`** と **`Finish`** を選択します。
|
||
|
||
仮想マシンが作成されます。これで、**AVDマネージャーにアクセスするたびにそれが表示されます**。
|
||
|
||
### 仮想マシンの実行
|
||
|
||
**実行**するには、_**Start button**_ を押します。
|
||
|
||
.png>)
|
||
|
||
## コマンドラインツール
|
||
|
||
まず、**使用したい電話を決定する必要があります**。可能な電話のリストを見るには、次のコマンドを実行します:
|
||
```
|
||
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
|
||
```
|
||
### コマンドラインオプション
|
||
|
||
ただし、**仮想マシンを起動するために使用できるさまざまなコマンドラインの便利なオプションがたくさんあります**。以下にいくつかの興味深いオプションを示しますが、[**完全なリストはここで見つけることができます**](https://developer.android.com/studio/run/emulator-commandline)
|
||
|
||
**ブート**
|
||
|
||
- `-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](https://github.com/newbit1/rootAVD) with [Magisk](https://github.com/topjohnwu/Magisk) を使用して、ルート化することができました(例えば、[**この動画**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **または** [**こちら**](https://www.youtube.com/watch?v=qQicUW0svB8) を参照してください)。
|
||
|
||
## Burp証明書のインストール
|
||
|
||
カスタムCA証明書のインストール方法については、以下のページを確認してください:
|
||
|
||
{{#ref}}
|
||
install-burp-certificate.md
|
||
{{#endref}}
|
||
|
||
## 便利なAVDオプション
|
||
|
||
### スナップショットを撮る
|
||
|
||
**GUIを使用して**、いつでもVMのスナップショットを撮ることができます:
|
||
|
||
.png>)
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|