Smali - Decompiling/[Modifying]/Compiling
Bazen, sizin için gizli bilgilere erişmek için uygulama kodunu değiştirmek ilginç olabilir (belki iyi gizlenmiş şifreler veya bayraklar). Ardından, apk'yı decompile etmek, kodu değiştirmek ve yeniden derlemek ilginç olabilir.
Opcodes referansı: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Hızlı Yol
Visual Studio Code ve APKLab uzantısı kullanarak, herhangi bir komut çalıştırmadan uygulamayı otomatik olarak decompile edebilir, kodu değiştirebilir, yeniden derleyebilir, imzalayabilir ve yükleyebilirsiniz.
Bu görevi çok kolaylaştıran başka bir betik de https://github.com/ax/apk.sh
APK'yı decompile etme
APKTool kullanarak smali koduna ve kaynaklara erişebilirsiniz:
Eğer apktool herhangi bir hata verirse, en son sürümü kurmayı deneyin.
Bazı ilginç dosyalara bakmanız gerekiyor:
res/values/strings.xml (ve res/values/* içindeki tüm xml'ler)
AndroidManifest.xml
.sqlite veya .db uzantılı herhangi bir dosya
Eğer apktool
uygulamayı çözümlemekte sorun yaşıyorsa, https://ibotpeaches.github.io/Apktool/documentation/#framework-files adresine bakabilir veya -r
argümanını kullanmayı deneyebilirsiniz (Kaynakları çözümleme). Ardından, sorun kaynağı kaynak kodunda değilse, sorununuz olmayacak (kaynakları da decompile etmeyeceksiniz).
Smali kodunu değiştirme
Komutları değiştirebilir, bazı değişkenlerin değerini değiştirebilir veya yeni komutlar ekleyebilirsiniz. Ben Smali kodunu VS Code kullanarak değiştiriyorum, ardından smalise eklentisini yüklersiniz ve düzenleyici size herhangi bir hatalı komut olduğunu söyler. Bazı örnekler burada bulunabilir:
Veya aşağıda açıklanan bazı Smali değişikliklerini kontrol edebilirsiniz.
APK'yi yeniden derleme
Kodu değiştirdikten sonra, kodu yeniden derleyebilirsiniz. Bunun için şu komutu kullanabilirsiniz:
Yeni APK'yi dist klasörünün içine derleyecektir.
Eğer apktool bir hata verirse, en son sürümü yüklemeyi deneyin.
Yeni APK'yi imzalayın
Ardından, bir anahtar oluşturmanız gerekecek (bir şifre ve rastgele doldurabileceğiniz bazı bilgiler istenecektir):
Son olarak, yeni APK'yi imzala:
Yeni uygulamayı optimize edin
zipalign, Android uygulama (APK) dosyalarına önemli bir optimizasyon sağlayan bir arşiv hizalama aracıdır. Daha fazla bilgi için buraya tıklayın.
Yeni APK'yi imzalayın (tekrar?)
Eğer apksigner kullanmayı tercih ederseniz, zipalign ile optimizasyon uyguladıktan sonra APK'yi imzalamalısınız. ANCAK YALNIZCA jarsigner ile (zipalign'den önce) veya aspsigner ile (zipalign'den sonra) UYGULAMAYI BİR KEZ İMZALAMANIZ GEREKTİĞİNE DİKKAT EDİN.
Smali Değiştirme
Aşağıdaki Hello World Java kodu için:
Smali kodu şu şekilde olacaktır:
Smali talimat seti burada bulunabilir.
Hafif Değişiklikler
Bir fonksiyon içinde bir değişkenin başlangıç değerlerini değiştirme
Bazı değişkenler, fonksiyonun başında const opcode'unu kullanarak tanımlanır, değerlerini değiştirebilir veya yeni tanımlayabilirsiniz:
Temel İşlemler
Smali Dosyalarını Değiştirmek
Smali dosyaları, Android uygulamalarının derlenmiş DEX dosyalarının insan tarafından okunabilir hali olan bir dildir. Smali dosyalarını değiştirerek uygulamanın davranışını değiştirebiliriz.
Smali dosyalarını değiştirmek için aşağıdaki adımları izleyebilirsiniz:
İlgili smali dosyasını bulun ve açın.
İstediğiniz değişiklikleri yapın.
Dosyayı kaydedin ve kapatın.
Smali Dosyalarını Birleştirmek
Bazı durumlarda, uygulamanın performansını artırmak veya kodu daha düzenli hale getirmek için smali dosyalarını birleştirmek gerekebilir. Smali dosyalarını birleştirmek için aşağıdaki adımları izleyebilirsiniz:
İlgili smali dosyalarını bulun ve açın.
İçeriklerini birleştirin.
Dosyayı kaydedin ve kapatın.
Smali Dosyalarını Ayırmak
Bazı durumlarda, uygulamanın karmaşıklığını azaltmak veya kodu daha modüler hale getirmek için smali dosyalarını ayırmak gerekebilir. Smali dosyalarını ayırmak için aşağıdaki adımları izleyebilirsiniz:
İlgili smali dosyalarını bulun ve açın.
İçeriklerini ayırın.
Dosyayı kaydedin ve kapatın.
Smali Dosyalarını Yeniden Adlandırmak
Smali dosyalarını yeniden adlandırarak, uygulamanın kodunu daha anlaşılır hale getirebiliriz. Smali dosyalarını yeniden adlandırmak için aşağıdaki adımları izleyebilirsiniz:
İlgili smali dosyalarını bulun ve açın.
Dosya adını değiştirin.
Dosyayı kaydedin ve kapatın.
Smali Dosyalarını Silmek
Bazı durumlarda, uygulamanın gereksiz kodlarını temizlemek için smali dosyalarını silebiliriz. Smali dosyalarını silmek için aşağıdaki adımları izleyebilirsiniz:
İlgili smali dosyasını bulun ve silin.
Dosyayı kalıcı olarak silmek için çöp kutusundan silin.
Smali Dosyalarını Oluşturmak
Smali dosyalarını oluşturarak, yeni bir Android uygulaması geliştirebiliriz. Smali dosyalarını oluşturmak için aşağıdaki adımları izleyebilirsiniz:
Yeni bir smali dosyası oluşturun.
İçeriği düzenleyin.
Dosyayı kaydedin ve kapatın.
Büyük Değişiklikler
Günlük Kayıt (Logging)
Öneriler:
Fonksiyon içinde bildirilen değişkenleri kullanacaksanız (bildirilen v0,v1,v2...), bu satırları .local <number> ve değişkenlerin bildirimleri (const v0, 0x1) arasına yerleştirin.
Bir fonksiyonun kodunun ortasına günlükleme kodunu yerleştirmek istiyorsanız:
Bildirilen değişken sayısına 2 ekleyin: Örnek: .locals 10 yerine .locals 12.
Yeni değişkenler, zaten bildirilen değişkenlerin bir sonraki numaraları olmalıdır (bu örnekte v10 ve v11 olmalıdır, hatırlayın ki v0'dan başlar).
Günlükleme işlevinin kodunu değiştirin ve v5 ve v1 yerine v10 ve v11 kullanın.
Toasting
Fonksiyonun başında .locals sayısına 3 eklemeyi unutmayın.
Bu kod, bir fonksiyonun ortasına yerleştirilmek üzere hazırlanmıştır (değişkenlerin sayısını gerektiği gibi değiştirin). Bu kod, this.o değerini String'e dönüştürür ve değeriyle birlikte bir toast yapar.
Last updated