5.3 KiB
Yerel Kütüphaneleri Tersine Mühendislik
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Ekip Uzmanı (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Ekip Uzmanı (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da 🐦 @hacktricks_live bizi takip edin.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Daha fazla bilgi için kontrol edin: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
Android uygulamaları, performans açısından kritik görevler için genellikle C veya C++ ile yazılmış yerel kütüphaneler kullanabilir. Kötü amaçlı yazılım yaratıcıları da bu kütüphaneleri kullanır, çünkü bunları tersine mühendislik yapmak DEX bytecode'dan daha zordur. Bu bölüm, Android'e özel tersine mühendislik becerilerini vurgular, montaj dillerini öğretmek yerine. Uyum sağlamak için ARM ve x86 sürümleri sağlanmaktadır.
Ana Noktalar:
- Android Uygulamalarında Yerel Kütüphaneler:
- Performans yoğun görevler için kullanılır.
- Tersine mühendislik yapmayı zorlaştıran C veya C++ ile yazılmıştır.
- Linux ikili dosyalarına benzer şekilde
.so
(paylaşılan nesne) formatında bulunur. - Kötü amaçlı yazılım yaratıcıları, analizi zorlaştırmak için yerel kodu tercih eder.
- Java Yerel Arayüzü (JNI) & Android NDK:
- JNI, Java yöntemlerinin yerel kodda uygulanmasına olanak tanır.
- NDK, yerel kod yazmak için Android'e özgü bir araç setidir.
- JNI ve NDK, Java (veya Kotlin) kodunu yerel kütüphanelerle köprüler.
- Kütüphane Yükleme ve Çalıştırma:
- Kütüphaneler,
System.loadLibrary
veyaSystem.load
kullanılarak belleğe yüklenir. - Kütüphane yüklenirken JNI_OnLoad çalıştırılır.
- Java'da tanımlanan yerel yöntemler, yerel işlevlere bağlanarak çalıştırılmasını sağlar.
- Java Yöntemlerini Yerel İşlevlere Bağlama:
- Dinamik Bağlama: Yerel kütüphanelerdeki işlev adları belirli bir desene uyar, otomatik bağlamaya olanak tanır.
- Statik Bağlama: Bağlama için
RegisterNatives
kullanır, işlev adlandırma ve yapı konusunda esneklik sağlar. - Tersine Mühendislik Araçları ve Teknikleri:
- Ghidra ve IDA Pro gibi araçlar, yerel kütüphaneleri analiz etmeye yardımcı olur.
JNIEnv
, JNI işlevlerini ve etkileşimlerini anlamak için kritik öneme sahiptir.- Kütüphaneleri yükleme, yöntemleri bağlama ve yerel işlevleri tanımlama pratiği yapmak için alıştırmalar sağlanmaktadır.
Kaynaklar:
- ARM Montaj Dili Öğrenimi:
- Temel mimariyi daha iyi anlamak için önerilir.
- Azeria Labs'tan ARM Montaj Dili Temelleri önerilmektedir.
- JNI & NDK Belgeleri:
- Oracle'ın JNI Spesifikasyonu
- Android'in JNI İpuçları
- NDK ile Başlarken
- Yerel Kütüphaneleri Hata Ayıklama:
- JEB Decompiler Kullanarak Android Yerel Kütüphanelerini Hata Ayıklama
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Ekip Uzmanı (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Ekip Uzmanı (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da 🐦 @hacktricks_live bizi takip edin.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.