mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
207 lines
9.0 KiB
Markdown
207 lines
9.0 KiB
Markdown
# AVD - Android Virtual Device
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
이 콘텐츠를 만드는 데 도움을 주신 [**@offsecjay**](https://twitter.com/offsecjay)에게 매우 감사드립니다.
|
|
|
|
## What is
|
|
|
|
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"
|
|
```
|
|
마지막 명령어에서 **나는** "_AVD9_"라는 VM을 **장치** "_Nexus 5X_"와 **안드로이드 이미지** "_system-images;android-28;google_apis;x86_64_"를 사용하여 생성했습니다.\
|
|
이제 다음 명령어로 **생성한 가상 머신 목록**을 확인할 수 있습니다:
|
|
```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
|
|
```
|
|
### Command line options
|
|
|
|
그러나 **가상 머신을 시작하는 데 유용한 다양한 명령줄 옵션이 많이 있습니다**. 아래에서 몇 가지 흥미로운 옵션을 찾을 수 있지만 [**여기에서 전체 목록을 찾을 수 있습니다**](https://developer.android.com/studio/run/emulator-commandline)
|
|
|
|
**Boot**
|
|
|
|
- `-snapshot name` : VM 스냅샷 시작
|
|
- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : 기록된 모든 스냅샷 나열
|
|
|
|
**Network**
|
|
|
|
- `-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`** : 파일에 모든 트래픽을 캡처합니다.
|
|
|
|
**System**
|
|
|
|
- `-selinux {disabled|permissive}` : Linux 운영 체제에서 보안 강화 Linux 보안 모듈을 비활성화 또는 허용 모드로 설정합니다.
|
|
- `-timezone Europe/Paris` : 가상 장치의 시간대를 설정합니다.
|
|
- `-screen {touch(default)|multi-touch|o-touch}` : 에뮬레이션된 터치 스크린 모드를 설정합니다.
|
|
- **`-writable-system`** : 에뮬레이션 세션 중에 쓰기 가능한 시스템 이미지를 갖기 위해 이 옵션을 사용합니다. 또한 `adb root; adb remount`를 실행해야 합니다. 이는 시스템에 새 인증서를 설치하는 데 매우 유용합니다.
|
|
|
|
## Rooting a Play Store device
|
|
|
|
Play Store가 있는 장치를 다운로드한 경우 직접 루트 권한을 얻을 수 없으며, 이 오류 메시지를 받게 됩니다.
|
|
```
|
|
$ adb root
|
|
adbd cannot run as root in production builds
|
|
```
|
|
[**rootAVD**](https://github.com/newbit1/rootAVD)와 [**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}}
|