Smali - Decompiling/[Modifying]/Compiling
Last updated
Last updated
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)
Mobil Güvenlik konusundaki uzmanlığınızı 8kSec Akademisi ile derinleştirin. Kendi hızınıza göre ilerleyerek iOS ve Android güvenliğini öğrenin ve sertifika alın:
Bazen, gizli bilgilere erişmek için uygulama kodunu değiştirmek ilginç olabilir (belki iyi obfuscate edilmiş şifreler veya bayraklar). Bu durumda, apk'yı decompile etmek, kodu değiştirmek ve yeniden compile etmek ilginç olabilir.
Opcode referansı: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Visual Studio Code ve APKLab uzantısını kullanarak, herhangi bir komut çalıştırmadan uygulamayı otomatik olarak decompile, değiştirebilir, recompile, imzalayabilir ve yükleyebilirsiniz.
Bu görevi oldukça kolaylaştıran başka bir script https://github.com/ax/apk.sh
APKTool kullanarak smali koduna ve kaynaklarına erişebilirsiniz:
Eğer apktool herhangi bir hata veriyorsa, en son sürümü yüklemeyi deneyin.
Göz atmanız gereken bazı ilginç dosyalar şunlardır:
res/values/strings.xml (ve res/values/* içindeki tüm xml'ler)
AndroidManifest.xml
.sqlite veya .db uzantısına sahip herhangi bir dosya
Eğer apktool
uygulamayı çözümlerken sorun yaşıyorsa, https://ibotpeaches.github.io/Apktool/documentation/#framework-files adresine göz atın veya -r
(Kaynakları çözümleme) argümanını kullanmayı deneyin. O zaman, sorun bir kaynakta değil de kaynak kodunda ise, bu problemi yaşamayacaksınız (kaynakları da decompile etmeyeceksiniz).
Talimatları değiştirebilir, bazı değişkenlerin değerlerini değiştirebilir veya yeni talimatlar ekleyebilirsiniz. Smali kodunu VS Code kullanarak değiştiriyorum, ardından smalise uzantısını yükleyin ve editör size herhangi bir talimatın yanlış olup olmadığını söyleyecektir. Bazı örnekler burada bulunabilir:
Ya da aşağıda bazı Smali değişikliklerinin açıklandığını kontrol edebilirsiniz.
Kodu değiştirdikten sonra kodu yeniden derleyebilirsiniz:
Yeni APK'yı dist klasörünün içinde derleyecektir.
Eğer apktool bir hata verirse, en son sürümü yüklemeyi deneyin.
Sonra, bir anahtar oluşturmanız gerekiyor (sizden bir şifre ve rastgele doldurabileceğiniz bazı bilgiler istenecektir):
Sonunda, imzala yeni APK:
zipalign, Android uygulama (APK) dosyalarına önemli optimizasyonlar sağlayan bir arşiv hizalama aracıdır. Daha fazla bilgi burada.
Eğer apksigner kullanmayı tercih ediyorsanız, zipalign ile optimizasyonu uyguladıktan sonra apk'yı imzalamalısınız. ANCAK DİKKAT EDİN Kİ, UYGULAMAYI SADECE BİR KEZ jarsigner ile (zipalign'dan önce) veya aspsigner ile (zipalign'dan sonra) İMZALAMALISINIZ.
Aşağıdaki Hello World Java kodu için:
Smali kodu şöyle olacaktır:
Smali talimat seti burada mevcuttur.
Bazı değişkenler, const opcode'u kullanılarak fonksiyonun başında tanımlanır, değerlerini değiştirebilir veya yenilerini tanımlayabilirsiniz:
Recommendations:
Eğer fonksiyon içinde tanımlı değişkenleri kullanacaksanız (tanımlı v0,v1,v2...) bu satırları .local <number> ile değişkenlerin tanımları (const v0, 0x1) arasında koyun.
Eğer kodun ortasında logging kodunu eklemek istiyorsanız:
Tanımlı değişkenlerin sayısına 2 ekleyin: Örnek: .locals 10'dan .locals 12'ye.
Yeni değişkenler, zaten tanımlı değişkenlerin sonraki numaraları olmalıdır (bu örnekte v10 ve v11 olmalıdır, v0'dan başladığını unutmayın).
Logging fonksiyonunun kodunu değiştirin ve v5 ve v1 yerine v10 ve v11 kullanın.
Fonksiyonun başında .locals sayısına 3 eklemeyi unutmayın.
Bu kod, bir fonksiyonun ortasına eklenmek üzere hazırlanmıştır (değiştirin değişkenlerin sayısını gerektiği gibi). this.o'nun değerini alacak, String'e dönüştürecek ve ardından değerini kullanarak bir toast yapacaktır.
Mobil Güvenlik konusundaki uzmanlığınızı 8kSec Akademisi ile derinleştirin. Kendi hızınızda ilerleyerek iOS ve Android güvenliğini öğrenin ve sertifika kazanın:
AWS Hacking öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)