mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-21 20:23:18 +00:00
Translated ['mobile-pentesting/android-app-pentesting/android-applicatio
This commit is contained in:
parent
8e3b0c0fab
commit
d2f9e3ed72
1 changed files with 28 additions and 28 deletions
|
@ -20,7 +20,7 @@
|
|||
**Υπάρχουν δύο επίπεδα:**
|
||||
|
||||
* Το **OS**, το οποίο κρατά τις εγκατεστημένες εφαρμογές απομονωμένες η μία από την άλλη.
|
||||
* Η **εφαρμογή αυτή καθαυτή**, η οποία επιτρέπει στους προγραμματιστές να **εκθέτουν ορισμένες λειτουργίες** και να ρυθμίζουν τις δυνατότητες της εφαρμογής.
|
||||
* Η **εφαρμογή αυτή καθαυτή**, η οποία επιτρέπει στους προγραμματιστές να **εκθέτουν ορισμένες λειτουργίες** και ρυθμίζει τις δυνατότητες της εφαρμογής.
|
||||
|
||||
### Διαχωρισμός UID
|
||||
|
||||
|
@ -33,7 +33,7 @@
|
|||
|
||||
### Sandbox
|
||||
|
||||
Ο **Sandbox Εφαρμογών Android** επιτρέπει να εκτελούνται **κάθε εφαρμογή** ως **ξεχωριστή διαδικασία υπό μια ξεχωριστή Ταυτότητα Χρήστη**. Κάθε διαδικασία έχει τη δική της εικονική μηχανή, έτσι ο κώδικας μιας εφαρμογής εκτελείται σε απομόνωση από άλλες εφαρμογές.\
|
||||
Η **Sandbox Εφαρμογών Android** επιτρέπει την εκτέλεση **κάθε εφαρμογής** ως **ξεχωριστή διαδικασία υπό μια ξεχωριστή Ταυτότητα Χρήστη**. Κάθε διαδικασία έχει τη δική της εικονική μηχανή, έτσι ο κώδικας μιας εφαρμογής εκτελείται σε απομόνωση από άλλες εφαρμογές.\
|
||||
Από το Android 5.0(L) **επιβάλλεται το SELinux**. Βασικά, το SELinux αρνείται όλες τις αλληλεπιδράσεις διαδικασιών και στη συνέχεια δημιουργεί πολιτικές για **να επιτρέπει μόνο τις αναμενόμενες αλληλεπιδράσεις μεταξύ τους**.
|
||||
|
||||
### Άδειες
|
||||
|
@ -50,14 +50,14 @@
|
|||
* **Normal**: Χρησιμοποιείται όταν δεν υπάρχουν **γνωστές απειλές** για την εφαρμογή. Ο χρήστης **δεν απαιτείται να την εγκρίνει**.
|
||||
* **Dangerous**: Υποδεικνύει ότι η άδεια παρέχει στην αιτούμενη εφαρμογή κάποια **υψηλή πρόσβαση**. **Οι χρήστες ζητούνται να τις εγκρίνουν**.
|
||||
* **Signature**: Μόνο **εφαρμογές που υπογράφονται με το ίδιο πιστοποιητικό με αυτό που εξάγει το στοιχείο** μπορούν να λάβουν άδεια. Αυτός είναι ο ισχυρότερος τύπος προστασίας.
|
||||
* **SignatureOrSystem**: Μόνο **εφαρμογές που υπογράφονται με το ίδιο πιστοποιητικό με αυτό που εξάγει το στοιχείο** ή **εφαρμογές που εκτελούνται με πρόσβαση επιπέδου συστήματος** μπορούν να λάβουν άδειες.
|
||||
* **SignatureOrSystem**: Μόνο **εφαρμογές που υπογράφονται με το ίδιο πιστοποιητικό με αυτό που εξάγει το στοιχείο ή **εφαρμογές που εκτελούνται με πρόσβαση σε επίπεδο συστήματος** μπορούν να λάβουν άδειες.
|
||||
|
||||
## Προεγκατεστημένες Εφαρμογές
|
||||
|
||||
Αυτές οι εφαρμογές βρίσκονται γενικά στους καταλόγους **`/system/app`** ή **`/system/priv-app`** και μερικές από αυτές είναι **βελτιστοποιημένες** (μπορεί να μην βρείτε καν το αρχείο `classes.dex`). Αυτές οι εφαρμογές αξίζουν να ελεγχθούν γιατί μερικές φορές εκτελούνται **με πάρα πολλές άδειες** (ως root).
|
||||
|
||||
* Αυτές που αποστέλλονται με το **AOSP** (Android OpenSource Project) **ROM**
|
||||
* Προστέθηκαν από τον **κατασκευαστή** της συσκευής
|
||||
* Προστέθηκαν από τον **κατασκευαστή της συσκευής**
|
||||
* Προστέθηκαν από τον **πάροχο κινητής τηλεφωνίας** (αν αγοράστηκαν από αυτούς)
|
||||
|
||||
## Rooting
|
||||
|
@ -68,12 +68,12 @@
|
|||
Αφού ρυθμιστεί το δυαδικό su, χρησιμοποιείται μια άλλη εφαρμογή Android για να αλληλεπιδράσει με το δυαδικό `su` και να **επεξεργαστεί αιτήματα για πρόσβαση root** όπως **Superuser** και **SuperSU** (διαθέσιμα στο Google Play store).
|
||||
|
||||
{% hint style="danger" %}
|
||||
Σημειώστε ότι η διαδικασία rooting είναι πολύ επικίνδυνη και μπορεί να προκαλέσει σοβαρή ζημιά στη συσκευή
|
||||
Σημειώστε ότι η διαδικασία rooting είναι πολύ επικίνδυνη και μπορεί να προκαλέσει σοβαρή ζημιά στη συσκευή.
|
||||
{% endhint %}
|
||||
|
||||
### ROMs
|
||||
|
||||
Είναι δυνατόν να **αντικαταστήσετε το OS εγκαθιστώντας ένα προσαρμοσμένο firmware**. Κάνοντας αυτό, είναι δυνατό να επεκτείνετε τη χρησιμότητα μιας παλιάς συσκευής, να παρακάμψετε περιορισμούς λογισμικού ή να αποκτήσετε πρόσβαση στον τελευταίο κώδικα Android.\
|
||||
Είναι δυνατόν να **αντικαταστήσετε το OS εγκαθιστώντας ένα προσαρμοσμένο firmware**. Κάνοντας αυτό είναι δυνατό να επεκτείνετε τη χρησιμότητα μιας παλιάς συσκευής, να παρακάμψετε περιορισμούς λογισμικού ή να αποκτήσετε πρόσβαση στον τελευταίο κώδικα Android.\
|
||||
**OmniROM** και **LineageOS** είναι δύο από τα πιο δημοφιλή firmware που χρησιμοποιούνται.
|
||||
|
||||
Σημειώστε ότι **δεν είναι πάντα απαραίτητο να κάνετε root τη συσκευή** για να εγκαταστήσετε ένα προσαρμοσμένο firmware. **Ορισμένοι κατασκευαστές επιτρέπουν** την ξεκλείδωσή των bootloaders τους με καλά τεκμηριωμένο και ασφαλή τρόπο.
|
||||
|
@ -88,7 +88,7 @@
|
|||
- Περιεχόμενα APK (Όχι εξαντλητικά)
|
||||
- **AndroidManifest.xml**
|
||||
- resources.arsc/strings.xml
|
||||
- resources.arsc: περιέχει προcompiled resources, όπως δυαδικό XML.
|
||||
- resources.arsc: περιέχει προcompiled resources, όπως το binary XML.
|
||||
- res/xml/files\_paths.xml
|
||||
- META-INF/
|
||||
- Εδώ βρίσκεται το Πιστοποιητικό!
|
||||
|
@ -101,9 +101,9 @@
|
|||
- `x86`: κώδικας για επεξεργαστές X86
|
||||
- `mips`: κώδικας μόνο για επεξεργαστές MIPS
|
||||
- assets/
|
||||
- Αποθηκεύει διάφορα αρχεία που χρειάζεται η εφαρμογή, πιθανώς περιλαμβάνοντας επιπλέον εγγενείς βιβλιοθήκες ή αρχεία DEX, που μερικές φορές χρησιμοποιούνται από συγγραφείς κακόβουλου λογισμικού για να αποκρύψουν επιπλέον κώδικα.
|
||||
- Αποθηκεύει διάφορα αρχεία που χρειάζεται η εφαρμογή, ενδεχομένως περιλαμβάνοντας επιπλέον εγγενείς βιβλιοθήκες ή αρχεία DEX, που μερικές φορές χρησιμοποιούνται από συγγραφείς κακόβουλου λογισμικού για να αποκρύψουν επιπλέον κώδικα.
|
||||
- res/
|
||||
- Περιέχει πόρους που δεν έχουν μεταγλωττιστεί σε resources.arsc
|
||||
- Περιέχει πόρους που δεν έχουν μεταγλωττιστεί σε resources.arsc.
|
||||
|
||||
### **Dalvik & Smali**
|
||||
|
||||
|
@ -124,15 +124,15 @@
|
|||
* Για να αποκτήσει πρόσβαση σε δεδομένα μέσω ContentProviders
|
||||
* Ως callbacks για να χειριστεί γεγονότα
|
||||
|
||||
Αν είναι ευάλωτα, **τα Intents μπορούν να χρησιμοποιηθούν για να εκτελέσουν μια ποικιλία επιθέσεων**.
|
||||
Αν είναι ευάλωτα, **τα Intents μπορούν να χρησιμοποιηθούν για την εκτέλεση ποικιλίας επιθέσεων**.
|
||||
|
||||
### Intent-Filter
|
||||
|
||||
**Τα Intent Filters** καθορίζουν **πώς μια δραστηριότητα, υπηρεσία ή Broadcast Receiver μπορεί να αλληλεπιδράσει με διάφορους τύπους Intents**. Βασικά, περιγράφουν τις δυνατότητες αυτών των στοιχείων, όπως ποιες ενέργειες μπορούν να εκτελούν ή τους τύπους broadcasts που μπορούν να επεξεργαστούν. Ο κύριος χώρος για να δηλωθούν αυτά τα φίλτρα είναι μέσα στο **AndroidManifest.xml αρχείο**, αν και για τους Broadcast Receivers, η κωδικοποίησή τους είναι επίσης μια επιλογή.
|
||||
**Τα Intent Filters** καθορίζουν **πώς μια δραστηριότητα, υπηρεσία ή Broadcast Receiver μπορεί να αλληλεπιδράσει με διάφορους τύπους Intents**. Βασικά, περιγράφουν τις δυνατότητες αυτών των στοιχείων, όπως ποιες ενέργειες μπορούν να εκτελέσουν ή τους τύπους broadcasts που μπορούν να επεξεργαστούν. Ο κύριος χώρος για να δηλωθούν αυτά τα φίλτρα είναι μέσα στο **AndroidManifest.xml αρχείο**, αν και για τους Broadcast Receivers, η κωδικοποίησή τους είναι επίσης μια επιλογή.
|
||||
|
||||
Τα Intent Filters αποτελούνται από κατηγορίες, ενέργειες και φίλτρα δεδομένων, με τη δυνατότητα να περιλαμβάνουν επιπλέον μεταδεδομένα. Αυτή η ρύθμιση επιτρέπει στα στοιχεία να χειρίζονται συγκεκριμένα Intents που ταιριάζουν με τα δηλωμένα κριτήρια.
|
||||
|
||||
Μια κρίσιμη πτυχή των στοιχείων Android (δραστηριότητες/υπηρεσίες/content providers/broadcast receivers) είναι η ορατότητά τους ή η **δημόσια κατάσταση**. Ένα στοιχείο θεωρείται δημόσιο και μπορεί να αλληλεπιδράσει με άλλες εφαρμογές αν είναι **`exported`** με τιμή **`true`** ή αν έχει δηλωθεί ένα Intent Filter γι' αυτό στο μανιφέστο. Ωστόσο, υπάρχει τρόπος για τους προγραμματιστές να κρατήσουν αυτά τα στοιχεία ιδιωτικά, διασφαλίζοντας ότι δεν αλληλεπιδρούν με άλλες εφαρμογές κατά λάθος. Αυτό επιτυγχάνεται ρυθμίζοντας το **`exported`** attribute σε **`false`** στις δηλώσεις του μανιφέστου τους.
|
||||
Μια κρίσιμη πτυχή των στοιχείων Android (δραστηριότητες/υπηρεσίες/content providers/broadcast receivers) είναι η ορατότητά τους ή η **δημόσια κατάσταση**. Ένα στοιχείο θεωρείται δημόσιο και μπορεί να αλληλεπιδράσει με άλλες εφαρμογές αν είναι **`exported`** με τιμή **`true`** ή αν έχει δηλωθεί ένα Intent Filter γι' αυτό στο μανιφέστο. Ωστόσο, υπάρχει τρόπος για τους προγραμματιστές να κρατήσουν αυτά τα στοιχεία ιδιωτικά, διασφαλίζοντας ότι δεν αλληλεπιδρούν με άλλες εφαρμογές κατά λάθος. Αυτό επιτυγχάνεται ρυθμίζοντας το **`exported`** attribute σε **`false`** στις δηλώσεις μανιφέστου τους.
|
||||
|
||||
Επιπλέον, οι προγραμματιστές έχουν τη δυνατότητα να ασφαλίσουν περαιτέρω την πρόσβαση σε αυτά τα στοιχεία απαιτώντας συγκεκριμένες άδειες. Το **`permission`** attribute μπορεί να ρυθμιστεί ώστε να επιβάλλει ότι μόνο οι εφαρμογές με την καθορισμένη άδεια μπορούν να έχουν πρόσβαση στο στοιχείο, προσθέτοντας ένα επιπλέον επίπεδο ασφάλειας και ελέγχου σχετικά με το ποιος μπορεί να αλληλεπιδράσει με αυτό.
|
||||
```java
|
||||
|
@ -159,11 +159,11 @@ Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
|||
```
|
||||
Ένα intent-filter πρέπει να ταιριάζει με την **ενέργεια**, **δεδομένα** και **κατηγορία** για να λάβει ένα μήνυμα.
|
||||
|
||||
Η διαδικασία "επίλυσης Intent" καθορίζει ποια εφαρμογή θα λάβει κάθε μήνυμα. Αυτή η διαδικασία εξετάζει το **χαρακτηριστικό προτεραιότητας**, το οποίο μπορεί να οριστεί στην **δήλωση intent-filter**, και **αυτή με την υψηλότερη προτεραιότητα θα επιλεγεί**. Αυτή η προτεραιότητα μπορεί να οριστεί μεταξύ -1000 και 1000 και οι εφαρμογές μπορούν να χρησιμοποιήσουν την τιμή `SYSTEM_HIGH_PRIORITY`. Εάν προκύψει μια **σύγκρουση**, εμφανίζεται ένα παράθυρο "επιλογής" ώστε ο **χρήστης να αποφασίσει**.
|
||||
Η διαδικασία "Επίλυσης Intent" καθορίζει ποια εφαρμογή θα λάβει κάθε μήνυμα. Αυτή η διαδικασία εξετάζει το **χαρακτηριστικό προτεραιότητας**, το οποίο μπορεί να οριστεί στην **δήλωση intent-filter**, και **αυτό με την υψηλότερη προτεραιότητα θα επιλεγεί**. Αυτή η προτεραιότητα μπορεί να οριστεί μεταξύ -1000 και 1000 και οι εφαρμογές μπορούν να χρησιμοποιήσουν την τιμή `SYSTEM_HIGH_PRIORITY`. Εάν προκύψει μια **σύγκρουση**, εμφανίζεται ένα παράθυρο "επιλογής" ώστε ο **χρήστης να αποφασίσει**.
|
||||
|
||||
### Ρητές Intents
|
||||
|
||||
Μια ρητή πρόθεση καθορίζει το όνομα της κλάσης που στοχεύει:
|
||||
Ένα ρητό intent καθορίζει το όνομα της κλάσης που στοχεύει:
|
||||
```java
|
||||
Intent downloadIntent = new (this, DownloadService.class):
|
||||
```
|
||||
|
@ -212,7 +212,7 @@ context.startService(intent);
|
|||
</intent-filter>
|
||||
[...]
|
||||
```
|
||||
Το σχήμα από το προηγούμενο παράδειγμα είναι `exampleapp://` (σημειώστε επίσης το **`category BROWSABLE`**)
|
||||
Το σχήμα από το προηγούμενο παράδειγμα είναι `examplescheme://` (σημειώστε επίσης το **`category BROWSABLE`**)
|
||||
|
||||
Στη συνέχεια, στο πεδίο δεδομένων, μπορείτε να καθορίσετε τον **host** και τη **διαδρομή**:
|
||||
```xml
|
||||
|
@ -225,7 +225,7 @@ android:host="example"
|
|||
<a href="examplescheme://example/something">click here</a>
|
||||
<a href="examplescheme://example/javascript://%250dalert(1)">click here</a>
|
||||
```
|
||||
Για να βρείτε τον **κώδικα που θα εκτελείται στην Εφαρμογή**, μεταβείτε στην δραστηριότητα που καλείται από το deeplink και αναζητήστε τη συνάρτηση **`onNewIntent`**.
|
||||
Για να βρείτε τον **κώδικα που θα εκτελείται στην Εφαρμογή**, πηγαίνετε στην δραστηριότητα που καλείται από το deeplink και αναζητήστε τη συνάρτηση **`onNewIntent`**.
|
||||
|
||||
Μάθετε πώς να [καλείτε deep links χωρίς να χρησιμοποιείτε σελίδες HTML](./#exploiting-schemes-deep-links).
|
||||
|
||||
|
@ -235,7 +235,7 @@ android:host="example"
|
|||
|
||||
### Βασικές Έννοιες
|
||||
|
||||
- **Δεσμευμένες Υπηρεσίες**: Αυτές οι υπηρεσίες χρησιμοποιούν την AIDL για IPC, επιτρέποντας σε δραστηριότητες ή συστατικά να συνδεθούν με μια υπηρεσία, να κάνουν αιτήματα και να λαμβάνουν απαντήσεις. Η μέθοδος `onBind` στην κλάση της υπηρεσίας είναι κρίσιμη για την έναρξη της αλληλεπίδρασης, καθιστώντας την μια ζωτική περιοχή για ανασκόπηση ασφαλείας στην αναζήτηση ευπαθειών.
|
||||
- **Δεσμευμένες Υπηρεσίες**: Αυτές οι υπηρεσίες χρησιμοποιούν AIDL για IPC, επιτρέποντας σε δραστηριότητες ή συστατικά να συνδεθούν με μια υπηρεσία, να κάνουν αιτήματα και να λαμβάνουν απαντήσεις. Η μέθοδος `onBind` στην κλάση της υπηρεσίας είναι κρίσιμη για την έναρξη της αλληλεπίδρασης, καθιστώντας την μια ζωτική περιοχή για ανασκόπηση ασφαλείας στην αναζήτηση ευπαθειών.
|
||||
|
||||
- **Messenger**: Λειτουργώντας ως δεσμευμένη υπηρεσία, ο Messenger διευκολύνει την IPC με έμφαση στην επεξεργασία δεδομένων μέσω της μεθόδου `onBind`. Είναι απαραίτητο να εξετάσετε αυτή τη μέθοδο προσεκτικά για οποιαδήποτε μη ασφαλή διαχείριση δεδομένων ή εκτέλεση ευαίσθητων λειτουργιών.
|
||||
|
||||
|
@ -243,7 +243,7 @@ android:host="example"
|
|||
|
||||
## Συστατικά
|
||||
|
||||
Αυτά περιλαμβάνουν: **Δραστηριότητες, Υπηρεσίες, Δέκτες Εκπομπών και Παρόχους.**
|
||||
Αυτά περιλαμβάνουν: **Δραστηριότητες, Υπηρεσίες, Δέκτες Εκπομπών και Παροχείς.**
|
||||
|
||||
### Δραστηριότητα Εκκίνησης και άλλες δραστηριότητες
|
||||
|
||||
|
@ -264,13 +264,13 @@ android:host="example"
|
|||
```markdown
|
||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||
```
|
||||
Ωστόσο, η πρόσβαση σε μια δραστηριότητα από άλλη εφαρμογή δεν είναι πάντα κίνδυνος ασφαλείας. Η ανησυχία προκύπτει αν ευαίσθητα δεδομένα μοιράζονται ακατάλληλα, κάτι που θα μπορούσε να οδηγήσει σε διαρροές πληροφοριών.
|
||||
Ωστόσο, η πρόσβαση σε μια δραστηριότητα από μια άλλη εφαρμογή δεν είναι πάντα κίνδυνος ασφαλείας. Η ανησυχία προκύπτει αν ευαίσθητα δεδομένα μοιράζονται ακατάλληλα, κάτι που θα μπορούσε να οδηγήσει σε διαρροές πληροφοριών.
|
||||
|
||||
Ο κύκλος ζωής μιας δραστηριότητας **ξεκινά με τη μέθοδο onCreate**, ρυθμίζοντας το UI και προετοιμάζοντας τη δραστηριότητα για αλληλεπίδραση με τον χρήστη.
|
||||
|
||||
### Υποκλάση Εφαρμογής
|
||||
|
||||
Στην ανάπτυξη Android, μια εφαρμογή έχει την επιλογή να δημιουργήσει μια **υποκλάση** της [Application](https://developer.android.com/reference/android/app/Application) κλάσης, αν και δεν είναι υποχρεωτικό. Όταν οριστεί μια τέτοια υποκλάση, γίνεται η πρώτη κλάση που θα δημιουργηθεί μέσα στην εφαρμογή. Η μέθοδος **`attachBaseContext`**, αν υλοποιηθεί σε αυτή την υποκλάση, εκτελείται πριν από τη μέθοδο **`onCreate`**. Αυτή η ρύθμιση επιτρέπει την πρώιμη αρχικοποίηση πριν ξεκινήσει το υπόλοιπο της εφαρμογής.
|
||||
Στην ανάπτυξη Android, μια εφαρμογή έχει την επιλογή να δημιουργήσει μια **υποκλάση** της κλάσης [Application](https://developer.android.com/reference/android/app/Application), αν και δεν είναι υποχρεωτικό. Όταν οριστεί μια τέτοια υποκλάση, γίνεται η πρώτη κλάση που θα δημιουργηθεί μέσα στην εφαρμογή. Η μέθοδος **`attachBaseContext`**, αν υλοποιηθεί σε αυτή την υποκλάση, εκτελείται πριν από τη μέθοδο **`onCreate`**. Αυτή η ρύθμιση επιτρέπει την πρώιμη αρχικοποίηση πριν ξεκινήσει το υπόλοιπο της εφαρμογής.
|
||||
```java
|
||||
public class MyApp extends Application {
|
||||
@Override
|
||||
|
@ -290,9 +290,9 @@ super.onCreate();
|
|||
|
||||
[Υπηρεσίες](https://developer.android.com/guide/components/services) είναι **λειτουργίες παρασκηνίου** ικανές να εκτελούν εργασίες χωρίς διεπαφή χρήστη. Αυτές οι εργασίες μπορούν να συνεχίσουν να εκτελούνται ακόμη και όταν οι χρήστες αλλάζουν σε διαφορετικές εφαρμογές, καθιστώντας τις υπηρεσίες κρίσιμες για **μακροχρόνιες λειτουργίες**.
|
||||
|
||||
Οι υπηρεσίες είναι ευέλικτες; μπορούν να ξεκινήσουν με διάφορους τρόπους, με τις **Intents** να είναι η κύρια μέθοδος για την εκκίνηση τους ως σημείο εισόδου μιας εφαρμογής. Μόλις ξεκινήσει μια υπηρεσία χρησιμοποιώντας τη μέθοδο `startService`, η μέθοδος `onStart` ενεργοποιείται και συνεχίζει να εκτελείται μέχρι να κληθεί ρητά η μέθοδος `stopService`. Εναλλακτικά, εάν ο ρόλος μιας υπηρεσίας εξαρτάται από μια ενεργή σύνδεση πελάτη, χρησιμοποιείται η μέθοδος `bindService` για τη σύνδεση του πελάτη με την υπηρεσία, ενεργοποιώντας τη μέθοδο `onBind` για τη μεταφορά δεδομένων.
|
||||
Οι υπηρεσίες είναι ευέλικτες; μπορούν να ξεκινήσουν με διάφορους τρόπους, με τις **Intents** να είναι η κύρια μέθοδος για την εκκίνηση τους ως σημείο εισόδου μιας εφαρμογής. Μόλις ξεκινήσει μια υπηρεσία χρησιμοποιώντας τη μέθοδο `startService`, η μέθοδος `onStart` ενεργοποιείται και συνεχίζει να εκτελείται μέχρι να κληθεί ρητά η μέθοδος `stopService`. Εναλλακτικά, αν ο ρόλος μιας υπηρεσίας εξαρτάται από μια ενεργή σύνδεση πελάτη, χρησιμοποιείται η μέθοδος `bindService` για τη σύνδεση του πελάτη με την υπηρεσία, ενεργοποιώντας τη μέθοδο `onBind` για τη μεταφορά δεδομένων.
|
||||
|
||||
Μια ενδιαφέρουσα εφαρμογή των υπηρεσιών περιλαμβάνει την αναπαραγωγή μουσικής παρασκηνίου ή την ανάκτηση δεδομένων δικτύου χωρίς να εμποδίζεται η αλληλεπίδραση του χρήστη με μια εφαρμογή. Επιπλέον, οι υπηρεσίες μπορούν να γίνουν προσβάσιμες σε άλλες διεργασίες στην ίδια συσκευή μέσω **εξαγωγής**. Αυτή δεν είναι η προεπιλεγμένη συμπεριφορά και απαιτεί ρητή ρύθμιση στο αρχείο Android Manifest:
|
||||
Μια ενδιαφέρουσα εφαρμογή των υπηρεσιών περιλαμβάνει την αναπαραγωγή μουσικής παρασκηνίου ή την ανάκτηση δεδομένων δικτύου χωρίς να εμποδίζεται η αλληλεπίδραση του χρήστη με μια εφαρμογή. Επιπλέον, οι υπηρεσίες μπορούν να γίνουν προσβάσιμες σε άλλες διεργασίες στην ίδια συσκευή μέσω **εξαγωγής**. Αυτό δεν είναι η προεπιλεγμένη συμπεριφορά και απαιτεί ρητή ρύθμιση στο αρχείο Android Manifest:
|
||||
```xml
|
||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||
```
|
||||
|
@ -300,21 +300,21 @@ super.onCreate();
|
|||
|
||||
**Broadcast receivers** δρουν ως ακροατές σε ένα σύστημα μηνυμάτων, επιτρέποντας σε πολλές εφαρμογές να ανταποκριθούν στα ίδια μηνύματα από το σύστημα. Μια εφαρμογή μπορεί να **καταχωρήσει έναν δέκτη** με **δύο κύριους τρόπους**: μέσω του **Manifest** της εφαρμογής ή **δυναμικά** μέσα στον κώδικα της εφαρμογής μέσω του **`registerReceiver`** API. Στο Manifest, οι εκπομπές φιλτράρονται με άδειες, ενώ οι δυναμικά καταχωρημένοι δέκτες μπορούν επίσης να καθορίσουν άδειες κατά την καταχώρηση.
|
||||
|
||||
**Intent filters** είναι κρίσιμης σημασίας και για τις δύο μεθόδους καταχώρησης, καθορίζοντας ποιες εκπομπές ενεργοποιούν τον δέκτη. Μόλις σταλεί μια αντίστοιχη εκπομπή, η μέθοδος **`onReceive`** του δέκτη καλείται, επιτρέποντας στην εφαρμογή να αντιδράσει αναλόγως, όπως η προσαρμογή της συμπεριφοράς σε απάντηση σε μια ειδοποίηση χαμηλής μπαταρίας.
|
||||
**Intent filters** είναι κρίσιμα και στις δύο μεθόδους καταχώρησης, καθορίζοντας ποιες εκπομπές ενεργοποιούν τον δέκτη. Μόλις σταλεί μια αντίστοιχη εκπομπή, η μέθοδος **`onReceive`** του δέκτη καλείται, επιτρέποντας στην εφαρμογή να αντιδράσει αναλόγως, όπως η προσαρμογή της συμπεριφοράς σε απάντηση σε μια ειδοποίηση χαμηλής μπαταρίας.
|
||||
|
||||
Οι εκπομπές μπορεί να είναι είτε **ασύγχρονες**, φτάνοντας σε όλους τους δέκτες χωρίς σειρά, είτε **σύγχρονες**, όπου οι δέκτες λαμβάνουν την εκπομπή με βάση καθορισμένες προτεραιότητες. Ωστόσο, είναι σημαντικό να σημειωθεί ο πιθανός κίνδυνος ασφαλείας, καθώς οποιαδήποτε εφαρμογή μπορεί να δώσει προτεραιότητα στον εαυτό της για να παρεμποδίσει μια εκπομπή.
|
||||
Οι εκπομπές μπορεί να είναι είτε **ασύγχρονες**, φτάνοντας σε όλους τους δέκτες χωρίς σειρά, είτε **συγχρονισμένες**, όπου οι δέκτες λαμβάνουν την εκπομπή με βάση καθορισμένες προτεραιότητες. Ωστόσο, είναι σημαντικό να σημειωθεί ο πιθανός κίνδυνος ασφαλείας, καθώς οποιαδήποτε εφαρμογή μπορεί να δώσει προτεραιότητα στον εαυτό της για να παρεμποδίσει μια εκπομπή.
|
||||
|
||||
Για να κατανοήσετε τη λειτουργικότητα ενός δέκτη, αναζητήστε τη μέθοδο **`onReceive`** μέσα στην κλάση του. Ο κώδικας αυτής της μεθόδου μπορεί να χειριστεί το ληφθέν Intent, υπογραμμίζοντας την ανάγκη για επικύρωση δεδομένων από τους δέκτες, ειδικά σε **Ordered Broadcasts**, οι οποίες μπορούν να τροποποιήσουν ή να απορρίψουν το Intent.
|
||||
|
||||
### Content Provider
|
||||
|
||||
**Content Providers** είναι απαραίτητοι για **την κοινή χρήση δομημένων δεδομένων** μεταξύ εφαρμογών, τονίζοντας τη σημασία της εφαρμογής **αδειών** για την εξασφάλιση της ασφάλειας των δεδομένων. Επιτρέπουν στις εφαρμογές να έχουν πρόσβαση σε δεδομένα από διάφορες πηγές, συμπεριλαμβανομένων βάσεων δεδομένων, συστημάτων αρχείων ή του διαδικτύου. Συγκεκριμένες άδειες, όπως **`readPermission`** και **`writePermission`**, είναι κρίσιμες για τον έλεγχο της πρόσβασης. Επιπλέον, προσωρινή πρόσβαση μπορεί να παραχωρηθεί μέσω ρυθμίσεων **`grantUriPermission`** στο manifest της εφαρμογής, αξιοποιώντας χαρακτηριστικά όπως `path`, `pathPrefix` και `pathPattern` για λεπτομερή έλεγχο πρόσβασης.
|
||||
**Content Providers** είναι απαραίτητοι για **την κοινή χρήση δομημένων δεδομένων** μεταξύ εφαρμογών, τονίζοντας τη σημασία της εφαρμογής **αδειών** για την εξασφάλιση της ασφάλειας των δεδομένων. Επιτρέπουν στις εφαρμογές να έχουν πρόσβαση σε δεδομένα από διάφορες πηγές, συμπεριλαμβανομένων βάσεων δεδομένων, συστημάτων αρχείων ή του διαδικτύου. Συγκεκριμένες άδειες, όπως **`readPermission`** και **`writePermission`**, είναι κρίσιμες για τον έλεγχο της πρόσβασης. Επιπλέον, προσωρινή πρόσβαση μπορεί να παραχωρηθεί μέσω ρυθμίσεων **`grantUriPermission`** στο manifest της εφαρμογής, εκμεταλλευόμενη χαρακτηριστικά όπως `path`, `pathPrefix` και `pathPattern` για λεπτομερή έλεγχο πρόσβασης.
|
||||
|
||||
Η επικύρωση εισόδου είναι πρωταρχικής σημασίας για την αποφυγή ευπαθειών, όπως η SQL injection. Οι Content Providers υποστηρίζουν βασικές λειτουργίες: `insert()`, `update()`, `delete()`, και `query()`, διευκολύνοντας τη χειρισμό και την κοινή χρήση δεδομένων μεταξύ εφαρμογών.
|
||||
|
||||
**FileProvider**, ένας εξειδικευμένος Content Provider, επικεντρώνεται στην ασφαλή κοινή χρήση αρχείων. Ορίζεται στο manifest της εφαρμογής με συγκεκριμένα χαρακτηριστικά για τον έλεγχο της πρόσβασης σε φακέλους, που δηλώνονται με `android:exported` και `android:resource` που δείχνουν στις ρυθμίσεις φακέλων. Συνιστάται προσοχή κατά την κοινή χρήση καταλόγων για να αποφευχθεί η τυχαία έκθεση ευαίσθητων δεδομένων.
|
||||
**FileProvider**, ένας εξειδικευμένος Content Provider, επικεντρώνεται στην ασφαλή κοινή χρήση αρχείων. Ορίζεται στο manifest της εφαρμογής με συγκεκριμένα χαρακτηριστικά για τον έλεγχο πρόσβασης σε φακέλους, που δηλώνονται με `android:exported` και `android:resource` που δείχνουν στις ρυθμίσεις φακέλων. Συνιστάται προσοχή κατά την κοινή χρήση καταλόγων για να αποφευχθεί η τυχαία έκθεση ευαίσθητων δεδομένων.
|
||||
|
||||
Παράδειγμα δήλωσης manifest για FileProvider:
|
||||
Example manifest declaration for FileProvider:
|
||||
```xml
|
||||
<provider android:name="androidx.core.content.FileProvider"
|
||||
android:authorities="com.example.myapp.fileprovider"
|
||||
|
@ -362,7 +362,7 @@ android:resource="@xml/filepaths" />
|
|||
|
||||
### **Επαλήθευση Εφαρμογών για Αυξημένη Ασφάλεια**
|
||||
|
||||
- Ξεκινώντας από την **Android 4.2**, μια δυνατότητα που ονομάζεται **Verify Apps** επιτρέπει στους χρήστες να ελέγχουν τις εφαρμογές για ασφάλεια πριν από την εγκατάσταση. Αυτή η **διαδικασία επαλήθευσης** μπορεί να προειδοποιήσει τους χρήστες για πιθανώς επιβλαβείς εφαρμογές ή ακόμη και να αποτρέψει την εγκατάσταση ιδιαίτερα κακόβουλων, ενισχύοντας την ασφάλεια των χρηστών.
|
||||
- Ξεκινώντας από την **Android 4.2**, μια δυνατότητα που ονομάζεται **Verify Apps** επιτρέπει στους χρήστες να ελέγχουν τις εφαρμογές για ασφάλεια πριν από την εγκατάσταση. Αυτή η **διαδικασία επαλήθευσης** μπορεί να προειδοποιήσει τους χρήστες για πιθανώς επιβλαβείς εφαρμογές ή ακόμη και να αποτρέψει την εγκατάσταση ιδιαίτερα κακόβουλων, ενισχύοντας την ασφάλεια του χρήστη.
|
||||
|
||||
### **Διαχείριση Κινητών Συσκευών (MDM)**
|
||||
|
||||
|
|
Loading…
Reference in a new issue