- Katılım
- 27 Mart 2020
- Mesajlar
- 193
- Elmaslar
- 60
- Puan
- 9.005
- Yaş
- 24
- Konum
- İstanbul
- Minecraft
- MrLexia
Discord:
mrlexia
ProGuard ile OBF Atma Rehberi (Adım Adım ve Açıklamalı)
Merhaba arkadaşlar,
Java veya Android projelerinde güvenlik ve kod gizliliği açısından önemli olan ProGuard kullanımı hakkında sade ve detaylı bir rehber hazırlamak istedim. Umarım işinize yarar.
ProGuard Nedir?
Basitçe anlatmak gerekirse, ProGuard Java kodlarını karartmaya (obfuscation), gereksizleri temizlemeye (shrink) ve belli oranda optimize etmeye yarayan bir araçtır. Kodlarınızı yayınlamadan önce okunamaz hâle getirir, yani kısaca “biri APK’nızı decompile ettiğinde kodunuzu anlayamasın” diye çalışır.
1. Android Studio Üzerinden ProGuard’ı Aktifleştirme
ProGuard zaten Android Studio projelerinde hazır gelir. Sadece build.gradle dosyanıza birkaç satır eklemeniz yeterli.
Kod:
buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' }}
Eğer deneme amaçlı debug’da çalıştırmak istersen:
Kod:
<span>debug {<br> minifyEnabled true<br> proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'<br>}<br></span>
2. ProGuard Kurallarını Yazma (proguard-rules.pro)
ProGuard karartma işlemi sırasında bazı sınıf ve metodları da silebilir. Bu yüzden dikkatli olmak gerekir. Aşağıya örnek bir kural dosyası bırakıyorum:
Kod:
# MainActivity'yi ve tüm metotlarını koru-keep class com.ornek.app.MainActivity
{ *; }# Android kütüphanelerine ait uyarıları bastır-dontwarn android.support.**
# Native metotları koru-keepclasseswithmembernames class *
{ native <methods>;}
Yani, hangi sınıfların ve metotların karartılmaması gerektiğini burada belirtiyoruz.
3. Build Alıp APK Oluşturma (OBF Uygulama)
Karartılmış APK'yı oluşturmak için:
Android Studio üzerinden:
Build > Build Bundle(s) / APK(s) > Build APK(s)
Terminal kullananlar için:
Kod:
./gradlew assembleRelease
APK’lar genelde şu klasöre çıkar:
/app/build/outputs/apk/release/app-release.apk
4. Mapping.txt: Karartma Haritası
Karartılmış kodların karşılıklarını görebileceğiniz dosya:
app/build/outputs/mapping/release/mapping.txt
Burada hangi sınıf/metot neye dönüştürülmüş detaylı olarak yazar. Uygulama hata verirse logları anlamanız için bu dosya önemlidir. Yayınladığınız her sürümün mapping dosyasını saklamanız tavsiye edilir.
5. Ekstra Güvenlik Kuralları (İsteğe Bağlı)
Kod:
proguard
dontusemixedcaseclassnames-overloadaggressively-repackageclasses ''
Bu kurallar kodu daha fazla karartır ama dikkatli olmak gerekir. Her değişiklikten sonra test yapılmadan APK'yı yayına almak risklidir.
Java SE Projelerinde Nasıl Kullanılır?
Android yerine düz bir Java projesi için:
- ProGuard’ın resmi sitesinden indir.
- JDK’ya ait rt.jar gibi dosyaları classpath'e dahil et.
- Komutla çalıştır
Kod:
java -jar proguard.jar @proguard-project.txt
Son Notlar
- ProGuard, sadece güvenlik değil, performans ve boyut açısından da fayda sağlar.
- Ama her projede kullanılmadan önce iyi test edilmesi gerekir.
- Mapping dosyası mutlaka yedeklenmelidir.