# Drozer Tutorial
{{#include ../../../banners/hacktricks-training.md}}
## APKs to test
- [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (mrwlabs से)
- [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz)
**इस ट्यूटोरियल के कुछ भाग** [**Drozer दस्तावेज़ pdf**](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)** से निकाले गए हैं।**
## Installation
Drozer Client को अपने होस्ट के अंदर इंस्टॉल करें। इसे [latest releases](https://github.com/mwrlabs/drozer/releases) से डाउनलोड करें।
```bash
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
```
drozer APK को [latest releases](https://github.com/mwrlabs/drozer/releases) से डाउनलोड और इंस्टॉल करें। इस समय यह [this](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk) है।
```bash
adb install drozer.apk
```
### सर्वर शुरू करना
एजेंट पोर्ट 31415 पर चल रहा है, हमें [port forward](https://en.wikipedia.org/wiki/Port_forwarding) करना होगा ताकि Drozer Client और Agent के बीच संचार स्थापित किया जा सके, इसे करने के लिए यहां कमांड है:
```bash
adb forward tcp:31415 tcp:31415
```
अंत में, **launch** करें **application** और नीचे "**ON**" दबाएं
.png>)
और इससे कनेक्ट करें:
```bash
drozer console connect
```
## Interesting Commands
| **Commands** | **Description** |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Help MODULE** | चयनित मॉड्यूल की मदद दिखाता है |
| **list** | वर्तमान सत्र में निष्पादित किए जा सकने वाले सभी drozer मॉड्यूल की सूची दिखाता है। यह उन मॉड्यूल को छिपाता है जिनके लिए आपके पास उचित अनुमति नहीं है। |
| **shell** | एजेंट के संदर्भ में डिवाइस पर एक इंटरैक्टिव लिनक्स शेल शुरू करें। |
| **clean** | एंड्रॉइड डिवाइस पर drozer द्वारा संग्रहीत अस्थायी फ़ाइलें हटा दें। |
| **load** | drozer कमांड वाले फ़ाइल को लोड करें और उन्हें अनुक्रम में निष्पादित करें। |
| **module** | इंटरनेट से अतिरिक्त drozer मॉड्यूल खोजें और स्थापित करें। |
| **unset** | एक नामित चर को हटा दें जिसे drozer किसी भी लिनक्स शेल में पास करता है जिसे यह उत्पन्न करता है। |
| **set** | एक मान को एक चर में संग्रहीत करें जिसे drozer द्वारा उत्पन्न किसी भी लिनक्स शेल में पर्यावरणीय चर के रूप में पास किया जाएगा। |
| **shell** | एजेंट के संदर्भ में डिवाइस पर एक इंटरैक्टिव लिनक्स शेल शुरू करें। |
| **run MODULE** | एक drozer मॉड्यूल निष्पादित करें |
| **exploit** | Drozer निर्णय में निष्पादित करने के लिए शोषण बना सकता है। `drozer exploit list` |
| **payload** | शोषण को एक पेलोड की आवश्यकता होती है। `drozer payload list` |
### Package
**नाम** का पता लगाएं जो नाम के भाग द्वारा फ़िल्टर किया गया है:
```bash
dz> run app.package.list -f sieve
com.mwr.example.sieve
```
**पैकेज की मूल जानकारी:**
```bash
dz> run app.package.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
Process Name: com.mwr.example.sieve
Version: 1.0
Data Directory: /data/data/com.mwr.example.sieve
APK Path: /data/app/com.mwr.example.sieve-2.apk
UID: 10056
GID: [1028, 1015, 3003]
Shared Libraries: null
Shared User ID: null
Uses Permissions:
- android.permission.READ_EXTERNAL_STORAGE
- android.permission.WRITE_EXTERNAL_STORAGE
- android.permission.INTERNET
Defines Permissions:
- com.mwr.example.sieve.READ_KEYS
- com.mwr.example.sieve.WRITE_KEYS
```
**मैनिफेस्ट**:
```bash
run app.package.manifest jakhar.aseem.diva
```
**पैकेज की हमले की सतह**:
```bash
dz> run app.package.attacksurface com.mwr.example.sieve
Attack Surface:
3 activities exported
0 broadcast receivers exported
2 content providers exported
2 services exported
is debuggable
```
- **Activities**: शायद आप एक गतिविधि शुरू कर सकते हैं और किसी प्रकार की प्राधिकरण को बायपास कर सकते हैं जो आपको इसे लॉन्च करने से रोकनी चाहिए।
- **Content providers**: शायद आप निजी डेटा तक पहुँच सकते हैं या कुछ कमजोरियों (SQL Injection या Path Traversal) का लाभ उठा सकते हैं।
- **Services**:
- **is debuggable**: [Learn more](#is-debuggeable)
### Activities
एक निर्यातित गतिविधि घटक का “android:exported” मान AndroidManifest.xml फ़ाइल में **“true”** पर सेट किया गया है:
```html
```
**निर्यातित गतिविधियों की सूची**:
```bash
dz> run app.activity.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
com.mwr.example.sieve.FileSelectActivity
com.mwr.example.sieve.MainLoginActivity
com.mwr.example.sieve.PWList
```
**Start activity**:
शायद आप एक गतिविधि शुरू कर सकते हैं और कुछ प्रकार की प्राधिकरण को बायपास कर सकते हैं जो आपको इसे लॉन्च करने से रोकनी चाहिए।
```bash
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
```
आप **adb** से एक निर्यातित गतिविधि भी शुरू कर सकते हैं:
- PackageName com.example.demo है
- Exported ActivityName com.example.test.MainActivity है
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
### सामग्री प्रदाता
यह पोस्ट यहाँ इतनी बड़ी थी कि **आप इसे** [**यहाँ अपनी पृष्ठ पर एक्सेस कर सकते हैं**](exploiting-content-providers.md).
### सेवाएँ
एक निर्यातित सेवा Manifest.xml के अंदर घोषित की जाती है:
```html
```
कोड के अंदर **check** करें **`handleMessage`** फ़ंक्शन के लिए जो **message** को **receive** करेगा:
.png>)
#### सूची सेवा
```bash
dz> run app.service.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
com.mwr.example.sieve.AuthService
Permission: null
com.mwr.example.sieve.CryptoService
Permission: null
```
#### **एक सेवा के साथ इंटरैक्ट करें**
```bash
app.service.send Send a Message to a service, and display the reply
app.service.start Start Service
app.service.stop Stop Service
```
#### उदाहरण
`app.service.send` के लिए **drozer** मदद पर एक नज़र डालें:
.png>)
ध्यान दें कि आप पहले "_msg.what_" के अंदर डेटा भेजेंगे, फिर "_msg.arg1_" और "_msg.arg2_"। आपको कोड के अंदर **यह जांचना चाहिए कि कौन सी जानकारी का उपयोग किया जा रहा है** और कहाँ।\
`--extra` विकल्प का उपयोग करके आप "_msg.replyTo_" द्वारा व्याख्यायित कुछ भेज सकते हैं, और `--bundle-as-obj` का उपयोग करके आप प्रदान की गई जानकारी के साथ एक ऑब्जेक्ट बनाते हैं।
निम्नलिखित उदाहरण में:
- `what == 2354`
- `arg1 == 9234`
- `arg2 == 1`
- `replyTo == object(string com.mwr.example.sieve.PIN 1337)`
```bash
run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --msg 2354 9234 1 --extra string com.mwr.example.sieve.PIN 1337 --bundle-as-obj
```
.png>)
### Broadcast Receivers
**Android के बुनियादी जानकारी अनुभाग में आप देख सकते हैं कि Broadcast Receiver क्या है**।
इन Broadcast Receivers का पता लगाने के बाद आपको **उनका कोड** चेक करना चाहिए। विशेष ध्यान दें **`onReceive`** फ़ंक्शन पर क्योंकि यह प्राप्त संदेशों को संभाल रहा होगा।
#### **सभी** ब्रॉडकास्ट रिसीवर्स का पता लगाएं
```bash
run app.broadcast.info #Detects all
```
#### किसी ऐप के ब्रॉडकास्ट रिसीवर्स की जांच करें
```bash
#Check one negative
run app.broadcast.info -a jakhar.aseem.diva
Package: jakhar.aseem.diva
No matching receivers.
# Check one positive
run app.broadcast.info -a com.google.android.youtube
Package: com.google.android.youtube
com.google.android.libraries.youtube.player.PlayerUiModule$LegacyMediaButtonIntentReceiver
Permission: null
com.google.android.apps.youtube.app.common.notification.GcmBroadcastReceiver
Permission: com.google.android.c2dm.permission.SEND
com.google.android.apps.youtube.app.PackageReplacedReceiver
Permission: null
com.google.android.libraries.youtube.account.AccountsChangedReceiver
Permission: null
com.google.android.apps.youtube.app.application.system.LocaleUpdatedReceiver
Permission: null
```
#### प्रसारण **इंटरैक्शन**
```bash
app.broadcast.info Get information about broadcast receivers
app.broadcast.send Send broadcast using an intent
app.broadcast.sniff Register a broadcast receiver that can sniff particular intents
```
#### संदेश भेजें
इस उदाहरण में [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider का दुरुपयोग करते हुए आप **किसी भी गैर-प्रीमियम गंतव्य पर मनचाहा SMS** **बिना अनुमति** मांगे भेज सकते हैं।
.png>)
.png>)
यदि आप कोड पढ़ते हैं, तो "_phoneNumber_" और "_message_" पैरामीटर Content Provider को भेजे जाने चाहिए।
```bash
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --component org.owasp.goatdroid.fourgoats.broadcastreceivers SendSMSNowReceiver --extra string phoneNumber 123456789 --extra string message "Hello mate!"
```
### Is debuggeable
एक प्रोडक्शन APK कभी भी डिबग करने योग्य नहीं होना चाहिए।\
इसका मतलब है कि आप **जावा डिबगर** को चल रहे एप्लिकेशन से जोड़ सकते हैं, इसे रन टाइम में निरीक्षण कर सकते हैं, ब्रेकपॉइंट सेट कर सकते हैं, कदम से कदम आगे बढ़ सकते हैं, वेरिएबल के मान इकट्ठा कर सकते हैं और यहां तक कि उन्हें बदल भी सकते हैं।[ InfoSec institute has an excellent article](../exploiting-a-debuggeable-applciation.md) जब आपका एप्लिकेशन डिबग करने योग्य होता है और रनटाइम कोड इंजेक्ट करने पर गहराई से खुदाई करने के लिए।
जब एक एप्लिकेशन डिबग करने योग्य होता है, तो यह मैनिफेस्ट में दिखाई देगा:
```xml