
एंड्रॉइड CTF चुनौतियों के लिए एक लचीला प्लेग्राउंड।
<h1 align="center">
<br>
<img src="https://assets.kitploit.com/production/public/readmes/7301/75c22abcf52c94c756ce37d77db74df73c48b6846c3aede4c8971c38e2180f65.png" alt= "droidground" width="200px">
</h1>
<p align="center">
<b>DroidGround</b>
<p>
<p align="center">
<a href="https://github.com/SECFORCE/droidground/blob/main/README.md"><img src="https://img.shields.io/badge/Documentation-complete-green.svg?style=flat"></a>
<a href="https://github.com/SECFORCE/droidground/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-GPL3-blue.svg"></a>
<a href="https://blackhat.com/eu-25/arsenal/schedule/index.html#droidground-a-flexible-playground-for-android-ctf-challenges-47803"><img src="https://raw.githubusercontent.com/secforce/droidground/HEAD/docs/blackhat-2025.svg"></a>
<br />
<a href="https://droidground.com" target="_blank">Website</a> |
<a href="https://droidground.com/demo" target="_blank">Demo</a>
</p>
पारंपरिक **CTF चुनौतियों** में, आमतौर पर फ्लैग को सिस्टम की फ़ाइलों में छिपाया जाता है, जिससे हमलावरों को उन्हें निकालने के लिए कमज़ोरियों का फ़ायदा उठाना पड़ता है। हालाँकि, Android की दुनिया में यह तरीका अच्छी तरह काम नहीं करता। APK फ़ाइलें आसानी से डाउनलोड और रिवर्स की जा सकती हैं, इसलिए **डिवाइस पर फ्लैग रखना आमतौर पर इसे स्टैटिक विश्लेषण या एमुलेटर ट्रिक्स से निकालना बहुत आसान बना देता है**। यह यथार्थवादी, रनटाइम-केंद्रित चुनौतियाँ बनाने की क्षमता को गंभीर रूप से सीमित करता है।
_DroidGround_ इस समस्या को हल करने के लिए डिज़ाइन किया गया है।
यह Android मोबाइल हैकिंग चुनौतियों को एक **नियंत्रित** और **यथार्थवादी** वातावरण में होस्ट करने के लिए बनाया गया एक कस्टम प्लेटफ़ॉर्म है, जहाँ **हमलावरों को बस इतना सीमित किया जाता है** कि उन्हें चुनौतियों को इच्छित तरीके से हल करना पड़े।
महत्वपूर्ण बात यह है कि प्रतिभागियों को **ऐप वातावरण के भीतर कैद** किया जा सकता है। टूल की मॉड्यूलरिटी यह तय करने की अनुमति देती है कि उपयोगकर्ता शेल स्पॉन कर सकता है या नहीं, मनमानी फ़ाइलें पढ़ सकता है या नहीं, या टूल साइडलोड कर सकता है या नहीं। सब कुछ इस तरह सेट किया जा सकता है कि फ्लैग प्राप्त करने का एकमात्र तरीका ऐप को समझना और उसका फ़ायदा उठाना हो।
## 📋 विषय-सूची
- [🧭 अवलोकन](#-overview)
- [✨ विशेषताएँ](#-features)
- [📸 स्क्रीनशॉट](#-screenshots)
- [⚙️ कॉन्फ़िगरेशन](#️-configuration)
- [🧩 उपयोग के मामले](#-use-cases)
- [⚙️ उपयोग](#️-usage)
- [💡 सुझाव](#-tips)
- [🛠 विकास](#-development)
- [🤝 योगदान](#-contributing)
- [📚 श्रेय](#-credits)
- [🪪 लाइसेंस](#-license)
## 🧭 अवलोकन
_DroidGround_ कई तरह की _Android_ चुनौतियों को सक्षम बनाता है जिन्हें पारंपरिक CTF सेटअप में लागू करना अन्यथा कठिन होता है। उदाहरण के लिए, रिमोट कोड एक्ज़ीक्यूशन (RCE) चुनौती में, खिलाड़ियों को स्थानीय विश्लेषण के लिए एक APK मिल सकता है। कमज़ोरी खोजने के बाद, वे एक Frida स्क्रिप्ट विकसित कर सकते हैं और फ्लैग को आंतरिक स्टोरेज से निकालने के लिए इसे DroidGround के माध्यम से वास्तविक लक्ष्य डिवाइस पर चला सकते हैं। अन्य चुनौती प्रकारों में छिपी हुई गतिविधियाँ, कस्टम ब्रॉडकास्ट इंटेंट, सेवा शोषण, या प्रीलोडेड टूल्स का उपयोग करके गतिशील विश्लेषण शामिल हो सकते हैं।
रीयल-टाइम डिवाइस स्ट्रीमिंग, सुविधाओं पर बारीक नियंत्रण, Frida एकीकरण, और अनुकूलन योग्य सेटअप और रीसेट स्क्रिप्ट के साथ, DroidGround CTF आयोजकों को सुरक्षित, लचीली और यथार्थवादी Android चुनौतियाँ बनाने में सक्षम बनाता है जो आमतौर पर संभव से कहीं आगे जाती हैं।
## ✨ विशेषताएँ
DroidGround सर्वर-नियंत्रित सुविधाओं का एक समृद्ध सेट प्रदान करता है।
- **रीयल-टाइम डिवाइस स्क्रीन** (`scrcpy` के माध्यम से), वैकल्पिक माउस, टच, और कीबोर्ड नियंत्रण के साथ
- **चुनौती स्थिति रीसेट करें**
- **ऐप पुनः आरंभ करें / गतिविधि शुरू करें / सेवा शुरू करें**
- **ब्रॉडकास्ट इंटेंट भेजें**
- **डिवाइस शटडाउन / रीबूट करें**
- **बगरिपोर्ट डाउनलोड करें (bugreportz)**
- **Frida स्क्रिप्टिंग**
- प्रीलोडेड लाइब्रेरी से चलाएँ (जेल्ड मोड)
- मनमानी स्क्रिप्ट चलाएँ (पूर्ण मोड)
- **फ़ाइल ब्राउज़र**
- **टर्मिनल एक्सेस**
- **APK प्रबंधन**
- **Logcat व्यूअर**
- **एक्सप्लॉइट सर्वर** (यदि टीम मोड सक्षम है)
लगभग सभी सुविधाएँ **मॉड्यूलर** हैं और पर्यावरण चर के माध्यम से परिभाषित की जाती हैं, जिससे चुनौती के दायरे पर सटीक नियंत्रण सुनिश्चित होता है।
## 📸 स्क्रीनशॉट
|  |  |
| ------------------------------------------------------ | ----------------------------------------------------- |
| अवलोकन | गतिविधि शुरू करें |
|  |  |
| Frida जेल्ड मोड | Frida पूर्ण मोड |
|  |  |
| फ़ाइल ब्राउज़र | ऐप प्रबंधक |
|  |  |
| टर्मिनल | लॉग्स |
## ⚙️ कॉन्फ़िगरेशन
रूट डायरेक्टरी में `.env.sample` फ़ाइल एक अच्छा प्रारंभिक बिंदु है। यह वर्तमान में समर्थित सभी env चरों की पूरी सूची है:
| Variable | Description | Default |
| ------------------------------------- | --------------------------------------------------------------------------------- | ----------- |
| `DROIDGROUND_BASE_PATH` | वेबऐप का पथ (सबपाथ पर होस्ट करने के लिए उपयोगी) | - |
| `DROIDGROUND_APP_PACKAGE_NAME` | लक्ष्य ऐप का पैकेज नाम | - |
| `DROIDGROUND_ADB_HOST` | ADB होस्ट | `localhost` |
| `DROIDGROUND_ADB_PORT` | ADB पोर्ट | `5037` |
| `DROIDGROUND_ADB_SERIAL` | कनेक्ट करने के लिए वैकल्पिक ADB डिवाइस सीरियल | - |
| `DROIDGROUND_DEVICE_TYPE` | `usb` या `network` | `usb` |
| `DROIDGROUND_DEVICE_HOST` | Android डिवाइस का IP (`adb`) (केवल नेटवर्क मोड) | - |
| `DROIDGROUND_DEVICE_PORT` | Android डिवाइस का पोर्ट (`adb`) (केवल नेटवर्क मोड) | - |
| `DROIDGROUND_INIT_SCRIPTS_FOLDER` | `setup.sh` और `reset.sh` वाला फ़ोल्डर | `/init.d` |
| `DROIDGROUND_HOST` | बाइंड एड्रेस | `0.0.0.0` |
| `DROIDGROUND_PORT` | बाइंड पोर्ट | `4242` |
| `DROIDGROUND_RESTART_APP_DISABLED` | ऐप पुनः आरंभ अक्षम करें | `false` |
| `DROIDGROUND_APP_MANAGER_DISABLED` | ऐप प्रबंधक अक्षम करें | `false` |
| `DROIDGROUND_BUG_REPORT_DISABLED` | बगरिपोर्ट अक्षम करें | `false` |
| `DROIDGROUND_FILE_BROWSER_DISABLED` | फ़ाइल ब्राउज़र अक्षम करें | `false` |
| `DROIDGROUND_FRIDA_DISABLED` | Frida समर्थन अक्षम करें | `false` |
| `DROIDGROUND_FRIDA_TYPE` | `jail` या `full` | `jail` |
| `DROIDGROUND_FRIDA_INJECTION` | `server` या `gadget` | `server` |
| `DROIDGROUND_LOGCAT_DISABLED` | logcat अक्षम करें | `false` |
| `DROIDGROUND_REBOOT_ENABLED` | रीबूट सक्षम करें | `false` |
| `DROIDGROUND_SHUTDOWN_ENABLED` | शटडाउन सक्षम करें | `false` |
| `DROIDGROUND_START_ACTIVITY_DISABLED` | startActivity अक्षम करें | `false` |
| `DROIDGROUND_START_RECEIVER_DISABLED` | ब्रॉडकास्ट अक्षम करें | `false` |
| `DROIDGROUND_START_SERVICE_DISABLED` | startService अक्षम करें | `false` |
| `DROIDGROUND_TERMINAL_DISABLED` | टर्मिनल अक्षम करें | `false` |
| `DROIDGROUND_RESET_DISABLED` | रीसेट अक्षम करें | `false` |
| `DROIDGROUND_SCRCPY_CONTROL_ENABLED` | डिवाइस स्क्रीन के माध्यम से माउस, टच, और कीबोर्ड इनपुट सक्षम करें | `false` |
| `DROIDGROUND_SCRCPY_MAX_SIZE` | पिक्सेल में अधिकतम वीडियो आयाम; `0` पूर्ण डिवाइस रिज़ॉल्यूशन रखता है | `1280` |
| `DROIDGROUND_SCRCPY_MAX_FPS` | अधिकतम वीडियो फ़्रेम दर; `0` इसे अनकैप्ड छोड़ता है | `60` |
| `DROIDGROUND_SCRCPY_VIDEO_BIT_RATE` | बिट्स प्रति सेकंड में वीडियो बिटरेट | `4000000` |
| `DROIDGROUND_EXPLOIT_APP_DURATION` | एक्सप्लॉइट ऐप सक्रिय रहने का समय (सेकंड में) | `10` |
| `DROIDGROUND_EXPLOIT_APP_MAX_SIZE` | एक्सप्लॉइट ऐप का अधिकतम आकार (MB में) | `50` |
| `DROIDGROUND_NUM_TEAMS` | एक साथ खेलने वाली टीमों की संख्या | - |
| `DROIDGROUND_TEAM_TOKEN_<N>` | nवीं टीम के लिए टोकन। अनुपस्थित होने पर स्वतः उत्पन्न | - |
| `DROIDGROUND_IP_STATIC` | प्रदर्शित करने के लिए स्टैटिक IP एड्रेस। यह `DROIDGROUND_IP_IFACE` पर प्राथमिकता लेता है | - |
| `DROIDGROUND_IP_IFACE` | प्रदर्शित IP एड्रेस के लिए नेटवर्क इंटरफ़ेस | - |
| `DROIDGROUND_LOGO_LINK` | वैकल्पिक रूप से लोगो क्लिक-थ्रू लिंक सेट करें (जैसे, आपका CTF मुख्य पृष्ठ) | - |
डिवाइस स्क्रीन को इंटरैक्टिव बनाने के लिए `DROIDGROUND_SCRCPY_CONTROL_ENABLED=true` सेट करें और DroidGround को पुनः आरंभ करें। इसे फ़ोकस करने के लिए स्क्रीन पर क्लिक या टैप करें, फिर क्लिक करें, ड्रैग करें, स्वाइप करें, कई टच पॉइंट्स का उपयोग करें, माउस व्हील से स्क्रॉल करें, या टाइप करें। Android बैक के लिए राइट-क्लिक करें या Escape दबाएँ। Tab और Shift+Tab फ़ोकस को स्क्रीन से बाहर ले जाते हैं। इनपुट डिवाइस देखने वाले सभी लोगों द्वारा साझा किया जाता है, टीम मोड में भी। डिफ़ॉल्ट केवल-देखने वाली स्क्रीन बनी रहती है। टेक्स्ट इनपुट scrcpy के Android key injection का उपयोग करता है, इसलिए वर्ण समर्थन डिवाइस के कीबोर्ड मैपिंग पर निर्भर करता है।
`DROIDGROUND_IP_IFACE` पहले सटीक मिलान खोजता है और फिर उस पहले इंटरफ़ेस पर फ़ॉलबैक करता है जो प्रदान किए गए मान से _शुरू होता है_, क्योंकि Docker कंटेनर के भीतर नेटवर्क इंटरफ़ेस **प्रीफ़िक्स** निर्दिष्ट करने की ही अनुमति देता है।
स्क्रीन स्ट्रीमिंग डिफ़ॉल्ट रूप से अधिकतम 1280 पिक्सेल आयाम, 60 fps तक, और 4 Mbps पर होती है ताकि एन्कोडिंग, नेटवर्क, और ब्राउज़र का काम कम हो। यह एम्बेडेड डिवाइस व्यू में प्रतिक्रियाशीलता के लिए कुछ बारीक विवरण का त्याग करता है। पिछली पूर्ण-रिज़ॉल्यूशन गुणवत्ता सेटिंग्स को बहाल करने के लिए `DROIDGROUND_SCRCPY_MAX_SIZE=0` और `DROIDGROUND_SCRCPY_VIDEO_BIT_RATE=10000000` सेट करें। धीमे कनेक्शन या ब्राउज़र के लिए, अधिकतम आकार `1024`, `30` fps, और `2000000` बिट्स प्रति सेकंड आज़माएँ। इन सेटिंग्स को बदलने के बाद DroidGround को पुनः आरंभ करें।
ब्राउज़र उपलब्ध होने पर WebCodecs का उपयोग करता है और अन्यथा सॉफ़्टवेयर H.264 डिकोडर पर फ़ॉलबैक करता है। WebCodecs को सुरक्षित संदर्भ की आवश्यकता होती है: रिमोट परिनियोजन के लिए HTTPS का उपयोग करें (localhost भी काम करता है)। रिमोट IP या होस्टनाम पर सादा HTTP सॉफ़्टवेयर डिकोडिंग का उपयोग करता है। धीमे व्यूअर वीडियो बैकलॉग जमा करने के बजाय एक नए कीफ़्रेम पर छोड़ देते हैं। यदि 1.5 सेकंड के भीतर कोई कीफ़्रेम नहीं आता, तो DroidGround वीडियो रीफ़्रेश का अनुरोध करता है; यह ReDroid के `OMX.google.h264.encoder` जैसे एन्कोडर का समर्थन करता है, जिनके आवधिक I-फ़्रेम ज़रूरी नहीं कि स्वतंत्र रूप से डिकोड करने योग्य IDR फ़्रेम हों। रीफ़्रेश अनुरोध व्यूअर के बीच साझा किए जाते हैं और सभी के लिए स्क्रीन को संक्षेप में रीफ़्रेश कर सकते हैं। सर्वर वीडियो रीफ़्रेश के लिए एक आंतरिक scrcpy नियंत्रण चैनल रखता है; माउस, टच, कीबोर्ड इनपुट, और स्वचालित स्क्रीन वेक-अप `DROIDGROUND_SCRCPY_CONTROL_ENABLED` द्वारा नियंत्रित रहते हैं। अंतर्निहित ब्राउज़र और वीडियो सेटिंग्स के लिए [WebCodecs specification](https://www.w3.org/TR/webcodecs/#videodecoder-interface) और [scrcpy video documentation](https://github.com/Genymobile/scrcpy/blob/master/doc/video.md) देखें।
`DROIDGROUND_NUM_TEAMS` चर का उपयोग अंदरूनी तौर पर एप्लिकेशन के व्यवहार को थोड़ा बदल देता है। यदि यह विकल्प सेट है:
1. एक्सप्लॉइट सर्वर सुविधा सक्षम हो जाती है, जिससे प्रत्येक टीम अपने **_team token_** के माध्यम से अपना (बहुत सरल) एक्सप्लॉइट सर्वर उपयोग कर सकती है।
2. एक्सप्लॉइट ऐप्स को इंस्टॉल और चलाने के लिए team token **आवश्यक** होगा। प्रत्येक इंस्टॉल किया गया ऐप एक टीम से जुड़ा होगा और अन्य टीमें इसे चला नहीं पाएँगी।
यह उन चुनौतियों में एक ही DroidGround इंस्टेंस को कई टीमों के साथ साझा करने की अनुमति देता है जहाँ फ्लैग को नेटवर्क अनुरोध के माध्यम से बाहर निकाला जा सकता है। यह CTF प्रतियोगिताओं के लिए **DroidGround की परिनियोजन लागत को बहुत कम कर देता है**।
इसके अलावा, यदि मान `-1` पर सेट है तो यह तथाकथित **Unlimited Teams** मोड सक्षम करेगा। इस मोड में _Overview_ पृष्ठ पर एक नया **_team token_** उत्पन्न करने का बटन उपलब्ध होगा। यदि यह मोड सक्षम है तो सभी `DROIDGROUND_TEAM_TOKEN_<N>` चरों को अनदेखा कर दिया जाता है।
## 🧩 उपयोग के मामले
DroidGround का उपयोग करने के कुछ तरीके यहाँ दिए गए हैं:
1. **छिपी हुई गतिविधि**: फ्लैग देखने के लिए एक अनएक्सपोज़्ड गतिविधि खोजें और लॉन्च करें (खिलाड़ी के ऐप में एक डमी फ्लैग होता है)।
2. **RCE**: ऐप RCE के प्रति संवेदनशील है और फ्लैग डिवाइस पर संग्रहीत है।
3. **Frida इंस्ट्रुमेंटेशन**: एक स्क्रिप्ट का उपयोग करके एक मेथड को ओवरलोड करें और निजी मेमोरी से फ्लैग निकालें।
## ⚙️ उपयोग
[examples](https://github.com/secforce/droidground/blob/main/examples/apps) फ़ोल्डर में कुछ नमूना _Docker Compose_ फ़ाइलें प्रदान की गई हैं। वे [DroidGround samples repo](https://github.com/SECFORCE/droidground-samples) के ऐप्स का उपयोग करती हैं जिन्हें सभी प्रमुख सुविधाओं को प्रदर्शित करने के लिए उत्तरोत्तर बढ़ाया जाएगा। वे अपना खुद का CTF सेटअप करने का तरीका समझने के लिए भी एक अच्छा प्रारंभिक बिंदु हैं।
बूट पर _DroidGround_ निम्नलिखित करता है:
1. `adb` के साथ कनेक्शन सेट करता है
2. यदि मौजूद हो तो `DROIDGROUND_INIT_SCRIPTS_FOLDER` द्वारा निर्दिष्ट फ़ोल्डर में `setup.sh` चलाता है। इस स्क्रिप्ट का उपयोग लक्ष्य ऐप इंस्टॉल करने और CTF को इनिशियलाइज़ करने के लिए आवश्यक अन्य सब कुछ करने के लिए किया जा सकता है (जैसे फ्लैग को एक ज्ञात स्थान पर रखना)
3. (यदि _Frida_ सक्षम है) इंस्टॉल किए गए संस्करण और डिवाइस की आर्किटेक्चर के आधार पर सही `frida-server` डाउनलोड करता है और उसे शुरू करता है
4. लक्ष्य ऐप चलाता है (वह जो `DROIDGROUND_APP_PACKAGE_NAME` के माध्यम से निर्दिष्ट है)। यदि ऐप इंस्टॉल नहीं है तो _DroidGround_ बाहर निकल जाएगा।
5. _REST APIs_, _WebSocket_ सर्वर, और डिस्प्ले स्ट्रीमिंग सेट करता है
यहाँ एक नमूना `setup.sh` स्क्रिप्ट है:
```sh
#!/usr/bin/env bash
adb shell pm uninstall com.example.app # To do some cleanup
echo "Sleep for 2 seconds before installing app"
sleep 2
echo "Installing app..."
adb install ./flag.apk # The cwd is set to the "init.d" folder, so the apk file can be accessed with the relative path
echo "Install command executed"
```
उत्पादन परिनियोजन के लिए (वास्तविक CTF में) आप पहले से एक पूर्व-निर्धारित संख्या में DroidGround इंस्टेंस प्रोविज़न करना चाह सकते हैं या आप उपयोगकर्ताओं को इंस्टेंस स्पॉन करने की अनुमति देना चाह सकते हैं (एक सीमा के साथ या शायद प्रत्येक टीम/उपयोगकर्ता को एक विशिष्ट इंस्टेंस के साथ संबद्ध करके)। इस कारण से हमने एक सरल [spawner example](https://github.com/secforce/droidground/blob/main/examples/spawner) भी जोड़ा है।
वैकल्पिक रूप से, जैसा कि पहले उल्लेख किया गया है, आप एक चुनौती बना सकते हैं जहाँ फ्लैग को नेटवर्क अनुरोध के माध्यम से बाहर निकाला जा सकता है और कई इंस्टेंस स्पॉन करने से बचने के लिए `DROIDGROUND_NUM_TEAMS` env चर का लाभ उठा सकते हैं (जो महंगा हो सकता है)। [net-multi-step](https://github.com/secforce/droidground/blob/main/examples/apps/net-multi-step) फ़ोल्डर इस प्रकार की चुनौतियों को प्रदान करने का एक अच्छा उदाहरण प्रदान करता है।
## 💡 सुझाव
अपना Android CTF सेटअप करने के लिए यहाँ कुछ सुझाव दिए गए हैं:
- **Frida Full Mode** सक्षम करते समय सावधान रहें, खिलाड़ी का डिवाइस पर पूर्ण नियंत्रण होगा (इसीलिए हमने **Frida Jail Mode** बनाया जैसा कि [Frida Library](https://github.com/secforce/droidground/blob/main/library) में विस्तृत है)।
- **Terminal** सक्षम करते समय सावधान रहें, खिलाड़ी का डिवाइस पर पूर्ण नियंत्रण होगा।
- **Shutdown** सुविधा सक्षम करते समय सावधान रहें।
- यदि आप फ्लैग को सीधे UI में दिखाने की योजना बनाते हैं तो आप अलग-अलग इंस्टेंस स्पॉन करने का तरीका खोजना चाह सकते हैं (प्रत्येक टीम/खिलाड़ी के लिए एक)
उत्पादन में जाने से पहले सेटअप का परीक्षण करते समय लक्ष्य ऐप का **attack surface** प्राप्त करना उपयोगी हो सकता है। यह कुछ ऐसा है जो खिलाड़ियों को नहीं देखना चाहिए क्योंकि attack surface को खोजना और उसका विश्लेषण करना उनका काम है!
इसलिए, `/attackSurface` पर पहुँचने योग्य एक `GET` एंडपॉइंट प्रदान किया गया है और इसे एक टोकन से सुरक्षित किया गया है (जिसे `Authorization` हेडर के मान के रूप में उपयोग करने की आवश्यकता है) जो बूट के दौरान बेतरतीब ढंग से उत्पन्न होता है और लॉग में प्रिंट होता है (इसलिए केवल sysadmins द्वारा सुलभ)।
यदि आप जेल्ड मोड में अपनी खुद की Frida स्क्रिप्ट का उपयोग करना चाहते हैं, तो आपको बस उन्हें शामिल करने वाले फ़ोल्डर को Docker कंटेनर में बाइंड-माउंट करना होगा:
```yaml
volumes:
- <Frida library folder>:/droidground/library
```
उपलब्ध स्क्रिप्ट की सूची पर एप्लिकेशन को निर्देश देने के लिए एक `library.json` फ़ाइल ([library](https://github.com/secforce/droidground/blob/main/library/library.json) में मौजूद फ़ाइल की तरह) आवश्यक है।
## 🛠 विकास
इसे चालू और चलाना बहुत कठिन नहीं होना चाहिए, लेकिन शुरू करने से पहले आपके पास निम्नलिखित टूल इंस्टॉल होने चाहिए:
- `frida` (केवल यदि आप _Frida_ सक्षम करते हैं)
- `node` (यह एक Node ऐप है, आपके पास यह होना चाहिए!)
- `adb` (खैर, डिवाइस से बात करने के लिए हम इस पर निर्भर हैं)
- _JDK_ (कंपैनियन ऐप बनाने के लिए आपको इसकी आवश्यकता है)
उसके बाद आप बस निम्नलिखित चला सकते हैं:
```sh
git clone https://github.com/SECFORCE/droidground.git
cd droidground
# Install without running scripts
npm install --ignore-scripts
# Rebuild frida to get the bindings
npm rebuild frida
# Build companion app
npm run companion
# Get scrcpy
npm run scrcpy
```
उसके बाद आपको बस **env** चर सेट करने होंगे और फिर `npm run dev` चलाना होगा और आप तैयार होंगे। हैप्पी डेव मोड!
## 🤝 योगदान
पुल रिक्वेस्ट का स्वागत है! बड़े बदलावों पर चर्चा करने के लिए कृपया पहले एक इश्यू खोलें। नए CTF वर्कफ़्लो या चुनौती प्रकारों के विचार विशेष रूप से सराहनीय हैं।
## 📚 श्रेय
[Angelo Delicato](https://github.com/thelicato) [@SECFORCE](https://www.secforce.com) द्वारा विकसित।
_server_ अनुभाग [@yume-chan](https://github.com/yume-chan/ya-webadb) द्वारा किए गए अद्भुत काम पर बहुत अधिक निर्भर करता है, शायद उनके अद्भुत काम के बिना यह ऐप मौजूद नहीं होता।
_companion_ ऐप [aya server](