# Ανάλυση Εγγενών Βιβλιοθηκών {{#include ../../banners/hacktricks-training.md}} **Για περισσότερες πληροφορίες δείτε:** [**https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html**](https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html) Οι εφαρμογές Android μπορούν να χρησιμοποιούν εγγενείς βιβλιοθήκες, συνήθως γραμμένες σε C ή C++, για εργασίες που απαιτούν υψηλή απόδοση. Οι δημιουργοί κακόβουλου λογισμικού εκμεταλλεύονται επίσης αυτές τις βιβλιοθήκες, καθώς τα ELF shared objects είναι ακόμα πιο δύσκολα να αποσυμπιεστούν από τον κώδικα DEX/OAT. Αυτή η σελίδα εστιάζει σε *πρακτικές* ροές εργασίας και *πρόσφατες* βελτιώσεις εργαλείων (2023-2025) που διευκολύνουν την ανάλυση των αρχείων Android `.so`. --- ### Γρήγορη ροή εργασίας για μια πρόσφατα αποσυμπιεσμένη `libfoo.so` 1. **Εξαγωγή της βιβλιοθήκης** ```bash # Από μια εγκατεστημένη εφαρμογή adb shell "run-as cat lib/arm64-v8a/libfoo.so" > libfoo.so # Ή από το APK (zip) unzip -j target.apk "lib/*/libfoo.so" -d extracted_libs/ ``` 2. **Καθορισμός αρχιτεκτονικής & προστασιών** ```bash file libfoo.so # arm64 ή arm32 / x86 readelf -h libfoo.so # OS ABI, PIE, NX, RELRO, κ.λπ. checksec --file libfoo.so # (peda/pwntools) ``` 3. **Καταγραφή εξαγόμενων συμβόλων & JNI bindings** ```bash readelf -s libfoo.so | grep ' Java_' # δυναμικά συνδεδεμένο JNI strings libfoo.so | grep -i "RegisterNatives" -n # στατικά καταχωρημένο JNI ``` 4. **Φόρτωση σε αποσυμπιεστή** (Ghidra ≥ 11.0, IDA Pro, Binary Ninja, Hopper ή Cutter/Rizin) και εκτέλεση αυτόματης ανάλυσης. Οι νεότερες εκδόσεις του Ghidra εισήγαγαν έναν αποσυμπιεστή AArch64 που αναγνωρίζει PAC/BTI stubs και MTE tags, βελτιώνοντας σημαντικά την ανάλυση βιβλιοθηκών που έχουν κατασκευαστεί με το Android 14 NDK. 5. **Απόφαση για στατική ή δυναμική ανάλυση:** ο κωδικός που έχει αφαιρεθεί ή παραποιηθεί συχνά χρειάζεται *εργαλεία παρακολούθησης* (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` και εξαγωγή των διευθύνσεών τους κατά την εκτέλεση: ```javascript 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. citeturn5search2turn5search0 --- ### Πρόσφατες ευπάθειες που αξίζει να αναζητήσετε σε APKs | Έτος | CVE | Επηρεαζόμενη βιβλιοθήκη | Σημειώσεις | |------|-----|------------------|-------| |2023|CVE-2023-4863|`libwebp` ≤ 1.3.1|Heap buffer overflow που είναι προσβάσιμο από native code που αποκωδικοποιεί εικόνες WebP. Πολλές εφαρμογές Android περιλαμβάνουν ευάλωτες εκδόσεις. Όταν δείτε ένα `libwebp.so` μέσα σε ένα APK, ελέγξτε την έκδοσή του και προσπαθήστε να εκμεταλλευτείτε ή να διορθώσετε.| citeturn2search0| |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](https://azeria-labs.com/writing-arm-assembly-part-1/) - **JNI & NDK Documentation:** [Oracle JNI Spec](https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html) · [Android JNI Tips](https://developer.android.com/training/articles/perf-jni) · [NDK Guides](https://developer.android.com/ndk/guides/) - **Debugging Native Libraries:** [Debug Android Native Libraries Using JEB Decompiler](https://medium.com/@shubhamsonani/how-to-debug-android-native-libraries-using-jeb-decompiler-eec681a22cf3) ### Αναφορές - Frida 16.x change-log (Android hooking, tiny-function relocation) – [frida.re/news](https://frida.re/news/) citeturn5search0 - NVD advisory for `libwebp` overflow CVE-2023-4863 – [nvd.nist.gov](https://nvd.nist.gov/vuln/detail/CVE-2023-4863) citeturn2search0 {{#include ../../banners/hacktricks-training.md}}