mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
45 lines
4.7 KiB
Markdown
45 lines
4.7 KiB
Markdown
# Ανάλυση Εγγενών Βιβλιοθηκών
|
||
|
||
{{#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}}
|