5.2 KiB
Native Kütüphanelerin Tersine Mühendisliği
AWS hackleme becerilerinizi sıfırdan kahramana dönüştürün htARTE (HackTricks AWS Kırmızı Takım Uzmanı)ile!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek veya HackTricks'i PDF olarak indirmek için ABONELİK PLANLARINI kontrol edin!
- Resmi PEASS & HackTricks ürünlerini edinin
- Özel NFT'lerden oluşan koleksiyonumuz olan The PEASS Family'yi keşfedin
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter'da 🐦 @carlospolopm takip edin.
- Hacking hilelerinizi göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
Daha fazla bilgi için: 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ış olan yerel kütüphaneleri kullanabilir. Kötü amaçlı yazılım oluşturucuları da bu kütüphaneleri kullanır çünkü DEX bytecode'dan daha zor tersine mühendislik yapılırlar. Bu bölüm, Android'e özgü tersine mühendislik becerilerine odaklanırken, derleme dillerini öğretmek yerine Android'e özgü tersine mühendislik becerilerini vurgular. Uyumluluk için ARM ve x86 sürümleri sağlanmıştır.
Ana Noktalar:
-
Android Uygulamalarında Yerel Kütüphaneler:
-
Performans yoğun görevler için kullanılır.
-
Tersine mühendisliği 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 oluşturucuları analizi zorlaştırmak için yerel kodu tercih eder.
-
Java Native Interface (JNI) ve Android NDK:
-
JNI, Java yöntemlerinin yerel kodda uygulanmasına izin verir.
-
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 Yürütme:
-
Kütüphaneler, belleğe
System.loadLibrary
veyaSystem.load
kullanılarak yüklenir. -
Kütüphane yüklendiğinde JNI_OnLoad çalıştırılır.
-
Java tarafında bildirilen yerel yöntemler, yerel işlevlerle bağlantı kurarak yürütme sağlar.
-
Java Yöntemlerini Yerel İşlevlere Bağlama:
-
Dinamik Bağlama: Yerel kütüphanelerdeki işlev adları belirli bir desene uyar, böylece otomatik bağlantı sağlanır.
-
Statik Bağlama: Bağlantı 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şimleri anlamak için önemlidir. -
Kütüphane yükleme, yöntemleri bağlama ve yerel işlevleri tanımlama pratiği için egzersizler sunulur.
Kaynaklar:
-
ARM Assembly Öğrenme:
-
Temel mimari anlayışını daha derinlemesine anlamak için önerilir.
-
Azeria Labs'ten ARM Assembly Temelleri önerilir.
-
JNI ve NDK Belgeleri:
-
Yerel Kütüphanelerin Hata Ayıklanması:
-
JEB Decompiler Kullanarak Android Yerel Kütüphanelerini Hata Ayıklama
AWS hackleme becerilerinizi sıfırdan kahramana dönüştürün htARTE (HackTricks AWS Kırmızı Takım Uzmanı)ile!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek veya HackTricks'i PDF olarak indirmek için ABONELİK PLANLARINI kontrol edin!
- Resmi PEASS & HackTricks ürünlerini edinin
- Özel NFT'lerden oluşan koleksiyonumuz olan The PEASS Family'yi keşfedin
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter'da 🐦 @carlospolopm takip edin.
- Hacking hilelerinizi göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.