# Ανάλυση Εγγενών Βιβλιοθηκών {{#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++, για εργασίες που απαιτούν υψηλή απόδοση. Οι δημιουργοί κακόβουλου λογισμικού χρησιμοποιούν επίσης αυτές τις βιβλιοθήκες, καθώς είναι πιο δύσκολο να αναλυθούν σε αντίθεση με τον κωδικό DEX. Η ενότητα τονίζει τις δεξιότητες αντίστροφης μηχανικής προσαρμοσμένες για το Android, αντί να διδάσκει γλώσσες συναρμολόγησης. Παρέχονται εκδόσεις ARM και x86 των βιβλιοθηκών για συμβατότητα. ### Κύρια Σημεία: - **Εγγενείς Βιβλιοθήκες σε Εφαρμογές Android:** - Χρησιμοποιούνται για εργασίες που απαιτούν υψηλή απόδοση. - Γραμμένες σε C ή C++, καθιστώντας την αντίστροφη μηχανική δύσκολη. - Βρίσκονται σε μορφή `.so` (shared object), παρόμοια με τα εκτελέσιμα Linux. - Οι δημιουργοί κακόβουλου λογισμικού προτιμούν τον εγγενή κώδικα για να κάνουν την ανάλυση πιο δύσκολη. - **Java Native Interface (JNI) & Android NDK:** - Το JNI επιτρέπει την υλοποίηση μεθόδων Java σε εγγενή κώδικα. - Το NDK είναι ένα σύνολο εργαλείων ειδικά για το Android για τη συγγραφή εγγενή κώδικα. - Το JNI και το NDK γεφυρώνουν τον κώδικα Java (ή Kotlin) με εγγενείς βιβλιοθήκες. - **Φόρτωση και Εκτέλεση Βιβλιοθηκών:** - Οι βιβλιοθήκες φορτώνονται στη μνήμη χρησιμοποιώντας `System.loadLibrary` ή `System.load`. - Το JNI_OnLoad εκτελείται κατά τη φόρτωση της βιβλιοθήκης. - Οι δηλωμένες από την Java εγγενείς μέθοδοι συνδέονται με εγγενείς συναρτήσεις, επιτρέποντας την εκτέλεση. - **Σύνδεση Μεθόδων Java με Εγγενείς Συναρτήσεις:** - **Δυναμική Σύνδεση:** Τα ονόματα συναρτήσεων στις εγγενείς βιβλιοθήκες ταιριάζουν με ένα συγκεκριμένο μοτίβο, επιτρέποντας την αυτόματη σύνδεση. - **Στατική Σύνδεση:** Χρησιμοποιεί το `RegisterNatives` για σύνδεση, παρέχοντας ευελιξία στην ονοματολογία και τη δομή των συναρτήσεων. - **Εργαλεία και Τεχνικές Αντίστροφης Μηχανικής:** - Εργαλεία όπως το Ghidra και το IDA Pro βοηθούν στην ανάλυση εγγενών βιβλιοθηκών. - Το `JNIEnv` είναι κρίσιμο για την κατανόηση των συναρτήσεων και των αλληλεπιδράσεων του JNI. - Παρέχονται ασκήσεις για την πρακτική φόρτωσης βιβλιοθηκών, σύνδεσης μεθόδων και αναγνώρισης εγγενών συναρτήσεων. ### Πόροι: - **Μάθηση ARM Assembly:** - Προτείνεται για μια πιο βαθιά κατανόηση της υποκείμενης αρχιτεκτονικής. - [ARM Assembly Basics](https://azeria-labs.com/writing-arm-assembly-part-1/) από το Azeria Labs συνιστάται. - **Τεκμηρίωση JNI & NDK:** - [Oracle's JNI Specification](https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html) - [Android's JNI Tips](https://developer.android.com/training/articles/perf-jni) - [Getting Started with the NDK](https://developer.android.com/ndk/guides/) - **Αποσφαλμάτωση Εγγενών Βιβλιοθηκών:** - [Debug Android Native Libraries Using JEB Decompiler](https://medium.com/@shubhamsonani/how-to-debug-android-native-libraries-using-jeb-decompiler-eec681a22cf3) {{#include ../../banners/hacktricks-training.md}}