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

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ışı

  1. Kütüphaneyi çıkarın
bash
# 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/
  1. Mimari ve korumaları tanımlayın
bash
file libfoo.so        # arm64 veya arm32 / x86
readelf -h libfoo.so  # OS ABI, PIE, NX, RELRO, vb.
checksec --file libfoo.so  # (peda/pwntools)
  1. Dışa aktarılan sembolleri ve JNI bağlamalarını listeleyin
bash
readelf -s libfoo.so | grep ' Java_'     # dinamik bağlantılı JNI
strings libfoo.so   | grep -i "RegisterNatives" -n   # statik kayıtlı JNI
  1. 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ı.
  2. 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:

javascript
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. citeturn5search2turn5search0


APK'lerde avlanmaya değer son güvenlik açıkları

YılCVEEtkilenen kütüphaneNotlar
2023CVE-2023-4863libwebp ≤ 1.3.1WebP 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.
2024Birden FazlaOpenSSL 3.x serisiBirç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çin setprop arm64.memtag.dump 1 ve adb 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

Referanslar

  • Frida 16.x değişiklik günlüğü (Android hooking, tiny-function relocation) – frida.re/news citeturn5search0
  • libwebp taşma CVE-2023-4863 için NVD tavsiyesi – nvd.nist.gov citeturn2search0

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