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

207 lines
9.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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**_ を押します。
![](<../../images/image (518).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のスナップショットを撮ることができます
![](<../../images/image (234).png>)
{{#include ../../banners/hacktricks-training.md}}