13 KiB
AVD - 안드로이드 가상 장치
htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!
HackTricks를 지원하는 다른 방법:
- 회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드하려면 SUBSCRIPTION PLANS를 확인하세요!
- 공식 PEASS & HackTricks 스웨그를 얻으세요.
- The PEASS Family를 발견하세요. 독점적인 NFTs 컬렉션입니다.
- 💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @carlospolopm를 팔로우하세요.
- HackTricks와 HackTricks Cloud github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
이 콘텐츠를 만드는 동안 도움을 주신 @offsecjay님께 매우 감사드립니다.
무엇인가
Android Studio를 사용하면 APK를 테스트하기 위해 사용할 수 있는 Android 가상 머신을 실행할 수 있습니다. 이를 사용하기 위해서는 다음이 필요합니다:
Windows에서 (제 경우에는) Android Studio를 설치한 후 SDK 도구가 다음 경로에 설치되었습니다: C:\Users\<사용자명>\AppData\Local\Android\Sdk\tools
Mac에서는 SDK 도구를 다운로드하고 PATH에 설치하려면 다음을 실행하세요:
brew tap homebrew/cask
brew install --cask android-sdk
또는 https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a에서 언급한대로 Android Studio GUI에서 설치할 수도 있습니다. 이 경우 설치 경로는 ~/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
가상 머신 준비
만약 Android Studio를 설치했다면, 메인 프로젝트 뷰를 열고 다음을 선택하여 접근할 수 있습니다: 도구 --> AVD 관리자.
그런 다음, 가상 장치 생성 을 클릭하세요.
사용하려는 휴대폰을 선택 하고 다음 을 클릭하세요.
{% hint style="warning" %} Play Store가 설치된 휴대폰이 필요한 경우, Play Store 아이콘이 있는 것을 선택하세요!
현재 보고 있는 화면에서는 휴대폰이 실행될 Android 이미지를 선택하고 다운로드 할 수 있습니다:
따라서, 선택하고 다운로드되지 않은 경우 이름 옆의 다운로드 기호를 클릭하세요 (이미지가 다운로드될 때까지 기다리세요).
이미지가 다운로드되면, 다음
과 완료
를 선택하세요.
가상 머신이 생성됩니다. 이제 AVD 관리자에 접근할 때마다 가상 머신이 표시됩니다.
가상 머신 실행
가상 머신을 실행 하려면 시작 버튼 을 누르세요.
명령 줄 도구
먼저, 사용할 휴대폰을 결정해야 합니다. 가능한 휴대폰 목록을 보려면 다음을 실행하세요:
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
를 사용하여 모든 옵션을 나열할 수 있습니다:
sdkmanager --list --verbose | grep -E '^system-images'
이 명령을 실행하면 사용 가능한 Android 이미지 목록이 표시됩니다. 이 목록에서 원하는 이미지를 선택할 수 있습니다. 이미지를 선택한 후에는 해당 이미지를 설치해야 합니다. 설치 명령은 다음과 같습니다:
sdkmanager --install "system-images;android-<version>;<tag>"
여기서 <version>
은 선택한 Android 버전이고, <tag>
는 선택한 이미지의 태그입니다. 예를 들어, Android 10의 x86_64 이미지를 설치하려면 다음과 같이 명령을 실행합니다:
sdkmanager --install "system-images;android-29;google_apis_playstore;x86_64"
이미지를 설치한 후에는 AVD를 생성해야 합니다. AVD를 생성하는 명령은 다음과 같습니다:
avdmanager create avd -n <name> -k "system-images;android-<version>;<tag>"
여기서 <name>
은 AVD의 이름이고, <version>
과 <tag>
는 이미지를 설치할 때와 동일한 값입니다. 예를 들어, 이름이 "myavd"인 Android 10의 x86_64 AVD를 생성하려면 다음과 같이 명령을 실행합니다:
avdmanager create avd -n myavd -k "system-images;android-29;google_apis_playstore;x86_64"
AVD를 생성한 후에는 AVD를 실행할 수 있습니다. AVD를 실행하는 명령은 다음과 같습니다:
emulator -avd <name>
여기서 <name>
은 생성한 AVD의 이름입니다. 예를 들어, "myavd"라는 이름의 AVD를 실행하려면 다음과 같이 명령을 실행합니다:
emulator -avd myavd
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
그리고 다음과 같이 사용하고자 하는 하나(또는 모두)를 다운로드하세요:
{% code overflow="wrap" %}
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64"
{% endcode %}
원하는 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 이미지를 다운로드했으므로 다음과 같이 가상 머신을 생성할 수 있습니다:
{% code overflow="wrap" %}
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"
{% endcode %}
마지막 명령에서 나는 "AVD9" 라는 이름의 가상 머신을 생성했습니다. 이 가상 머신은 "Nexus 5X" 기기와 "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
가상 머신 실행
이미 생성된 가상 머신을 나열하는 방법을 이미 살펴보았지만, 다음과 같이 사용하여 나열할 수도 있습니다:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
AVD9
Pixel_2_API_27
가상 머신을 실행하는 것은 매우 간단합니다. 다음을 사용하면 됩니다:
{% code overflow="wrap" %}
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName"
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9"
{% endcode %}
더 고급 옵션으로 가상 머신을 실행할 수도 있습니다. 다음과 같이 실행할 수 있습니다:
{% code overflow="wrap" %}
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
{% endcode %}
명령 줄 옵션
그러나 가상 머신을 시작하는 데 사용할 수 있는 다양한 명령 줄 유용한 옵션이 많이 있습니다. 아래에서 몇 가지 흥미로운 옵션을 찾을 수 있지만 여기에서 완전한 목록을 찾을 수 있습니다
부팅
-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 Store 장치 루팅
Play Store에서 장치를 다운로드한 경우 직접 루트 권한을 얻을 수 없으며 다음 오류 메시지가 표시됩니다.
$ adb root
adbd cannot run as root in production builds
rootAVD와 Magisk를 사용하여 루팅할 수 있었습니다 (예를 들어 이 비디오 또는 이 비디오를 참고하세요).
Burp 인증서 설치
사용자 정의 CA 인증서를 설치하는 방법은 다음 페이지를 확인하세요:
{% content-ref url="install-burp-certificate.md" %} install-burp-certificate.md {% endcontent-ref %}
좋은 AVD 옵션
스냅샷 찍기
원하는 시점에 VM의 스냅샷을 GUI를 사용하여 찍을 수 있습니다:
htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요!
HackTricks를 지원하는 다른 방법:
- 회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드하려면 SUBSCRIPTION PLANS를 확인하세요!
- 공식 PEASS & HackTricks 스웨그를 구매하세요.
- The PEASS Family를 발견하세요. 독점적인 NFTs 컬렉션입니다.
- 💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @carlospolopm를 팔로우하세요.
- HackTricks와 HackTricks Cloud github 저장소에 PR을 제출하여 여러분의 해킹 기술을 공유하세요.