Smali ve yerel kod incelemesi: dex bayt kodu ve .so kütüphaneleri
jadx'in çözemediği yerde smali okur, dex yapısını tanır, JNI köprüsünü izler ve yerel kütüphanelerde derleyici korumalarını, gömülü sırları ve riskli işlevleri statik olarak denetlersin.
Seviye 301 · 22 ders · 18 pratik lab
Dersler
Dex ve smali
- dex dosya biçimi: sınıflar, yöntemler, dizgi tablosu
- Smali söz dizimi: yazmaçlar, türler ve çağrılar
- Smali'de akış okumak: koşullar, döngüler, istisnalar
- Smali ile Java'yı eşlemek: aynı yöntemi iki biçimde okumak
- Çoklu dex ve dinamik kod yükleme izleri
- Kısa görev: smali'de yazılmış bir lisans denetiminin ne yaptığını açıkla
Karartılmış kod
- R8 çıktısını tanımak: satır içi alma, sınıf birleştirme
- Eşleme dosyası ve retrace ile yığın izini çözmek
- Dizgi şifreleme desenlerini tanımak
- Yansıma ve dinamik çağrılar: statik analizin kör noktası
- Kısa görev: eşleme dosyasıyla karartılmış bir çökme kaydını okunur hâle getir
JNI ve yerel kütüphaneler
- JNI köprüsü: native yöntemler ve JNI_OnLoad
- ELF ve ABI: arm64-v8a, armeabi-v7a, x86_64
- readelf, nm ve strings ile kütüphaneyi tanımak
- Derleyici korumaları: PIE, RELRO, yığın koruması, FORTIFY
- Kısa görev: üç .so dosyasının derleyici korumalarını tabloya dök
Yerel kodu okumak
- ARM64 okuma temelleri: yazmaçlar, çağrı kuralı
- Ghidra ile .so çözmek: işlev listesi ve sözde kod
- Riskli C işlevleri ve tampon taşması işaretleri
- Yerel kodda gömülü anahtar ve elle yazılmış kripto
- Kısa görev: yerel kütüphaneye gömülü API anahtarını bul ve neden koruma sayılmadığını yaz
Bitirme
- Bitirme görevi: bir ödeme SDK'sının smali ve yerel kod inceleme notunu yaz
Pratik lablar
- Bir smali yönteminin ne döndürdüğünü bul: Kısa bir smali yöntemini oku ve dönüş değerini Java karşılığıyla yaz.
- Smali'de yazılmış lisans denetimini açıkla: Koşul ve dallanmaları izleyerek denetimin hangi durumda geçtiğini adım adım yaz.
- jadx'in çözemediği yöntemi smali'den yeniden yaz: Çözülemeyen bir doğrulama yöntemini smali'den okuyarak sözde koda çevir ve güvenlik açısından yorumla.
- Bir APK'daki dex dosyalarını ve sınıf sayılarını listele: Çoklu dex kullanan APK'da her dex dosyasının sınıf sayısını çıkar.
- Dizgi tablosunda şüpheli değerleri ara: dex dizgi tablosunu dök, adres ve anahtar benzeri değerleri ayır.
- Dinamik kod yükleme izlerini bul: Kodda sınıf yükleyici kullanımını ve assets içinde saklanan ek dex dosyasını bul, riski raporla.
- Eşleme dosyasında bir sınıfın gerçek adını bul: Karartılmış sınıf adının özgün adını eşleme dosyasından çıkar.
- Karartılmış çökme kaydını retrace ile çöz: Yığın izini eşleme dosyasıyla okunur hâle getir ve hatanın hangi yöntemde olduğunu yaz.
- Dizgi şifreleme desenini tanı ve belgeleyerek açıkla: Dizgilerin tek bir çözme yönteminden geçtiği APK'da deseni göster ve statik analizi nasıl sınırladığını yaz.
- Bir APK'daki .so dosyalarını ve mimarilerini listele: lib klasöründeki kütüphaneleri ABI'ye göre listele.
- Üç kütüphanenin derleyici korumalarını tabloya dök: readelf ile PIE, RELRO, yığın koruması ve FORTIFY durumunu çıkar.
- Korumasız kütüphaneyi yeniden derleyip doğrula: Derleme bayraklarını düzelt, kütüphaneyi yeniden üret ve korumaların açıldığını çıktıyla kanıtla.
- native olarak bildirilmiş yöntemleri bul: jadx çıktısında native yöntemleri ve yüklenen kütüphane adını listele.
- JNI işlevlerini simge tablosundan eşle: Kütüphanedeki dışa aktarılan simgeleri Java tarafındaki native yöntemlerle eşleştir.
- JNI_OnLoad ile kaydedilen yöntemleri çıkar: Ghidra sözde kodundan dinamik kaydedilen yöntem tablosunu bul ve hangi Java yöntemine bağlandığını belgeleyerek yaz.
- Yerel kütüphanede gömülü anahtarı strings ile bul: .so dosyasında API anahtarına benzeyen dizgiyi bul.
- Riskli C işlevlerinin kullanımını say: İçe aktarılan simgelerde strcpy ve sprintf gibi işlevleri bul ve çağrıldıkları yerleri listele.
- Ödeme SDK'sının yerel kod inceleme notunu yaz: Korumalar, gömülü anahtar, elle yazılmış kripto ve riskli işlev bulgularını bir inceleme notunda topla.
Kurs hakkında
jadx'in çözemediği yerde smali okur, dex yapısını tanır, JNI köprüsünü izler ve yerel kütüphanelerde derleyici korumalarını, gömülü sırları ve riskli işlevleri statik olarak denetlersin.
Ne öğreneceksin
- Dex ve smali
- Karartılmış kod
- JNI ve yerel kütüphaneler
- Yerel kodu okumak
- Bitirme
Ön koşullar
Aynı yolun 101 ve 201 düzeyindeki konularına hâkim olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 301 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.