Yerel Kütüphaneleri Tersine Mühendislik
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)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- 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 kötüye kullanır çünkü ELF paylaşılan nesneleri, DEX/OAT bayt kodundan daha zor decompile edilir. Bu sayfa, Android .so
dosyalarını tersine mühendislik yapmayı kolaylaştıran pratik iş akışlarına ve son araç geliştirmelerine (2023-2025) odaklanmaktadır.
Yeni çekilmiş libfoo.so
için Hızlı Triage İş Akışı
- Kütüphaneyi çıkarın
# Yüklenmiş bir uygulamadan
adb shell "run-as <pkg> cat lib/arm64-v8a/libfoo.so" > libfoo.so
# Ya da APK'dan (zip)
unzip -j target.apk "lib/*/libfoo.so" -d extracted_libs/
- Mimari ve korumaları tanımlayın
file libfoo.so # arm64 veya arm32 / x86
readelf -h libfoo.so # OS ABI, PIE, NX, RELRO, vb.
checksec --file libfoo.so # (peda/pwntools)
- Dışa aktarılan sembolleri ve JNI bağlamalarını listeleyin
readelf -s libfoo.so | grep ' Java_' # dinamik bağlantılı JNI
strings libfoo.so | grep -i "RegisterNatives" -n # statik kayıtlı JNI
- Bir decompiler yükleyin (Ghidra ≥ 11.0, IDA Pro, Binary Ninja, Hopper veya Cutter/Rizin) ve otomatik analiz çalıştırın. Daha yeni Ghidra sürümleri, Android 14 NDK ile oluşturulmuş kütüphanelerin analizini büyük ölçüde iyileştiren PAC/BTI stub'larını ve MTE etiketlerini tanıyan bir AArch64 decompiler tanıttı.
- Statik ve dinamik tersine mühendislik arasında karar verin: soyulmuş, obfuscate edilmiş kod genellikle enstrümantasyon (Frida, ptrace/gdbserver, LLDB) gerektirir.
Dinamik Enstrümantasyon (Frida ≥ 16)
Frida’nın 16 serisi, hedef modern Clang/LLD optimizasyonları kullandığında yardımcı olan birkaç Android'e özgü iyileştirme getirdi:
thumb-relocator
artık LLD’nin agresif hizalaması (--icf=all
) tarafından üretilen küçük ARM/Thumb fonksiyonlarını hook yapabilir.- ELF import slotlarını listeleme ve yeniden bağlama Android'de çalışır, inline hook'lar reddedildiğinde modül başına
dlopen()
/dlsym()
yamanmasına olanak tanır. - Java hook'lama, Android 14'te
--enable-optimizations
ile derlenmiş uygulamalar için kullanılan yeni ART hızlı giriş noktası için düzeltildi.
Örnek: RegisterNatives
aracılığıyla kaydedilen tüm fonksiyonları listelemek ve çalışma zamanında adreslerini dökmek:
Java.perform(function () {
var Runtime = Java.use('java.lang.Runtime');
var register = Module.findExportByName(null, 'RegisterNatives');
Interceptor.attach(register, {
onEnter(args) {
var envPtr = args[0];
var clazz = Java.cast(args[1], Java.use('java.lang.Class'));
var methods = args[2];
var count = args[3].toInt32();
console.log('[+] RegisterNatives on ' + clazz.getName() + ' -> ' + count + ' methods');
// iterate & dump (JNI nativeMethod struct: name, sig, fnPtr)
}
});
});
Frida, frida-server 16.2 veya daha yenisini kullandığınız sürece, PAC/BTI destekli cihazlarda (Pixel 8/Android 14+) kutudan çıktığı gibi çalışacaktır – daha önceki sürümler, satır içi kancalar için padding bulmakta başarısız oldu. citeturn5search2turn5search0
APK'lerde avlanmaya değer son güvenlik açıkları
Yıl | CVE | Etkilenen kütüphane | Notlar |
---|---|---|---|
2023 | CVE-2023-4863 | libwebp ≤ 1.3.1 | WebP görüntülerini çözen yerel koddan erişilebilen yığın tampon taşması. Birçok Android uygulaması, savunmasız sürümleri paketler. Bir APK içinde libwebp.so gördüğünüzde, sürümünü kontrol edin ve istismar veya yamanma girişiminde bulunun. |
2024 | Birden Fazla | OpenSSL 3.x serisi | Birçok bellek güvenliği ve padding-oracle sorunu. Birçok Flutter & ReactNative paketi kendi libcrypto.so dosyalarını taşır. |
Bir APK içinde üçüncü taraf .so
dosyaları gördüğünüzde, her zaman hash'lerini yukarı akış tavsiyeleriyle karşılaştırın. SCA (Yazılım Bileşimi Analizi) mobilde yaygın değildir, bu nedenle eski savunmasız yapılar yaygındır.
Anti-Tersten Çevirme & Sertleştirme trendleri (Android 13-15)
- Pointer Authentication (PAC) & Branch Target Identification (BTI): Android 14, desteklenen ARMv8.3+ silikon üzerinde sistem kütüphanelerinde PAC/BTI'yi etkinleştirir. Decompile araçları artık PAC ile ilgili sahte talimatları gösterir; dinamik analiz için Frida, PAC'ı kaldırdıktan sonra trampolin enjekte eder, ancak özel trampolinleriniz gerektiğinde
pacda
/autibsp
çağırmalıdır. - MTE & Scudo sertleştirilmiş ayırıcı: bellek etiketleme isteğe bağlıdır ancak birçok Play-Integrity farkındalığına sahip uygulama
-fsanitize=memtag
ile derlenir; etiket hatalarını yakalamak içinsetprop arm64.memtag.dump 1
veadb shell am start ...
kullanın. - LLVM Obfuscator (opak predikatlar, kontrol akışı düzleştirme): ticari paketleyiciler (örneğin, Bangcle, SecNeo) giderek yerel kodu korumakta, yalnızca Java değil;
.rodata
içinde sahte kontrol akışı ve şifreli dize blokları bekleyin.
Kaynaklar
- ARM Assembly Öğrenme: Azeria Labs – ARM Assembly Temelleri
- JNI & NDK Dokümantasyonu: Oracle JNI Spesifikasyonu · Android JNI İpuçları · NDK Kılavuzları
- Yerel Kütüphaneleri Hata Ayıklama: JEB Decompiler Kullanarak Android Yerel Kütüphanelerini Hata Ayıklama
Referanslar
- Frida 16.x değişiklik günlüğü (Android hooking, tiny-function relocation) – frida.re/news citeturn5search0
libwebp
taşma CVE-2023-4863 için NVD tavsiyesi – nvd.nist.gov citeturn2search0
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)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.