Ανάλυση Εγγενών Βιβλιοθηκών

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

Για περισσότερες πληροφορίες δείτε: 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 <pkg> cat lib/arm64-v8a/libfoo.so" > libfoo.so
# Ή από το APK (zip)
unzip -j target.apk "lib/*/libfoo.so" -d extracted_libs/
  1. Καθορισμός αρχιτεκτονικής & προστασιών
bash
file libfoo.so        # arm64 ή arm32 / x86
readelf -h libfoo.so  # OS ABI, PIE, NX, RELRO, κ.λπ.
checksec --file libfoo.so  # (peda/pwntools)
  1. Καταγραφή εξαγόμενων συμβόλων & JNI bindings
bash
readelf -s libfoo.so | grep ' Java_'     # δυναμικά συνδεδεμένο JNI
strings libfoo.so   | grep -i "RegisterNatives" -n   # στατικά καταχωρημένο JNI
  1. Φόρτωση σε αποσυμπιεστή (Ghidra ≥ 11.0, IDA Pro, Binary Ninja, Hopper ή Cutter/Rizin) και εκτέλεση αυτόματης ανάλυσης. Οι νεότερες εκδόσεις του Ghidra εισήγαγαν έναν αποσυμπιεστή AArch64 που αναγνωρίζει PAC/BTI stubs και MTE tags, βελτιώνοντας σημαντικά την ανάλυση βιβλιοθηκών που έχουν κατασκευαστεί με το Android 14 NDK.
  2. Απόφαση για στατική ή δυναμική ανάλυση: ο κωδικός που έχει αφαιρεθεί ή παραποιηθεί συχνά χρειάζεται εργαλεία παρακολούθησης (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Επηρεαζόμενη βιβλιοθήκηΣημειώσεις
2023CVE-2023-4863libwebp ≤ 1.3.1Heap 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.

Πόροι

Αναφορές

  • Frida 16.x change-log (Android hooking, tiny-function relocation) – frida.re/news citeturn5search0
  • NVD advisory for libwebp overflow CVE-2023-4863 – nvd.nist.gov citeturn2search0

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