Yerel Kütüphaneleri Tersine Mühendislik
Reading time: 3 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
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, montaj dillerini öğretmek yerine Android'e özel tersine mühendislik becerilerini vurgular. 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) ve 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 birleştirir.
- 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şlevlerle bağlantı kurarak ç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ısında 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 Assembly Basics önerilmektedir.
- JNI ve 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
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.