AVD - Android Virtual Device

Reading time: 11 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 का समर्थन करें

इस सामग्री को बनाते समय उनकी मदद के लिए @offsecjay का बहुत धन्यवाद।

क्या है

Android Studio आपको Android की वर्चुअल मशीनें चलाने की अनुमति देता है जिन्हें आप APKs के परीक्षण के लिए उपयोग कर सकते हैं। इन्हें इस्तेमाल करने के लिए आपको निम्न की आवश्यकता होगी:

Windows में (मेरे मामले में) Android Studio इंस्टॉल करने के बाद मेरे पास SDK Tools निम्न पथ पर इंस्टॉल थे: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools

mac पर आप SDK tools डाउनलोड कर सकते हैं और उन्हें PATH में जोड़ने के लिए नीचे चलाएँ:

bash
brew tap homebrew/cask
brew install --cask android-sdk

Or from Android Studio GUI as indicated in https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a which will install them in ~/Library/Android/sdk/cmdline-tools/latest/bin/ and ~/Library/Android/sdk/platform-tools/ and ~/Library/Android/sdk/emulator/

Java समस्याओं के लिए:

java
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home

GUI

Prepare Virtual Machine

यदि आपने Android Studio इंस्टॉल किया है, तो आप मुख्य प्रोजेक्ट व्यू खोलकर पहुँच सकते हैं: Tools --> AVD Manager.

फिर, Create Virtual Device पर क्लिक करें

चुनें वह फोन जिसे आप उपयोग करना चाहते हैं और Next. पर क्लिक करें।

warning

यदि आपको Play Store इंस्टॉल वाला फोन चाहिए तो Play Store आइकॉन वाला फोन चुनें!

इस दृश्य में आप Android image चुन और डाउनलोड कर सकेंगे जिसे फोन चलाएगा:

तो, इसे चुनें और यदि यह डाउनलोड नहीं हुआ है तो नाम के बगल में मौजूद Download चिह्न पर क्लिक करें (अब प्रतीक्षा करें जब तक image डाउनलोड न हो जाए)।
एक बार image डाउनलोड हो जाने पर, बस Next और Finish चुनें।

वर्चुअल मशीन बन जाएगी। अब हर बार जब आप AVD manager तक पहुँचेंगे यह मौजूद रहेगा

Run Virtual Machine

इसे चलाने के लिए बस Start button दबाएं।

Command Line tool

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 image चलाना चाहते हैं।\ आप 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 image को डाउनलोड कर लिया है जिसे आप उपयोग करना चाहते हैं, तो आप निम्न के साथ सभी डाउनलोड किए गए Android images की सूची देख सकते हैं:

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 image डाउनलोड कर लिया है, इसलिए आप निम्न का उपयोग करके वर्चुअल मशीन बना सकते हैं:

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"

पिछले कमांड में मैंने एक VM बनाया जिसका नाम "AVD9" था, जो डिवाइस "Nexus 5X" और Android image "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

वर्चुअल मशीन चलाएं

warning

macOS के लिए आप avdmanager टूल को /Users/<username>/Library/Android/sdk/tools/bin/avdmanager में और emulator को /Users/<username>/Library/Android/sdk/emulator/emulator में पा सकते हैं यदि वे इंस्टॉल हैं।

हमने पहले ही देखा है कि आप बनाए गए वर्चुअल मशीनों को कैसे सूचीबद्ध कर सकते हैं, लेकिन आप इन्हें निम्नलिखित का उपयोग करके भी सूचीबद्ध कर सकते हैं:

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

कमांड लाइन विकल्प

हालाँकि वर्चुअल मशीन शुरू करने के लिए कई उपयोगी कमांड लाइन विकल्प हैं। नीचे कुछ रोचक विकल्प दिए गए हैं, लेकिन आप find a complete list here

बूट

  • -snapshot name : VM का snapshot शुरू करें
  • -snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img : रिकॉर्ड किए गए सभी snapshots सूचीबद्ध करें

नेटवर्क

  • -dns-server 192.0.2.0, 192.0.2.255 : VM को कॉमा से अलग किए गए DNS सर्वर निर्दिष्ट करने की अनुमति देता है।
  • -http-proxy 192.168.1.12:8080 : इस्तेमाल करने के लिए HTTP proxy निर्दिष्ट करने की अनुमति देता है (ट्रैफिक कैप्चर करने के लिए Burp का उपयोग करते समय बहुत उपयोगी)
  • यदि किसी कारण से proxy सेटिंग्स काम नहीं कर रही हैं, तो उन्हें अंदरूनी तौर पर कॉन्फ़िगर करने या Super Proxy या ProxyDroid जैसे ऐप का उपयोग करने का प्रयास करें।
  • -netdelay 200 : नेटवर्क लेटेंसी एमुलेशन मिलीसेकंड में सेट करें।
  • -port 5556 : कंसोल और adb के लिए उपयोग किए जाने वाले TCP पोर्ट नंबर को सेट करें।
  • -ports 5556,5559 : कंसोल और adb के लिए उपयोग किए जाने वाले TCP पोर्ट सेट करें।
  • -tcpdump /path/dumpfile.cap : सभी ट्रैफिक को फ़ाइल में कैप्चर करें

सिस्टम

  • -selinux {disabled|permissive} : Security-Enhanced Linux सुरक्षा मॉड्यूल को Linux ऑपरेटिंग सिस्टम पर disabled या permissive मोड में सेट करें।
  • -timezone Europe/Paris : वर्चुअल डिवाइस के लिए टाइमज़ोन सेट करें
  • -screen {touch(default)|multi-touch|o-touch} : एमुलेटेड टच स्क्रीन मोड सेट करें।
  • -writable-system : इस ऑप्शन का उपयोग करके अपनी एमुलेशन सत्र के दौरान एक लिखने योग्य सिस्टम इमेज रखें। आपको साथ में adb root; adb remount भी चलाना होगा। यह सिस्टम में नया certificate इंस्टॉल करने के लिए बहुत उपयोगी है।

Linux CLI सेटअप (SDK/AVD quickstart)

आधिकारिक CLI टूल्स Android Studio के बिना तेज़, डिबग करने योग्य इमुलेटर बनाने को आसान बनाते हैं।

bash
# 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

Notes

  • System image flavors: google_apis (डिबग करने योग्य, adb root की अनुमति), google_apis_playstore (rootable नहीं), aosp/default (हल्का).
  • Build types: userdebug अक्सर डिबग-समर्थ इमेज पर adb root की अनुमति देता है। Play Store images production builds होते हैं और root को ब्लॉक करते हैं।
  • x86_64 hosts पर, full-system ARM64 emulation API 28+ से समर्थित नहीं है। Android 11+ के लिए Google APIs/Play images का उपयोग करें जिनमें per-app ARM-to-x86 translation शामिल है ताकि कई ARM-only apps तेज़ी से चलें।

CLI से स्नैपशॉट्स

bash
# 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+)

Google APIs और Play Store images Android 11+ पर प्रोसेस-वार ARM ऐप बाइनरीज़ को ट्रांसलेट कर सकते हैं, जबकि सिस्टम का बाकी हिस्सा native x86/x86_64 रहता है। यह अक्सर डेस्कटॉप पर कई ARM-only ऐप्स का परीक्षण करने के लिए पर्याप्त तेज़ होता है।

Tip: pentests के दौरान Google APIs x86/x86_64 images को प्राथमिकता दें। Play images सुविधाजनक हैं लेकिन adb root को ब्लॉक करते हैं; इन्हें केवल तब ही उपयोग करें जब आपको विशेष रूप से Play services की आवश्यकता हो और root की कमी स्वीकार करते हों।

Rooting a Play Store device

यदि आपने Play Store के साथ कोई डिवाइस डाउनलोड किया है, तो आप सीधे root प्राप्त करने में सक्षम नहीं होंगे, और आपको यह त्रुटि संदेश मिलेगा

$ adb root
adbd cannot run as root in production builds

Using rootAVD with Magisk मैं इसे root करने में सफल रहा (उदाहरण के लिए this video या this one देखें).

Burp Certificate इंस्टॉल करें

कस्टम CA cert कैसे इंस्टॉल करना है जानने के लिए निम्नलिखित पेज देखें:

Install Burp Certificate

उपयोगी AVD विकल्प

स्नैपशॉट लें

आप किसी भी समय VM का स्नैपशॉट लेने के लिए GUI का उपयोग कर सकते हैं:

संदर्भ

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 का समर्थन करें