Pentesting Εφαρμογών Android
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Βασικά για Εφαρμογές Android
Συνιστάται ανεπιφύλακτα να ξεκινήσετε διαβάζοντας αυτή τη σελίδα για να μάθετε σχετικά με τα πιο σημαντικά μέρη που σχετίζονται με την ασφάλεια Android και τα πιο επικίνδυνα components σε μια εφαρμογή Android:
ADB (Android Debug Bridge)
Αυτή είναι η κύρια εργαλειοθήκη που χρειάζεστε για να συνδεθείτε με μια android συσκευή (εξομοιωμένη ή φυσική).
ADB επιτρέπει τον έλεγχο των συσκευών είτε μέσω USB είτε μέσω Δικτύου από έναν υπολογιστή. Αυτή η υπηρεσία επιτρέπει το αντιγραφή αρχείων και στις δύο κατευθύνσεις, την εγκατάσταση και απεγκατάσταση εφαρμογών, την εκτέλεση εντολών shell, το backup δεδομένων, την ανάγνωση logs, μεταξύ άλλων λειτουργιών.
Ρίξτε μια ματιά στην ακόλουθη λίστα με ADB Commands για να μάθετε πώς να χρησιμοποιείτε το adb.
Smali
Μερικές φορές είναι ενδιαφέρον να τροποποιήσετε τον κώδικα της εφαρμογής για να έχετε πρόσβαση σε κρυφές πληροφορίες (ίσως καλά obfuscated κωδικοί ή flags). Τότε, μπορεί να είναι ενδιαφέρον να αποσυμπιέσετε το apk, να τροποποιήσετε τον κώδικα και να τον επανασυνθέσετε.
In this tutorial you can learn how to decompile and APK, modify Smali code and recompile the APK with the new functionality. Αυτό μπορεί να είναι πολύ χρήσιμο ως εναλλακτική για διάφορες δοκιμές κατά τη διάρκεια της δυναμικής ανάλυσης που θα παρουσιαστούν. Συνεπώς, έχετε πάντα υπόψη αυτή την πιθανότητα.
Άλλα ενδιαφέροντα κόλπα
- Spoofing your location in Play Store
- Play Integrity attestation spoofing (SafetyNet replacement)
- Android app-level virtualization / app cloning abuse & detection
- Shizuku Privileged API (ADB-based non-root privileged access)
- Exploiting Insecure In-App Update Mechanisms
- Abusing Accessibility Services (Android RAT)
- Android IME / InputMethodService Abuse (Malicious Keyboards)
- NFC/EMV Relay via HCE (Android Tap-to-Pay abuse)
- Κατέβασμα APKs: https://apps.evozi.com/apk-downloader/, https://apkpure.com/es/, https://www.apkmirror.com/, https://apkcombo.com/es-es/apk-downloader/, https://github.com/kiber-io/apkd
Αυτόματη απόκτηση APK από πολλαπλές πηγές (justapk)
pip install justapk (Python 3.11+). Το CLI εξάγει JSON στο stdout και την πρόοδο στο stderr (φιλικό προς pipes). Προσπαθεί μια ντετερμινιστική αλυσίδα fallback μέσω APK20 → F-Droid → APKPure (mobile API) → APKMirror (HTML scrape) → Uptodown (mobile API) → APKCombo (HTML scrape). Πηγές προστατευμένες με Cloudflare χρησιμοποιούν curl_cffi με TLS fingerprint impersonation για να μιμηθούν πραγματικούς clients και να μειώσουν τους αποκλεισμούς από bot-detection.
justapk download <package> # auto fallback
justapk download <package> -s apkpure # pin a source / version / output dir
justapk search telegram
justapk info org.telegram.messenger
justapk convert app.xapk -o output/ # merges splits, re-signs with debug key
convert συγχωνεύει XAPK/split APKs και τα υπογράφει με debug key, οπότε η προκύπτουσα APK signature/provenance διαφέρει από το αρχικό (χρησιμοποιήστε για δοκιμές/ανάλυση, όχι για εγκαταστάσεις παραγωγής).
- Εξαγωγή APK από τη συσκευή:
adb shell pm list packages
com.android.insecurebankv2
adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
- Συγχώνευσε όλα τα splits και τα base apks με APKEditor:
mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
java -jar ../APKEditor.jar m -i splits/ -o merged.apk
# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
Android malware tradecraft (loaders, fileless DEX, persistence)
Native staging + fileless DEX loaders
Ορισμένα Android droppers ενσωματώνουν μια native βιβλιοθήκη (lib*.so) που αποκρυπτογραφεί και γράφει ένα δεύτερο ELF (π.χ. l.so) σε προσωρινό μονοπάτι, το φορτώνει μέσω JNI, και στη συνέχεια φορτώνει την πραγματική λογική ως DEX μόνο στη μνήμη χρησιμοποιώντας dalvik.system.InMemoryDexClassLoader. Αυτό μειώνει τη στατική ορατότητα του payload και αποφεύγει την εγγραφή των classes*.dex στο δίσκο.
Practical triage points:
- Αναζητήστε native libs που καλούν
dlopenήSystem.loadLibraryπολύ νωρίς, και μετά επιλύουν Java methods μέσω obfuscated stack strings (π.χ. XOR decoded on the stack). - Ελέγξτε για
InMemoryDexClassLoaderστα logs/strings ή hooks, που υποδεικνύει fileless DEX εκτέλεση.
Quick Frida hook to dump the in‑memory DEX buffer:
Java.perform(() => {
const IM = Java.use('dalvik.system.InMemoryDexClassLoader');
IM.$init.overload('java.nio.ByteBuffer','java.lang.ClassLoader').implementation = function(buf, parent){
const arr = Java.array('byte', buf.array());
const fos = Java.use('java.io.FileOutputStream').$new("/sdcard/memdex.dex");
fos.write(arr); fos.close();
return this.$init(buf, parent);
};
});
Anti-analysis kill-switch
Packed loaders συχνά self-terminate όταν οι έλεγχοι emulator ή analysis αποτύχουν (π.χ., επικύρωση του CPU_ABI) καλώντας:
android.os.Process.killProcess(android.os.Process.myPid());
Persistence via foreground service + MediaPlayer loop
Ένα ελαφρύ μοτίβο persistence είναι να διατηρείς μια foreground service ενεργή με μια pinned notification και να παίζεις συνεχώς έναν σχεδόν αθόρυβο ηχητικό βρόχο μέσω του MediaPlayer. Αυτό κρατά τη διεργασία «ενεργή» και μειώνει τα kills λόγω αδράνειας του OS. Ψάξτε για χρήση ForegroundService + MediaPlayer που παίζει επαναλαμβανόμενο μικρό asset (συχνά λίγων δευτερολέπτων).
Accessibility overlay + ACTION_SET_TEXT hijacking
Αφού ο χρήστης χορηγήσει Accessibility, τα banking trojans μπορούν να παρακολουθούν την foreground app, να αποδώσουν ένα ρεαλιστικό overlay (συχνά WebView HTML αποθηκευμένο ως Base64) και να αντικαταστήσουν πεδία συναλλαγής χρησιμοποιώντας AccessibilityNodeInfo.ACTION_SET_TEXT. Αυτό επιτρέπει αθόρυβη αντικατάσταση της διεύθυνσης παραλήπτη ενώ το θύμα βλέπει ένα πειστικό UI.
Ελάχιστο παράδειγμα αντικατάστασης κειμένου:
Bundle args = new Bundle();
args.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE,
"ATTACKER_USDT_ADDRESS");
node.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, args);
Νόμιμη υποδομή push ως C2 gating
Αντί για custom sockets, κάποιο malware χρησιμοποιεί Firebase Cloud Messaging (FCM) ως κανάλι C2. Τα μηνύματα FCM μπορούν να ενεργοποιήσουν ελέγχους τηλεμετρίας (κατάσταση φόρτισης, % μπαταρίας, θερμοκρασία, αδράνεια χρήστη) και να gate ενέργειες όπως mining ή fraud για stealth.
Κρυπτογραφημένη σταδιοποίηση native payload με κλειδιά από το όνομα αρχείου
Native payloads μπορούν να παραδοθούν ως κρυπτογραφημένα ELF blobs και να αποκρυπτογραφηθούν με CipherInputStream(), χρησιμοποιώντας ένα κλειδί παραγόμενο από SHA‑1 του ονόματος αρχείου που κατεβάστηκε. Κάθε όνομα αρχείου/έκδοση παράγει ξεχωριστό κλειδί, δυσχεραίνοντας την επαναχρησιμοποίηση στατικών IOC.
Jezail rooted Android pentesting toolkit (REST API + web UI)
- Τρέχει σε rooted device (Magisk/rootAVD) και ξεκινά έναν HTTP server on tcp/8080 με μια Flutter web UI και REST API.
- Εγκαταστήστε το release APK με δικαιώματα:
adb install -g -r jezail.apk, μετά εκκινήστε την εφαρμογή (ο server ξεκινά αυτόματα). - Endpoints:
http://<device-ip>:8080/(UI),http://<device-ip>:8080/api/json(API listing),http://<device-ip>:8080/api/swagger(Swagger). - Port-forward του emulator για πρόσβαση στο UI/API από τον host:
adb forward tcp:8080 tcp:8080και μετά ανοίξτεhttp://localhost:8080.
Android Enterprise & Work Profile Attacks
Android Enterprise Work Profile Bypass
Case Studies & Vulnerabilities
Air Keyboard Remote Input Injection
Android Rooting Frameworks Manager Auth Bypass Syscall Hook
Abusing Android Media Pipelines Image Parsers
Firmware Level Zygote Backdoor Libandroid Runtime
Static Analysis
Πρώτα απ’ όλα, για την ανάλυση ενός APK θα πρέπει να ρίξετε μια ματιά στον Java κώδικα χρησιμοποιώντας έναν decompiler.
Παρακαλώ, διαβάστε εδώ για να βρείτε πληροφορίες για τους διαφορετικούς διαθέσιμους decompilers.
Αναζήτηση ενδιαφερόντων πληροφοριών
Απλώς κοιτώντας τα strings του APK μπορείτε να ψάξετε για passwords, URLs (https://github.com/ndelphit/apkurlgrep), api keys, encryption, bluetooth uuids, tokens και οτιδήποτε ενδιαφέρον… ψάξτε ακόμη και για code execution backdoors ή authentication backdoors (hardcoded admin credentials στην εφαρμογή).
Firebase
Δώστε ιδιαίτερη προσοχή στα firebase URLs και ελέγξτε αν είναι λάθος διαμορφωμένα. Περισσότερες πληροφορίες για το τι είναι Firebase και πώς να το εκμεταλλευτείτε εδώ.
Βασική κατανόηση της εφαρμογής - Manifest.xml, strings.xml
Η εξέταση των αρχείων Manifest.xml και strings.xml μιας εφαρμογής μπορεί να αποκαλύψει πιθανούς ευπαθείες ασφαλείας. Αυτά τα αρχεία είναι προσβάσιμα με χρήση decompilers ή με την αλλαγή της κατάληξης του APK σε .zip και στη συνέχεια αποσυμπίεση.
Ευπάθειες που εντοπίζονται από το Manifest.xml περιλαμβάνουν:
- Debuggable Applications: Εφαρμογές που έχουν οριστεί ως debuggable (
debuggable="true") στο Manifest.xml αποτελούν κίνδυνο καθώς επιτρέπουν συνδέσεις που μπορούν να οδηγήσουν σε εκμετάλλευση. Για περαιτέρω κατανόηση για το πώς να εκμεταλλευτείτε debuggable applications, αναφερθείτε σε ένα tutorial για την εύρεση και εκμετάλλευση debuggable εφαρμογών σε μια συσκευή. - Backup Settings: Το attribute
android:allowBackup="false"πρέπει να ορίζεται ρητά για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες για να αποτρέπονται μη εξουσιοδοτημένα backups δεδομένων μέσω adb, ειδικά όταν το usb debugging είναι ενεργοποιημένο. - Network Security: Προσαρμοσμένες ρυθμίσεις network security (
android:networkSecurityConfig="@xml/network_security_config") στο res/xml/ μπορούν να καθορίσουν λεπτομέρειες ασφάλειας όπως certificate pins και ρυθμίσεις HTTP traffic. Ένα παράδειγμα είναι το να επιτρέπεται το HTTP traffic για συγκεκριμένους domain. - Exported Activities and Services: Η αναγνώριση exported activities και services στο manifest μπορεί να αναδείξει components που μπορεί να καταχραστούν. Περαιτέρω ανάλυση κατά τη δυναμική δοκιμή μπορεί να αποκαλύψει πώς να εκμεταλλευτείτε αυτά τα components.
- Content Providers and FileProviders: Εκτεθειμένοι content providers θα μπορούσαν να επιτρέψουν μη εξουσιοδοτημένη πρόσβαση ή τροποποίηση δεδομένων. Η ρύθμιση των FileProviders πρέπει επίσης να εξεταστεί προσεκτικά.
- Broadcast Receivers and URL Schemes: Αυτά τα components μπορούν να αξιοποιηθούν για εκμετάλλευση, με ιδιαίτερη προσοχή στον τρόπο διαχείρισης των URL schemes για input vulnerabilities.
- SDK Versions: Τα attributes
minSdkVersion,targetSDKVersion, καιmaxSdkVersionυποδεικνύουν τις υποστηριζόμενες εκδόσεις Android, τονίζοντας τη σημασία να μην υποστηρίζονται παρωχημένες, ευπαθείς εκδόσεις Android για λόγους ασφάλειας.
Από το αρχείο strings.xml, μπορούν να εντοπιστούν ευαίσθητες πληροφορίες όπως API keys, custom schemas και άλλες σημειώσεις των developers, υπογραμμίζοντας την ανάγκη προσεκτικής επανεξέτασης αυτών των πόρων.
Tapjacking
Το Tapjacking είναι μια επίθεση όπου μια malicious application εκκινείται και τοποθετείται πάνω από μια victim application. Μόλις καλύψει ορατά την victim app, το UI της σχεδιάζεται έτσι ώστε να ξεγελάει τον χρήστη να αλληλεπιδρά μαζί της, ενώ ταυτόχρονα περνά την αλληλεπίδραση στην victim app.
Στην ουσία, είναι η τύφλωση του χρήστη ώστε να μην γνωρίζει ότι πραγματοποιεί ενέργειες στην victim app.
Find more information in:
Task Hijacking
Μια activity με το launchMode ορισμένο σε singleTask χωρίς να έχει οριστεί taskAffinity είναι ευάλωτη σε Task Hijacking. Αυτό σημαίνει ότι μια εφαρμογή μπορεί να εγκατασταθεί και αν εκκινηθεί πριν από την πραγματική εφαρμογή, μπορεί να hijackάρει το task της πραγματικής εφαρμογής (έτσι ο χρήστης θα αλληλεπιδρά με την malicious application πιστεύοντας ότι χρησιμοποιεί την πραγματική).
More info in:
Ανασφαλής αποθήκευση δεδομένων
Εσωτερική Αποθήκευση
Στο Android, αρχεία που αποθηκεύονται στην εσωτερική αποθήκευση έχουν σχεδιαστεί για να είναι προσβάσιμα αποκλειστικά από την εφαρμογή που τα δημιούργησε. Αυτό το μέτρο ασφαλείας επιβάλλεται από το λειτουργικό σύστημα Android και είναι γενικά επαρκές για τις ανάγκες ασφάλειας των περισσότερων εφαρμογών. Ωστόσο, οι developers κάποιες φορές χρησιμοποιούν modes όπως MODE_WORLD_READABLE και MODE_WORLD_WRITABLE για να επιτρέψουν το μοίρασμα αρχείων μεταξύ διαφορετικών εφαρμογών. Αυτά τα modes όμως δεν περιορίζουν την πρόσβαση σε αυτά τα αρχεία από άλλες εφαρμογές, συμπεριλαμβανομένων πιθανώς κακόβουλων.
- Static Analysis:
- Ελέγξτε ότι η χρήση των
MODE_WORLD_READABLEκαιMODE_WORLD_WRITABLEεξετάζεται προσεκτικά. Αυτά τα modes ενδέχεται να εκθέσουν αρχεία σε μη επιθυμητή ή μη εξουσιοδοτημένη πρόσβαση.
- Dynamic Analysis:
- Επαληθεύστε τα permissions που ορίζονται στα αρχεία που δημιουργεί η εφαρμογή. Συγκεκριμένα, ελέγξτε αν κάποια αρχεία έχουν οριστεί να είναι readable ή writable worldwide. Αυτό μπορεί να αποτελέσει σημαντικό κίνδυνο ασφάλειας, καθώς θα επέτρεπε σε οποιαδήποτε εφαρμογή εγκατεστημένη στη συσκευή, ανεξαρτήτως προέλευσης ή προθέσεων, να διαβάσει ή να τροποποιήσει αυτά τα αρχεία.
Εξωτερική Αποθήκευση
Όταν χειρίζεστε αρχεία σε εξωτερική αποθήκευση, όπως κάρτες SD, πρέπει να ληφθούν ορισμένες προφυλάξεις:
- Accessibility:
- Τα αρχεία στην εξωτερική αποθήκευση είναι globally readable και writable. Αυτό σημαίνει ότι οποιαδήποτε εφαρμογή ή χρήστης μπορεί να έχει πρόσβαση σε αυτά τα αρχεία.
- Security Concerns:
- Δε συνιστάται να αποθηκεύετε ευαίσθητες πληροφορίες στην εξωτερική αποθήκευση λόγω της ευκολίας πρόσβασης.
- Η εξωτερική αποθήκευση μπορεί να αφαιρεθεί ή να προσπελαστεί από οποιαδήποτε εφαρμογή, κάνοντάς την λιγότερο ασφαλή.
- Handling Data from External Storage:
- Πάντα να κάνετε input validation στα δεδομένα που ανακτάτε από την εξωτερική αποθήκευση. Αυτό είναι κρίσιμο επειδή τα δεδομένα προέρχονται από μη αξιόπιστη πηγή.
- Αποφύγετε να αποθηκεύετε εκτελέσιμα ή class files στην εξωτερική αποθήκευση για δυναμικό φορτίο.
- Εάν η εφαρμογή πρέπει να ανακτήσει εκτελέσιμα αρχεία από εξωτερική αποθήκευση, βεβαιωθείτε ότι αυτά τα αρχεία είναι signed και cryptographically verified πριν από το δυναμικό φόρτωμα. Αυτό το βήμα είναι ζωτικής σημασίας για τη διατήρηση της ασφάλειας της εφαρμογής.
Η εξωτερική αποθήκευση μπορεί να προσπελαστεί σε /storage/emulated/0, /sdcard, /mnt/sdcard
Tip
Από το Android 4.4 (API 17) και μετά, η SD κάρτα έχει δομή φακέλων που περιορίζει την πρόσβαση μιας εφαρμογής στον κατάλογο που προορίζεται συγκεκριμένα για εκείνη την εφαρμογή. Αυτό αποτρέπει μια malicious application από το να αποκτήσει read ή write πρόσβαση στα αρχεία άλλης εφαρμογής.
Ευαίσθητα δεδομένα αποθηκευμένα σε clear-text
- Shared preferences: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα xml αρχεία στη διαδρομή
/data/data/<packagename>/shared_prefs/και μερικές φορές είναι δυνατό να βρεθούν ευαίσθητες πληροφορίες σε clear-text σε αυτόν τον φάκελο. - Databases: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα sqlite βάσεις δεδομένων στη διαδρομή
/data/data/<packagename>/databases/και μερικές φορές είναι δυνατό να βρεθούν ευαίσθητες πληροφορίες σε clear-text σε αυτόν τον φάκελο.
Broken TLS
Accept All Certificates
Για κάποιο λόγο, μερικές φορές οι developers αποδέχονται όλα τα certificates ακόμη και αν, για παράδειγμα, το hostname δεν ταιριάζει, με γραμμές κώδικα όπως η ακόλουθη:
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it.
Ελαττωματική Κρυπτογραφία
Κακές Διαδικασίες Διαχείρισης Κλειδιών
Κάποιοι developers αποθηκεύουν ευαίσθητα δεδομένα στο local storage και τα κρυπτογραφούν με ένα key hardcoded/predictable μέσα στον κώδικα. Αυτό δεν πρέπει να γίνεται καθώς κάποιο reversing μπορεί να επιτρέψει σε attackers να εξάγουν τις εμπιστευτικές πληροφορίες.
Χρήση Ανασφαλών και/ή Deprecated Αλγορίθμων
Οι developers δεν θα πρέπει να χρησιμοποιούν deprecated algorithms για να πραγματοποιούν authorisation checks, store ή send δεδομένα. Μερικοί από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1… Αν χρησιμοποιούνται hashes για αποθήκευση passwords για παράδειγμα, πρέπει να χρησιμοποιηθούν hashes ανθεκτικά σε brute-force με salt.
Άλλοι έλεγχοι
- Συνιστάται να obfuscate the APK για να δυσκολέψετε το reverse engineering στους attackers.
- Αν η εφαρμογή είναι sensitive (όπως bank apps), πρέπει να πραγματοποιεί τους δικούς της ελέγχους για να δει αν το mobile είναι rooted και να ενεργεί αναλόγως.
- Αν η εφαρμογή είναι sensitive (όπως bank apps), πρέπει να ελέγχει αν χρησιμοποιείται emulator.
- Αν η εφαρμογή είναι sensitive (όπως bank apps), πρέπει να ελέγχει την δική της ακεραιότητα πριν εκτελεστεί για να διαπιστώσει αν έχει τροποποιηθεί.
- Χρησιμοποιήστε APKiD για να δείτε ποιος compiler/packer/obfuscator χρησιμοποιήθηκε για το build του APK
React Native Application
Διαβάστε την παρακάτω σελίδα για να μάθετε πώς να έχετε εύκολη πρόσβαση στον javascript κώδικα των React applications:
Xamarin Applications
Διαβάστε την παρακάτω σελίδα για να μάθετε πώς να έχετε εύκολη πρόσβαση στον C# κώδικα μιας xamarin εφαρμογής:
Superpacked Applications
According to this blog post το superpacked είναι ένας αλγόριθμος Meta που συμπιέζει το περιεχόμενο μιας εφαρμογής σε ένα ενιαίο αρχείο. Το blog αναφέρεται στην πιθανότητα δημιουργίας μιας εφαρμογής που decompress αυτού του είδους τις εφαρμογές… και σε έναν ταχύτερο τρόπο που περιλαμβάνει να execute the application and gather the decompressed files from the filesystem.
Automated Static Code Analysis
Το εργαλείο mariana-trench μπορεί να εντοπίσει vulnerabilities σαρώνοντας τον code της εφαρμογής. Αυτό το εργαλείο περιέχει μια σειρά από known sources (που υποδεικνύουν στο εργαλείο τα places όπου το input είναι controlled by the user), sinks (που υποδεικνύουν στο εργαλείο dangerous places όπου το κακόβουλο user input μπορεί να προκαλέσει ζημιά) και rules. Αυτοί οι κανόνες υποδεικνύουν τον συνδυασμό sources-sinks που δηλώνει μια ευπάθεια.
Με αυτή την γνώση, mariana-trench will review the code and find possible vulnerabilities on it.
Secrets leaked
Μια εφαρμογή μπορεί να περιέχει secrets (API keys, passwords, hidden urls, subdomains…) μέσα της που μπορεί να καταφέρετε να ανακαλύψετε. Μπορείτε να χρησιμοποιήσετε ένα εργαλείο όπως https://github.com/dwisiswant0/apkleaks
Bypass Biometric Authentication
Bypass Biometric Authentication (Android)
Other interesting functions
- Code execution:
Runtime.exec(), ProcessBuilder(), native code:system() - Send SMSs:
sendTextMessage, sendMultipartTestMessage - Native functions declared as
native:public native, System.loadLibrary, System.load - Read this to learn how to reverse native functions
- In-memory native code execution via JNI (downloaded shellcode → mmap/mprotect → call):
In Memory Jni Shellcode Execution
Other tricks
Dynamic Analysis
Πρώτα απ’ όλα, χρειάζεστε ένα περιβάλλον όπου μπορείτε να εγκαταστήσετε την εφαρμογή και όλο το environment (Burp CA cert, Drozer and Frida κυρίως). Συνεπώς, μια rooted συσκευή (emulated ή όχι) συνίσταται έντονα.
Online Dynamic analysis
Μπορείτε να δημιουργήσετε έναν free account στο: https://appetize.io/. Αυτή η πλατφόρμα σας επιτρέπει να upload και να execute APKs, οπότε είναι χρήσιμη για να δείτε πώς συμπεριφέρεται ένα apk.
Μπορείτε ακόμη να see the logs of your application στο web και να συνδεθείτε μέσω adb.
.png)
Χάρη στην ADB σύνδεση μπορείτε να χρησιμοποιήσετε Drozer και Frida μέσα στους emulators.
Local Dynamic Analysis
Using an emulator
- Android Studio (Μπορείτε να δημιουργήσετε x86 και arm devices, και σύμφωνα με this latest x86 versions support ARM libraries χωρίς να χρειάζεται ένας αργός arm emulator).
- Μάθετε να το ρυθμίζετε σε αυτή τη σελίδα:
- Genymotion (Free version: Personal Edition, χρειάζεται να δημιουργήσετε account. Συνιστάται να download την έκδοση WITH VirtualBox για να αποφύγετε πιθανά errors.)
- Nox (Free, αλλά δεν υποστηρίζει Frida ή Drozer).
Tip
Όταν δημιουργείτε ένα νέο emulator σε οποιαδήποτε πλατφόρμα θυμηθείτε ότι όσο μεγαλύτερη είναι η οθόνη, τόσο πιο αργά θα τρέχει ο emulator. Επομένως επιλέξτε μικρές οθόνες αν είναι δυνατόν.
Για να install google services (όπως AppStore) σε Genymotion χρειάζεται να πατήσετε το κόκκινο κουμπί που επισημαίνεται στην παρακάτω εικόνα:
.png)
Επίσης, παρατηρήστε ότι στις διαμορφώσεις του Android VM στο Genymotion μπορείτε να επιλέξετε Bridge Network mode (αυτό θα είναι χρήσιμο αν θα συνδέεστε στο Android VM από ένα διαφορετικό VM με τα εργαλεία).
Use a physical device
Πρέπει να ενεργοποιήσετε τις debugging επιλογές και είναι χρήσιμο αν μπορείτε να το root:
- Settings.
- (FromAndroid 8.0) Select System.
- Select About phone.
- Press Build number 7 times.
- Go back and you will find the Developer options.
Μόλις εγκαταστήσετε την εφαρμογή, το πρώτο πράγμα που πρέπει να κάνετε είναι να τη δοκιμάσετε και να ερευνήσετε τι κάνει, πώς λειτουργεί και να εξοικειωθείτε με αυτήν.
Προτείνω να perform this initial dynamic analysis using MobSF dynamic analysis + pidcat, έτσι θα μπορέσουμε να learn how the application works ενώ το MobSF captures πολλά interesting data που μπορείτε να εξετάσετε αργότερα.
Magisk/Zygisk quick notes (recommended on Pixel devices)
- Patch boot.img with the Magisk app and flash via fastboot to get systemless root
- Enable Zygisk + DenyList for root hiding; consider LSPosed/Shamiko when stronger hiding is required
- Keep original boot.img to recover from OTA updates; re-patch after each OTA
- For screen mirroring, use scrcpy on the host
Unintended Data Leakage
Logging
Οι developers πρέπει να είναι προσεκτικοί στο να μην εκθέτουν debugging information δημόσια, καθώς αυτό μπορεί να οδηγήσει σε sensitive data leaks. Τα εργαλεία pidcat και adb logcat συνιστώνται για την παρακολούθηση των application logs ώστε να εντοπίσετε και να προστατεύσετε ευαίσθητες πληροφορίες. Η Pidcat προτιμάται για την ευχρηστία και την αναγνωσιμότητά της.
Warning
Σημειώστε ότι από later newer than Android 4.0, applications are only able to access their own logs. Έτσι οι εφαρμογές δεν μπορούν να έχουν πρόσβαση στα logs άλλων apps.
Παρ’ όλα αυτά, εξακολουθεί να συνίσταται να μην καταγράφονται sensitive πληροφορίες.
Copy/Paste Buffer Caching
Το Android clipboard-based framework επιτρέπει λειτουργία copy-paste στις εφαρμογές, αλλά αποτελεί κίνδυνο καθώς other applications μπορούν να έχουν access στο clipboard, ενδεχομένως εκθέτοντας sensitive data. Είναι κρίσιμο να disable copy/paste λειτουργίες σε sensitive sections μιας εφαρμογής, όπως λεπτομέρειες credit card, για να αποτραπεί leak.
Crash Logs
Αν μια εφαρμογή crashes και saves logs, αυτά τα logs μπορούν να βοηθήσουν attackers, ιδιαίτερα όταν η εφαρμογή δεν μπορεί να reverse-engineer. Για να μειώσετε αυτόν τον κίνδυνο, αποφύγετε το logging κατά τα crashes, και αν τα logs πρέπει να σταλούν μέσω δικτύου, βεβαιωθείτε ότι αποστέλλονται μέσω SSL καναλιού για ασφάλεια.
Ως pentester, try to take a look to these logs.
Analytics Data Sent To 3rd Parties
Εφαρμογές συχνά ενσωματώνουν υπηρεσίες όπως Google Adsense, που ενδέχεται ανεπιθύμητα να leak sensitive data λόγω λανθασμένης υλοποίησης από τους developers. Για να εντοπίσετε πιθανές διαρροές, συνίσταται να intercept the application’s traffic και να ελέγξετε για οποιεσδήποτε sensitive πληροφορίες αποστέλλονται σε third-party services.
SQLite DBs
Οι περισσότερες εφαρμογές θα χρησιμοποιήσουν internal SQLite databases για αποθήκευση πληροφοριών. Κατά το pentest ρίξτε μια ματιά στις databases που δημιουργούνται, τα ονόματα των tables και columns και όλα τα data που αποθηκεύονται γιατί μπορεί να βρείτε sensitive information (που θα ήταν vulnerability).
Οι βάσεις δεδομένων θα πρέπει να βρίσκονται στο /data/data/the.package.name/databases όπως /data/data/com.mwr.example.sieve/databases
Αν η database αποθηκεύει εμπιστευτικές πληροφορίες και είναι encrypted αλλά μπορείτε να find τον password μέσα στην εφαρμογή, εξακολουθεί να είναι vulnerability.
Περιορίστε τα tables με .tables και δείτε τα columns των tables με .schema <table_name>
Drozer (Exploit Activities, Content Providers and Services)
From Drozer Docs: Drozer allows you to assume the role of an Android app and interact with other apps. It can do anything that an installed application can do, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .
Το Drozer είναι ένα χρήσιμο εργαλείο για να exploit exported activities, exported services and Content Providers όπως θα μάθετε στις επόμενες ενότητες.
Exploiting exported Activities
Read this if you want to refresh what is an Android Activity.
Θυμηθείτε επίσης ότι ο κώδικας μιας activity ξεκινά στη μέθοδο onCreate.
Authorisation bypass
Όταν μια Activity είναι exported μπορείτε να την καλέσετε από μια εξωτερική εφαρμογή. Συνεπώς, αν μια activity με sensitive information είναι exported θα μπορούσατε να bypass τους authentication μηχανισμούς για να αποκτήσετε πρόσβαση σε αυτήν.
Learn how to exploit exported activities with Drozer.
Μπορείτε επίσης να ξεκινήσετε μια exported activity από adb:
- PackageName is com.example.demo
- Exported ActivityName is com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity
NOTE: Το MobSF θα εντοπίσει ως κακόβουλη τη χρήση του singleTask/singleInstance ως android:launchMode σε μια activity, αλλά λόγω this, προφανώς αυτό είναι επικίνδυνο μόνο σε παλιές εκδόσεις (API versions < 21).
Tip
Σημειώστε ότι ένα authorisation bypass δεν είναι πάντα ευπάθεια — εξαρτάται από το πώς λειτουργεί το bypass και ποιες πληροφορίες εκτίθενται.
Sensitive information leakage
Activities can also return results. Αν καταφέρετε να βρείτε μια exported και unprotected activity που καλεί τη μέθοδο setResult και επιστρέφει sensitive information, υπάρχει sensitive information leakage.
Tapjacking
Αν το Tapjacking δεν αποτρέπεται, μπορείτε να καταχραστείτε την exported activity για να κάνετε τον χρήστη να εκτελέσει απροσδόκητες ενέργειες. Για περισσότερες πληροφορίες σχετικά με what is Tapjacking follow the link.
Exploiting Content Providers - Accessing and manipulating sensitive information
Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι ένα Content Provider.
Οι Content providers χρησιμοποιούνται βασικά για να μοιράζονται δεδομένα. Αν μια εφαρμογή έχει διαθέσιμους content providers, μπορεί να καταφέρετε να εξαγάγετε ευαίσθητα δεδομένα από αυτούς. Είναι επίσης ενδιαφέρον να ελέγξετε για πιθανές SQL injections και Path Traversals, καθώς μπορεί να είναι ευπαθείς.
Μάθετε πώς να εκμεταλλευτείτε Content Providers με το Drozer.
Exploiting Services
Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι ένα Service.
Θυμηθείτε ότι οι ενέργειες ενός Service ξεκινούν στη μέθοδο onStartCommand.
Ένα service είναι βασικά κάτι που μπορεί να λάβει δεδομένα, να τα επεξεργαστεί και να επιστρέψει (ή όχι) μια απάντηση. Έτσι, αν μια εφαρμογή exportάρει κάποια services θα πρέπει να ελέγξετε τον κώδικα για να καταλάβετε τι κάνει και να το δοκιμάσετε δυναμικά για να εξαγάγετε εμπιστευτικές πληροφορίες, να παρακάμψετε μέτρα αυθεντικοποίησης…
Μάθετε πώς να εκμεταλλευτείτε Services με το Drozer.
Exploiting Broadcast Receivers
Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι ένα Broadcast Receiver.
Θυμηθείτε ότι οι ενέργειες ενός Broadcast Receiver ξεκινούν στη μέθοδο onReceive.
Ένας broadcast receiver περιμένει έναν τύπο μηνύματος. Ανάλογα με το πώς ο receiver χειρίζεται το μήνυμα, μπορεί να είναι ευπαθής.
Μάθετε πώς να εκμεταλλευτείτε Broadcast Receivers με το Drozer.
Exploiting Schemes / Deep links
Μπορείτε να αναζητήσετε deep links χειροκίνητα, χρησιμοποιώντας εργαλεία όπως το MobSF ή scripts όπως this one.
Μπορείτε να ανοίξετε ένα δηλωμένο scheme χρησιμοποιώντας adb ή ένα browser:
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
Σημειώστε ότι μπορείτε να παραλείψετε το package name και το κινητό θα καλέσει αυτόματα την εφαρμογή που πρέπει να ανοίξει αυτόν τον σύνδεσμο.
<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
Κώδικας που εκτελείται
Για να βρείτε τον κώδικα που θα εκτελεστεί στην App, πηγαίνετε στη activity που καλείται από το deeplink και αναζητήστε τη συνάρτηση onNewIntent.
 (1) (1) (1).png)
Ευαίσθητες πληροφορίες
Κάθε φορά που βρίσκετε ένα deep link ελέγξτε ότι δεν λαμβάνει ευαίσθητα δεδομένα (όπως passwords) μέσω παραμέτρων URL, γιατί οποιαδήποτε άλλη εφαρμογή θα μπορούσε να προσποιηθεί το deep link και να κλέψει αυτά τα δεδομένα!
Parameters in path
Πρέπει επίσης να ελέγξετε αν κάποιο deep link χρησιμοποιεί παράμετρο μέσα στο path του URL όπως: https://api.example.com/v1/users/{username}, σε αυτή την περίπτωση μπορείτε να προκαλέσετε ένα path traversal προσπελάζοντας κάτι σαν: example://app/users?username=../../unwanted-endpoint%3fparam=value .
Σημειώστε ότι αν βρείτε τα σωστά endpoints μέσα στην εφαρμογή μπορεί να μπορέσετε να προκαλέσετε Open Redirect (αν μέρος του path χρησιμοποιείται ως domain name), account takeover (αν μπορείτε να τροποποιήσετε λεπτομέρειες χρήστη χωρίς CSRF token και το vuln endpoint χρησιμοποιούσε τη σωστή μέθοδο) και οποιαδήποτε άλλη vuln. Περισσότερες πληροφορίες εδώ.
More examples
Ένα ενδιαφέρον bug bounty report σχετικά με links (/.well-known/assetlinks.json).
Έλεγχος Επιπέδου Μεταφοράς και Αποτυχίες Επαλήθευσης
- Τα πιστοποιητικά δεν ελέγχονται πάντα σωστά από τις Android εφαρμογές. Είναι σύνηθες αυτές οι εφαρμογές να αγνοούν προειδοποιήσεις και να αποδέχονται self-signed certificates ή, σε μερικές περιπτώσεις, να επανέρχονται σε χρήση HTTP συνδέσεων.
- Οι διαπραγματεύσεις κατά το SSL/TLS handshake είναι μερικές φορές αδύναμες, χρησιμοποιώντας ανασφαλείς cipher suites. Αυτό το πρόβλημα κάνει τη σύνδεση ευάλωτη σε MITM επιθέσεις, επιτρέποντας σε επιτιθέμενους να αποκρυπτογραφήσουν τα δεδομένα.
- Leakage of private information αποτελεί ρίσκο όταν οι εφαρμογές αυθεντικοποιούνται χρησιμοποιώντας ασφαλή κανάλια και μετά επικοινωνούν μέσω μη ασφαλών καναλιών για άλλες συναλλαγές. Αυτή η προσέγγιση δεν προστατεύει ευαίσθητα δεδομένα, όπως session cookies ή στοιχεία χρήστη, από την παρακολούθηση ή την υποκλοπή από κακόβουλα μέρη.
Έλεγχος Πιστοποιητικού
Θα επικεντρωθούμε στον έλεγχο των πιστοποιητικών. Η ακεραιότητα του πιστοποιητικού του server πρέπει να επαληθεύεται για να βελτιωθεί η ασφάλεια. Αυτό είναι κρίσιμο γιατί οι ανασφαλείς ρυθμίσεις TLS και η μετάδοση ευαίσθητων δεδομένων μέσω μη κρυπτογραφημένων καναλιών μπορούν να προκαλέσουν σημαντικούς κινδύνους. Για λεπτομερή βήματα σχετικά με την επαλήθευση των server certificates και την αντιμετώπιση ευπαθειών, this resource παρέχει ολοκληρωμένη καθοδήγηση.
SSL Pinning
SSL Pinning είναι ένα μέτρο ασφάλειας όπου η εφαρμογή επαληθεύει το certificate του server έναντι ενός γνωστού αντιγράφου που είναι αποθηκευμένο εντός της εφαρμογής. Αυτή η μέθοδος είναι απαραίτητη για την πρόληψη MITM επιθέσεων. Η υλοποίηση του SSL Pinning συνιστάται έντονα για εφαρμογές που διαχειρίζονται ευαίσθητες πληροφορίες.
Traffic Inspection
Για να επιθεωρήσετε HTTP traffic, είναι απαραίτητο να εγκαταστήσετε το πιστοποιητικό του proxy tool (π.χ., Burp). Χωρίς την εγκατάσταση αυτού του πιστοποιητικού, τα κρυπτογραφημένα πακέτα μπορεί να μην είναι ορατά μέσω του proxy. Για οδηγίες σχετικά με την εγκατάσταση ενός custom CA certificate, κάντε κλικ εδώ.
Εφαρμογές που στοχεύουν API Level 24 and above απαιτούν τροποποιήσεις στο Network Security Config για να αποδεχθούν το CA certificate του proxy. Αυτό το βήμα είναι κρίσιμο για την επιθεώρηση κρυπτογραφημένης κίνησης. Για οδηγίες σχετικά με την τροποποίηση του Network Security Config, ανατρέξτε σε αυτό το tutorial.
Αν χρησιμοποιείται Flutter πρέπει να ακολουθήσετε τις οδηγίες στη this page. Αυτό οφείλεται στο ότι απλώς προσθέτοντας το certificate στο store δεν θα λειτουργήσει, καθώς το Flutter έχει τη δική του λίστα με έγκυρα CAs.
Στατική ανίχνευση του SSL/TLS pinning
Πριν επιχειρήσετε runtime bypasses, χαρτογραφήστε γρήγορα πού εφαρμόζεται το pinning στο APK. Η στατική ανίχνευση βοηθάει στο να σχεδιάσετε hooks/patches και να εστιάσετε στα σωστά code paths.
Tool: SSLPinDetect
- Open-source static-analysis utility που αποσυμπιέζει το APK σε Smali (μέσω apktool) και σαρώνει για curated regex patterns υλοποιήσεων SSL/TLS pinning.
- Αναφέρει το ακριβές file path, αριθμό γραμμής και ένα snippet για κάθε match.
- Καλύπτει κοινά frameworks και custom code paths: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init με custom TrustManagers/KeyManagers, και Network Security Config XML pins.
Install
- Απαιτούμενα: Python >= 3.8, Java on PATH, apktool
git clone https://github.com/aancw/SSLPinDetect
cd SSLPinDetect
pip install -r requirements.txt
Χρήση
# Basic
python sslpindetect.py -f app.apk -a apktool.jar
# Verbose (timings + per-match path:line + snippet)
python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v
Παραδείγματα κανόνων pattern (JSON)
Χρησιμοποιήστε ή επεκτείνετε signatures για να εντοπίσετε ιδιόκτητους/προσαρμοσμένους τύπους pinning. Μπορείτε να φορτώσετε το δικό σας JSON και να εκτελέσετε scan σε μεγάλη κλίμακα.
{
"OkHttp Certificate Pinning": [
"Lcom/squareup/okhttp/CertificatePinner;",
"Lokhttp3/CertificatePinner;",
"setCertificatePinner"
],
"TrustManager Override": [
"Ljavax/net/ssl/X509TrustManager;",
"checkServerTrusted"
]
}
Σημειώσεις και συμβουλές
- Γρήγορο σκανάρισμα μεγάλων εφαρμογών μέσω multi-threading και memory-mapped I/O· pre-compiled regex μειώνει το overhead/false positives.
- Συλλογή patterns: https://github.com/aancw/smali-sslpin-patterns
- Τυπικοί στόχοι εντοπισμού για επόμενη αξιολόγηση:
- OkHttp: χρήση CertificatePinner, setCertificatePinner, αναφορές πακέτου okhttp3/okhttp
- Custom TrustManagers: javax.net.ssl.X509TrustManager, overrides του checkServerTrusted
- Custom SSL contexts: SSLContext.getInstance + SSLContext.init με custom managers
- Declarative pins στο res/xml network security config και αναφορές στο manifest
- Χρησιμοποίησε τις ταιριασμένες θέσεις για να σχεδιάσεις Frida hooks, static patches, ή reviews ρυθμίσεων πριν το dynamic testing.
Παράκαμψη του SSL Pinning
Όταν υλοποιείται το SSL Pinning, η παράκαμψή του γίνεται απαραίτητη για την επιθεώρηση της HTTPS κίνησης. Υπάρχουν διάφορες μέθοδοι για αυτό το σκοπό:
- Αυτόματα τροποποίησε το apk για να παρακάμψεις το SSLPinning με apk-mitm. Το μεγαλύτερο πλεονέκτημα αυτής της επιλογής είναι ότι δεν θα χρειαστείς root για να παρακάμψεις το SSL Pinning, αλλά θα χρειαστεί να διαγράψεις την εφαρμογή και να εγκαταστήσεις τη νέα, και αυτό δεν δουλεύει πάντα.
- Μπορείς να χρησιμοποιήσεις Frida (περιγράφεται παρακάτω) για να παρακάμψεις αυτή την προστασία. Εδώ είναι ένας οδηγός για χρήση Burp+Frida+Genymotion: https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/
- Μπορείς επίσης να προσπαθήσεις να παρακάμψεις αυτόματα το SSL Pinning χρησιμοποιώντας objection:
objection --gadget com.package.app explore --startup-command "android sslpinning disable" - Μπορείς επίσης να προσπαθήσεις να παρακάμψεις αυτόματα το SSL Pinning χρησιμοποιώντας MobSF dynamic analysis (εξηγείται παρακάτω)
- Αν νομίζεις ότι υπάρχει κίνηση που δεν καταγράφεις, μπορείς να δοκιμάσεις να προωθήσεις την κίνηση σε burp χρησιμοποιώντας iptables. Διάβασε αυτό το blog: https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62
Αναζήτηση κοινών web ευπαθειών
Είναι σημαντικό επίσης να αναζητήσεις κοινές web ευπάθειες μέσα στην εφαρμογή. Αναλυτικές πληροφορίες για τον εντοπισμό και την αντιμετώπισή τους υπερβαίνουν το πλαίσιο αυτής της περίληψης αλλά καλύπτονται εκτενώς αλλού.
Frida
Frida είναι ένα toolkit δυναμικής instrumentation για προγραμματιστές, reverse-engineers και ερευνητές ασφάλειας.
Μπορείς να αποκτήσεις πρόσβαση στην τρέχουσα εφαρμογή και να hook-άρεις μεθόδους σε runtime για να αλλάξεις τη συμπεριφορά, να αλλάξεις τιμές, να εξάγεις τιμές, να τρέξεις διαφορετικό κώδικα…
Αν θέλεις να pentest εφαρμογές Android πρέπει να ξέρεις πώς να χρησιμοποιείς το Frida.
- Μάθε πώς να χρησιμοποιείς το Frida: Frida tutorial
- Κάποια “GUI” για ενέργειες με Frida: https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security
- Ojection είναι ιδανικό για αυτοματοποίηση της χρήσης του Frida: https://github.com/sensepost/objection , https://github.com/dpnishant/appmon
- Μπορείς να βρεις μερικά Awesome Frida scripts εδώ: https://codeshare.frida.re/
- Πρόσπαθησε να παρακάμψεις anti-debugging / anti-frida μηχανισμούς φορτώνοντας το Frida όπως υποδεικνύεται στο https://erfur.github.io/blog/dev/code-injection-without-ptrace (εργαλείο linjector)
Anti-instrumentation & διαδικασία παράκαμψης του SSL pinning
Android Anti Instrumentation And Ssl Pinning Bypass
Dump μνήμης - Fridump
Έλεγξε αν η εφαρμογή αποθηκεύει ευαίσθητες πληροφορίες στη μνήμη που δεν θα έπρεπε, όπως passwords ή mnemonics.
Χρησιμοποιώντας Fridump3 μπορείς να dump-άρεις τη μνήμη της εφαρμογής με:
# With PID
python3 fridump3.py -u <PID>
# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"
Αυτό θα κάνει dump τη μνήμη στο φάκελο ./dump, και εκεί μπορείτε να κάνετε grep με κάτι σαν:
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
Ευαίσθητα δεδομένα στο Keystore
Στο Android το Keystore είναι το καλύτερο μέρος για την αποθήκευση ευαίσθητων δεδομένων, ωστόσο, με επαρκή προνόμια είναι ακόμα δυνατό να αποκτηθεί πρόσβαση σε αυτά. Εφόσον οι εφαρμογές τείνουν να αποθηκεύουν εδώ ευαίσθητα δεδομένα σε απλό κείμενο, οι pentests πρέπει να το ελέγχουν, καθώς κάποιος ως root user ή κάποιος με φυσική πρόσβαση στη συσκευή θα μπορούσε να κλέψει αυτά τα δεδομένα.
Ακόμη κι αν μια εφαρμογή αποθηκεύσει δεδομένα στο keystore, αυτά τα δεδομένα πρέπει να είναι κρυπτογραφημένα.
Για πρόσβαση στα δεδομένα μέσα στο keystore μπορείτε να χρησιμοποιήσετε αυτό το Frida script: https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
Fingerprint/Biometrics Bypass
Χρησιμοποιώντας το ακόλουθο Frida script, μπορεί να είναι δυνατό να bypass fingerprint authentication που ενδέχεται να εκτελούν οι εφαρμογές Android για να προστατεύσουν ορισμένες ευαίσθητες περιοχές:
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
Εικόνες φόντου
Όταν βάζετε μια εφαρμογή στο παρασκήνιο, το Android αποθηκεύει ένα στιγμιότυπο της εφαρμογής ώστε όταν επανέλθει στο προσκήνιο να αρχίσει να φορτώνει την εικόνα πριν από την εφαρμογή, ώστε να φαίνεται ότι η εφαρμογή φορτώθηκε πιο γρήγορα.
Ωστόσο, εάν αυτό το στιγμιότυπο περιέχει ευαίσθητες πληροφορίες, κάποιος με πρόσβαση σε αυτό μπορεί να υποκλέψει αυτές τις πληροφορίες (σημείωση: χρειάζεστε root για να αποκτήσετε πρόσβαση).
Τα στιγμιότυπα αποθηκεύονται συνήθως στο: /data/system_ce/0/snapshots
Το Android παρέχει τρόπο για να αποτρέψετε τη λήψη στιγμιότυπων οθόνης θέτοντας την παράμετρο layout FLAG_SECURE. Χρησιμοποιώντας αυτό το FLAG, τα περιεχόμενα του παραθύρου θεωρούνται ασφαλή, αποτρέποντας την εμφάνισή τους σε στιγμιότυπα οθόνης ή την προβολή τους σε μη ασφαλείς οθόνες.
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
Android Application Analyzer
Αυτό το εργαλείο μπορεί να σας βοηθήσει στη διαχείριση διαφόρων εργαλείων κατά τη δυναμική ανάλυση: https://github.com/NotSoSecure/android_application_analyzer
Intent Injection
Οι προγραμματιστές συχνά δημιουργούν proxy components όπως activities, services και broadcast receivers που χειρίζονται αυτά τα Intents και τα μεταβιβάζουν σε μεθόδους όπως startActivity(...) ή sendBroadcast(...), κάτι που μπορεί να είναι επικίνδυνο.
Ο κίνδυνος έγκειται στο να επιτρέπεται σε επιτιθέμενους να ενεργοποιούν non-exported app components ή να αποκτούν πρόσβαση σε ευαίσθητους content providers παραπλανώντας αυτά τα Intents. Ένα χαρακτηριστικό παράδειγμα είναι το WebView component που μετατρέπει URLs σε αντικείμενα Intent μέσω Intent.parseUri(...) και τα εκτελεί, ενδεχομένως οδηγώντας σε malicious Intent injections.
Βασικά Συμπεράσματα
- Intent Injection μοιάζει με το Open Redirect ζήτημα στο web.
- Οι εκμεταλλεύσεις περιλαμβάνουν τη μεταβίβαση αντικειμένων
Intentως extras, τα οποία μπορούν να ανακατευθυνθούν για να εκτελέσουν μη ασφαλείς ενέργειες. - Μπορεί να εκθέσει non-exported components και content providers σε επιτιθέμενους.
- Η μετατροπή URL σε
Intentαπό τοWebViewμπορεί να διευκολύνει ανεπιθύμητες ενέργειες.
Android Client Side Injections και άλλα
Πιθανόν να γνωρίζετε αυτού του είδους τις ευπάθειες από το Web. Πρέπει να είστε ιδιαίτερα προσεκτικοί με αυτές τις ευπάθειες σε μια Android εφαρμογή:
- SQL Injection: Όταν χειρίζεστε δυναμικά queries ή Content-Providers, βεβαιωθείτε ότι χρησιμοποιείτε parameterized queries.
- JavaScript Injection (XSS): Επαληθεύστε ότι η υποστήριξη JavaScript και Plugin είναι απενεργοποιημένη για οποιοδήποτε WebViews (απενεργοποιημένη από προεπιλογή). More info here.
- Local File Inclusion: Τα WebViews θα πρέπει να έχουν απενεργοποιημένη πρόσβαση στο file system (ενεργοποιημένη από προεπιλογή) -
(webview.getSettings().setAllowFileAccess(false);). More info here. - Eternal cookies: Σε αρκετές περιπτώσεις όταν η android εφαρμογή τερματίζει τη συνεδρία, το cookie δεν ανακαλείται ή μπορεί ακόμη να αποθηκευτεί στο δίσκο
- Secure Flag in cookies
Αυτόματη Ανάλυση
MobSF
Στατική ανάλυση
.png)
Αξιολόγηση ευπαθειών της εφαρμογής χρησιμοποιώντας ένα ωραίο web-based frontend. Μπορείτε επίσης να πραγματοποιήσετε dynamic analysis (αλλά πρέπει να προετοιμάσετε το περιβάλλον).
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
Notice that MobSF can analyse Android(apk), IOS(ipa) and Windows(apx) applications (Windows applications must be analyzed from a MobSF installed in a Windows host).
Also, if you create a ZIP file with the source code if an Android or an IOS app (go to the root folder of the application, select everything and create a ZIPfile), it will be able to analyse it also.
MobSF also allows you to diff/Compare analysis and to integrate VirusTotal (you will need to set your API key in MobSF/settings.py and enable it: VT_ENABLED = TRUE VT_API_KEY = <Your API key> VT_UPLOAD = TRUE). You can also set VT_UPLOAD to False, then the hash will be upload instead of the file.
Assisted Dynamic analysis with MobSF
MobSF μπορεί επίσης να είναι πολύ χρήσιμο για dynamic analysis σε Android, αλλά σε αυτή την περίπτωση θα χρειαστεί να εγκαταστήσετε το MobSF και το genymotion στον host σας (ένα VM ή Docker δεν θα λειτουργήσει). Note: You need to start first a VM in genymotion and then MobSF.
Ο MobSF dynamic analyser μπορεί:
- Dump application data (URLs, logs, clipboard, screenshots made by you, screenshots made by “Exported Activity Tester”, emails, SQLite databases, XML files, and other created files). Όλα αυτά γίνονται αυτόματα εκτός από τα screenshots — πρέπει να πατήσετε όταν θέλετε ένα screenshot ή να πατήσετε “Exported Activity Tester” για να λάβετε screenshots όλων των exported activities.
- Καταγραφή HTTPS traffic
- Use Frida to obtain runtime information
From android versions > 5, it will automatically start Frida and will set global proxy settings to capture traffic. It will only capture traffic from the tested application.
Frida
By default, it will also use some Frida Scripts to bypass SSL pinning, root detection and debugger detection and to monitor interesting APIs.
MobSF can also invoke exported activities, grab screenshots of them and save them for the report.
To start the dynamic testing press the green bottom: “Start Instrumentation”. Press the “Frida Live Logs” to see the logs generated by the Frida scripts and “Live API Monitor” to see all the invocation to hooked methods, arguments passed and returned values (this will appear after pressing “Start Instrumentation”).
MobSF also allows you to load your own Frida scripts (to send the results of your Frida scripts to MobSF use the function send()). It also has several pre-written scripts you can load (you can add more in MobSF/DynamicAnalyzer/tools/frida_scripts/others/), just select them, press “Load” and press “Start Instrumentation” (you will be able to see the logs of that scripts inside “Frida Live Logs”).
.png)
Επιπλέον, έχετε κάποιες βοηθητικές λειτουργίες του Frida:
- Enumerate Loaded Classes: Θα εμφανίσει όλες τις φορτωμένες κλάσεις
- Capture Strings: Θα τυπώσει όλες τις capture strings κατά τη χρήση της εφαρμογής (πολύ noisy)
- Capture String Comparisons: Μπορεί να είναι πολύ χρήσιμο. Θα show the 2 strings being compared και αν το αποτέλεσμα ήταν True ή False.
- Enumerate Class Methods: Βάλτε το όνομα της κλάσης (like “java.io.File”) και θα εμφανίσει όλες τις methods της κλάσης.
- Search Class Pattern: Αναζήτηση κλάσεων με pattern
- Trace Class Methods: Trace μια whole class (δείτε inputs και outputs όλων των μεθόδων της κλάσης). Θυμηθείτε ότι από προεπιλογή το MobSF traces αρκετές ενδιαφέρουσες Android Api methods.
Μόλις επιλέξετε το auxiliary module που θέλετε να χρησιμοποιήσετε πρέπει να πατήσετε “Start Intrumentation” και θα δείτε όλα τα outputs στα “Frida Live Logs”.
Shell
MobSF παρέχει επίσης ένα shell με μερικές adb commands, MobSF commands, και κοινές shell commands στο κάτω μέρος της σελίδας dynamic analysis. Μερικές ενδιαφέρουσες εντολές:
help
shell ls
activities
exported_activities
services
receivers
HTTP tools
Όταν το HTTP traffic καταγράφεται μπορείτε να δείτε μια άσχημη προβολή της καταγεγραμμένης κίνησης στο κουμπί “HTTP(S) Traffic” στο κάτω μέρος ή μια πιο ευχάριστη προβολή στο πράσινο κουμπί “Start HTTPTools”. Από τη δεύτερη επιλογή, μπορείτε να στέλνετε τα καταγεγραμμένα αιτήματα σε proxies όπως Burp ή Owasp ZAP.
Για να το κάνετε, εκκινήστε Burp –> απενεργοποιήστε το Intercept –> στο MobSB HTTPTools επιλέξτε το αίτημα –> πατήστε “Send to Fuzzer” –> επιλέξτε τη διεύθυνση του proxy (http://127.0.0.1:8080\).
Μόλις ολοκληρώσετε τη δυναμική ανάλυση με MobSF μπορείτε να πατήσετε το “Start Web API Fuzzer” για να fuzz τα http requests και να αναζητήσετε ευπάθειες.
Tip
Μετά από την εκτέλεση δυναμικής ανάλυσης με MobSF, οι ρυθμίσεις proxy ενδέχεται να είναι εσφαλμένα διαμορφωμένες και να μην μπορείτε να τις διορθώσετε από το GUI. Μπορείτε να διορθώσετε τις ρυθμίσεις proxy εκτελώντας:
adb shell settings put global http_proxy :0
Assisted Dynamic Analysis with Inspeckage
Μπορείτε να αποκτήσετε το εργαλείο από Inspeckage.
Αυτό το εργαλείο θα χρησιμοποιήσει μερικά Hooks για να σας ενημερώνει τι συμβαίνει στην εφαρμογή ενώ πραγματοποιείτε μια δυναμική ανάλυση.
Yaazhini
Αυτό είναι ένα εξαιρετικό εργαλείο για την εκτέλεση στατικής ανάλυσης με GUI
.png)
Qark
Το εργαλείο αυτό έχει σχεδιαστεί για να αναζητά διάφορες security related Android application vulnerabilities, είτε στον source code είτε σε packaged APKs. Το εργαλείο είναι επίσης ικανά να δημιουργήσει ένα “Proof-of-Concept” deployable APK και ADB commands, για να εκμεταλλευτεί κάποιες από τις εντοπισθείσες ευπάθειες (Exposed activities, intents, tapjacking…). Όπως και με το Drozer, δεν υπάρχει ανάγκη για root της συσκευής δοκιμής.
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java
ReverseAPK
- Εμφανίζει όλα τα εξαγόμενα αρχεία για εύκολη αναφορά
- Αυτόματα decompile αρχεία APK σε μορφή Java και Smali
- Αναλύει το AndroidManifest.xml για κοινές ευπάθειες και συμπεριφορά
- Στατική ανάλυση πηγαίου κώδικα για κοινές ευπάθειες και συμπεριφορά
- Πληροφορίες συσκευής
- και άλλα
reverse-apk relative/path/to/APP.apk
SUPER Android Analyzer
Το SUPER είναι μια εφαρμογή γραμμής εντολών που μπορεί να χρησιμοποιηθεί σε Windows, MacOS X και Linux, και αναλύει αρχεία .apk αναζητώντας ευπάθειες. Το κάνει αυτό αποσυμπιέζοντας τα APKs και εφαρμόζοντας μια σειρά κανόνων για να εντοπίσει αυτές τις ευπάθειες.
Όλοι οι κανόνες είναι συγκεντρωμένοι σε ένα αρχείο rules.json, και κάθε εταιρεία ή tester μπορεί να δημιουργήσει τους δικούς της κανόνες για να αναλύσει ό,τι χρειάζεται.
Download the latest binaries from in the download page
super-analyzer {apk_file}
StaCoAn
.png)
Το StaCoAn είναι ένα εργαλείο crossplatform που βοηθά προγραμματιστές, bugbounty hunters και ethical hackers να πραγματοποιούν static code analysis σε εφαρμογές κινητών.
Η ιδέα είναι ότι σύρετε και αποθέτετε το αρχείο της mobile εφαρμογής σας (ένα .apk ή .ipa αρχείο) στην εφαρμογή StaCoAn και αυτή θα δημιουργήσει για εσάς μια οπτική και φορητή αναφορά. Μπορείτε να προσαρμόσετε τις ρυθμίσεις και τα wordlists για να αποκτήσετε μια εξατομικευμένη εμπειρία.
Κατεβάστε latest release:
./stacoan
AndroBugs
Το AndroBugs Framework είναι ένα Android vulnerability analysis system που βοηθά προγραμματιστές ή hackers να εντοπίσουν πιθανές security vulnerabilities σε εφαρμογές Android.
Windows releases
python androbugs.py -f [APK file]
androbugs.exe -f [APK file]
Androwarn
Androwarn είναι ένα εργαλείο του οποίου ο κύριος σκοπός είναι να εντοπίζει και να προειδοποιεί τον χρήστη για πιθανές κακόβουλες συμπεριφορές που αναπτύσσονται από μια εφαρμογή Android.
Η ανίχνευση πραγματοποιείται με τη static analysis του Dalvik bytecode της εφαρμογής, που αναπαρίσταται ως Smali, με τη βιβλιοθήκη androguard.
Το εργαλείο αυτό αναζητά common behavior of “bad” applications όπως: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution…
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
MARA Framework
.png)
MARA είναι ένα Mobile Application Reverse engineering and Analysis Framework. Είναι ένα εργαλείο που συγκεντρώνει κοινά χρησιμοποιούμενα mobile application reverse engineering and analysis tools, για να βοηθήσει στο testing mobile applications εναντίον των OWASP mobile security threats. Ο στόχος του είναι να κάνει αυτή την εργασία πιο απλή και πιο φιλική προς τους mobile application developers και security professionals.
Μπορεί να:
- Εξάγει Java και Smali code χρησιμοποιώντας διαφορετικά εργαλεία
- Αναλύει APKs χρησιμοποιώντας: smalisca, ClassyShark, androbugs, androwarn, APKiD
- Εξάγει private information από το APK χρησιμοποιώντας regexps.
- Αναλύει το Manifest.
- Αναλύει τα domains που βρέθηκαν χρησιμοποιώντας: pyssltest, testssl και whatweb
- Deobfuscate APK μέσω apk-deguard.com
Koodous
Χρήσιμο για την ανίχνευση malware: https://koodous.com/
Obfuscating/Deobfuscating code
Σημειώστε ότι, ανάλογα με την υπηρεσία και τη ρύθμιση που χρησιμοποιείται για να obfuscate τον κώδικα, τα μυστικά ενδέχεται να παραμείνουν obfuscated ή όχι.
ProGuard
From Wikipedia: ProGuard is an open source command-line tool that shrinks, optimizes and obfuscates Java code. It is able to optimize bytecode as well as detect and remove unused instructions. ProGuard is free software and is distributed under the GNU General Public License, version 2.
Το ProGuard διανέμεται ως μέρος του Android SDK και εκτελείται κατά το build της εφαρμογής σε release mode.
DexGuard
Βρείτε έναν βήμα-προς-βήμα οδηγό για να deobfuscate το apk στο https://blog.lexfo.fr/dexguard.html
(Από αυτόν τον οδηγό) Την τελευταία φορά που ελέγξαμε, ο τρόπος λειτουργίας του Dexguard ήταν:
- φορτώνει έναν resource ως InputStream;
- περνάει το αποτέλεσμα σε μια κλάση που κληρονομεί από FilterInputStream για να το decrypt;
- κάνει κάποια άσκοπη obfuscation για να χάσει λίγο χρόνο από τον reverser;
- περνάει το decrypted αποτέλεσμα σε ZipInputStream για να πάρει ένα DEX αρχείο;
- τελικά φορτώνει το αποτέλεσμα DEX ως Resource χρησιμοποιώντας τη μέθοδο
loadDex.
DeGuard
DeGuard reverses the process of obfuscation performed by Android obfuscation tools. This enables numerous security analyses, including code inspection and predicting libraries.
Μπορείτε να ανεβάσετε ένα obfuscated APK στην πλατφόρμα τους.
[Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
Αυτό είναι ένα LLM εργαλείο για να εντοπίσει πιθανές ευπάθειες ασφαλείας σε android apps και να deobfuscate τον κώδικα των android app. Χρησιμοποιεί το Google’s Gemini public API.
Simplify
Είναι ένας generic android deobfuscator. Το Simplify practically εκτελεί virtually μια εφαρμογή για να κατανοήσει τη συμπεριφορά της και στη συνέχεια προσπαθεί να optimize τον κώδικα ώστε να συμπεριφέρεται ταυτόσημα αλλά να είναι πιο κατανοητός για έναν άνθρωπο. Κάθε τύπος optimization είναι απλός και generic, οπότε δεν έχει σημασία τι συγκεκριμένου τύπου obfuscation έχει χρησιμοποιηθεί.
APKiD
APKiD σας δίνει πληροφορίες για το πως δημιουργήθηκε ένα APK. Ταυτοποιεί πολλούς compilers, packers, obfuscators και άλλα παράξενα πράγματα. Είναι το PEiD για Android.
Manual
Read this tutorial to learn some tricks on how to reverse custom obfuscation
Labs
Androl4b
AndroL4b είναι μια Android security virtual machine βασισμένη σε ubuntu-mate που περιλαμβάνει μια συλλογή από τα πιο πρόσφατα frameworks, tutorials και labs από διάφορους security geeks και researchers για reverse engineering και malware analysis.
References
- Play Integrity API: How It Works & How to Bypass It
- https://owasp.org/www-project-mobile-app-security/
- https://appsecwiki.com/#/ It is a great list of resources
- https://maddiestone.github.io/AndroidAppRE/ Android quick course
- https://manifestsecurity.com/android-application-security/
- https://github.com/Ralireza/Android-Security-Teryaagh
- https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec
- SSLPinDetect: Advanced SSL Pinning Detection for Android Security Analysis
- SSLPinDetect GitHub
- smali-sslpin-patterns
- Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa
- CoRPhone — Android in-memory JNI execution and packaging pipeline
- justapk — multi-source APK downloader with Cloudflare bypass
- Jezail rooted Android pentesting toolkit (REST API + Flutter UI)
- BeatBanker: A dual‑mode Android Trojan
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


