Ανάλυση Εγγενών Βιβλιοθηκών
Reading time: 6 minutes
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.
Για περισσότερες πληροφορίες δείτε: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
Οι εφαρμογές Android μπορούν να χρησιμοποιούν εγγενείς βιβλιοθήκες, συνήθως γραμμένες σε C ή C++, για εργασίες που απαιτούν υψηλή απόδοση. Οι δημιουργοί κακόβουλου λογισμικού εκμεταλλεύονται επίσης αυτές τις βιβλιοθήκες, καθώς τα ELF shared objects είναι ακόμα πιο δύσκολα να αποσυμπιεστούν από τον κώδικα DEX/OAT. Αυτή η σελίδα εστιάζει σε πρακτικές ροές εργασίας και πρόσφατες βελτιώσεις εργαλείων (2023-2025) που διευκολύνουν την ανάλυση των αρχείων Android .so
.
Γρήγορη ροή εργασίας για μια πρόσφατα αποσυμπιεσμένη libfoo.so
- Εξαγωγή της βιβλιοθήκης
# Από μια εγκατεστημένη εφαρμογή
adb shell "run-as <pkg> cat lib/arm64-v8a/libfoo.so" > libfoo.so
# Ή από το APK (zip)
unzip -j target.apk "lib/*/libfoo.so" -d extracted_libs/
- Καθορισμός αρχιτεκτονικής & προστασιών
file libfoo.so # arm64 ή arm32 / x86
readelf -h libfoo.so # OS ABI, PIE, NX, RELRO, κ.λπ.
checksec --file libfoo.so # (peda/pwntools)
- Καταγραφή εξαγόμενων συμβόλων & JNI bindings
readelf -s libfoo.so | grep ' Java_' # δυναμικά συνδεδεμένο JNI
strings libfoo.so | grep -i "RegisterNatives" -n # στατικά καταχωρημένο JNI
- Φόρτωση σε αποσυμπιεστή (Ghidra ≥ 11.0, IDA Pro, Binary Ninja, Hopper ή Cutter/Rizin) και εκτέλεση αυτόματης ανάλυσης. Οι νεότερες εκδόσεις του Ghidra εισήγαγαν έναν αποσυμπιεστή AArch64 που αναγνωρίζει PAC/BTI stubs και MTE tags, βελτιώνοντας σημαντικά την ανάλυση βιβλιοθηκών που έχουν κατασκευαστεί με το Android 14 NDK.
- Απόφαση για στατική ή δυναμική ανάλυση: ο κωδικός που έχει αφαιρεθεί ή παραποιηθεί συχνά χρειάζεται εργαλεία παρακολούθησης (Frida, ptrace/gdbserver, LLDB).
Δυναμική Παρακολούθηση (Frida ≥ 16)
Η σειρά 16 της Frida έφερε αρκετές βελτιώσεις ειδικά για Android που βοηθούν όταν ο στόχος χρησιμοποιεί σύγχρονες βελτιστοποιήσεις Clang/LLD:
- Ο
thumb-relocator
μπορεί τώρα να συνδέει μικρές ARM/Thumb συναρτήσεις που παράγονται από την επιθετική ευθυγράμμιση του LLD (--icf=all
). - Η καταμέτρηση και η επανασύνδεση ELF import slots λειτουργεί στο Android, επιτρέποντας την επιδιόρθωση
dlopen()
/dlsym()
ανά μονάδα όταν οι inline hooks απορρίπτονται. - Η σύνδεση Java διορθώθηκε για το νέο ART quick-entrypoint που χρησιμοποιείται όταν οι εφαρμογές μεταγλωττίζονται με
--enable-optimizations
στο Android 14.
Παράδειγμα: καταμέτρηση όλων των συναρτήσεων που έχουν καταχωρηθεί μέσω RegisterNatives
και εξαγωγή των διευθύνσεών τους κατά την εκτέλεση:
Java.perform(function () {
var Runtime = Java.use('java.lang.Runtime');
var register = Module.findExportByName(null, 'RegisterNatives');
Interceptor.attach(register, {
onEnter(args) {
var envPtr = args[0];
var clazz = Java.cast(args[1], Java.use('java.lang.Class'));
var methods = args[2];
var count = args[3].toInt32();
console.log('[+] RegisterNatives on ' + clazz.getName() + ' -> ' + count + ' methods');
// iterate & dump (JNI nativeMethod struct: name, sig, fnPtr)
}
});
});
Frida θα λειτουργήσει αμέσως σε συσκευές με ενεργοποιημένο PAC/BTI (Pixel 8/Android 14+) αρκεί να χρησιμοποιείτε frida-server 16.2 ή νεότερη έκδοση – παλαιότερες εκδόσεις απέτυχαν να εντοπίσουν το padding για inline hooks. citeturn5search2turn5search0
Πρόσφατες ευπάθειες που αξίζει να αναζητήσετε σε APKs
Έτος | CVE | Επηρεαζόμενη βιβλιοθήκη | Σημειώσεις |
---|---|---|---|
2023 | CVE-2023-4863 | libwebp ≤ 1.3.1 | Heap buffer overflow που είναι προσβάσιμο από native code που αποκωδικοποιεί εικόνες WebP. Πολλές εφαρμογές Android περιλαμβάνουν ευάλωτες εκδόσεις. Όταν δείτε ένα libwebp.so μέσα σε ένα APK, ελέγξτε την έκδοσή του και προσπαθήστε να εκμεταλλευτείτε ή να διορθώσετε. |
2024 | Πολλαπλά | OpenSSL 3.x σειρά | Πολλά ζητήματα ασφάλειας μνήμης και padding-oracle. Πολλές συσκευασίες Flutter & ReactNative περιλαμβάνουν τη δική τους libcrypto.so . |
Όταν εντοπίσετε third-party .so
αρχεία μέσα σε ένα APK, ελέγξτε πάντα το hash τους σε σχέση με τις upstream συμβουλές. Η SCA (Software Composition Analysis) είναι σπάνια σε κινητές συσκευές, οπότε οι παλιές ευάλωτες εκδόσεις είναι διαδεδομένες.
Τάσεις Anti-Reversing & Hardening (Android 13-15)
- Pointer Authentication (PAC) & Branch Target Identification (BTI): Το Android 14 ενεργοποιεί το PAC/BTI σε συστηματικές βιβλιοθήκες σε υποστηριζόμενο ARMv8.3+ silicon. Οι αποσυμπιεστές τώρα εμφανίζουν ψευδο-εντολές σχετικές με το PAC; για δυναμική ανάλυση, η Frida εισάγει trampolines μετά την αφαίρεση του PAC, αλλά τα προσαρμοσμένα trampolines σας θα πρέπει να καλούν
pacda
/autibsp
όπου είναι απαραίτητο. - MTE & Scudo hardened allocator: η σήμανση μνήμης είναι προαιρετική, αλλά πολλές εφαρμογές που γνωρίζουν το Play-Integrity κατασκευάζονται με
-fsanitize=memtag
; χρησιμοποιήστεsetprop arm64.memtag.dump 1
συνadb shell am start ...
για να καταγράψετε σφάλματα σήμανσης. - LLVM Obfuscator (opaque predicates, control-flow flattening): εμπορικοί πακερ (π.χ., Bangcle, SecNeo) προστατεύουν ολοένα και περισσότερο native κώδικα, όχι μόνο Java; αναμένετε ψευδείς ροές ελέγχου και κρυπτογραφημένα blobs συμβολοσειρών σε
.rodata
.
Πόροι
- Μάθηση ARM Assembly: Azeria Labs – ARM Assembly Basics
- JNI & NDK Documentation: Oracle JNI Spec · Android JNI Tips · NDK Guides
- Debugging Native Libraries: Debug Android Native Libraries Using JEB Decompiler
Αναφορές
- Frida 16.x change-log (Android hooking, tiny-function relocation) – frida.re/news citeturn5search0
- NVD advisory for
libwebp
overflow CVE-2023-4863 – nvd.nist.gov citeturn2search0
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.