.apk Dosyasını Decompile ve Recompile Etmek
Yazıda bir apk dosyasının içerisindeki kodlara erişimi, değişiklik yamayı ve daha sonra tekrardan herhangi bir IDE kullanmadan tekrardan compile edilmesini anlatacağım. Bana çok ilginç geldiğinde yazma gereği duydum.
Aşağıdaki işlemleri yapma mecburiyetim kodlara erişemiyor ve uygulamayı tekrardan revize edemiyor olmamdır. Çünkü önceki yazılımcı kodları almış ve gitmiş hatta kodlar hala onda mı ya da nerede bilen yok! (Gerçekten saçma bir durum..)
Aşağıdakilerin kurulu olması gerekiyor:
- JAVA SDK veJRE
- Android SDK
Daha sonra “apk tool” aracına ihtiyacımız var. Kullanım işlemleri işletim sisteminize göre linkte yer alıyor. Temel olarak hepsini aynı klasörde bulundurmanızı istiyor.
Daha sonra CMD üzerinde aşağıdaki kodu çalıştırarak apk’yı decompile etmenizi sağlıyor ve içerisindekileri görebiliyorsunuz.
apktool d -f -r sample.apk
.smali uzantılı dosyaları değiştirebilirsiniz eğer şanlıysanız. Benim için yeterli oldu çünkü içerisinde sadece bir servis adresi değiştirmek gerekiyordu.
Değişikliklerinizi yaptıktan sonra aşağıdaki komut ile tekrardan recompile edebilirsiniz.
apktool b sample
(“sample” burada bir önceki komut ile oluşturulan klasörün adı)
Tabi ki bu kadar değil çünkü bu oluşturulan bu apk sign edilmemiş bir apk ve bunu herhangi bir cihaza yükleyemezsiniz. Şimdi apk mızı sign edelim.
Apk signer aracıyla bu işlemi hızlıca yapabilirsiniz. Nasıl yapıldığı burada anlatılmış.
Son olarak içerisindeki kodları nasıl göreceğiz. Bunun için buradan gerekli indirmeyi yaptıktan sonra .dex uzantılı dosyaları aynı klasöre kopyalamanız gerekecek ve buradan CMD ile hızlıca işlemleri yapabileceksiniz.
d2j-dex2jar classes.dex
Bu .jar dosyasını JD-GUI ile görüntüleyebilirsiniz.
Peki bu sadece görüntüleme aracı ben nasıl editleme yapacağım derseniz aşağıdaki kodu çalıştırarak .zip olarak erişimini sağlayabilir tekrardan jar yapabilir ve apk’nızı recompile edebilirsiniz. Hayır jd-gui sadece görüntüleme değil aynı zamanda resourceları kaydetmenizi de sağlar.
Teşekkürler umarım kullanmak zorunda kalmazsınız çünkü riskli bir yol kesinlikle. Çok fazlada detaylandırmaya gerek yok diye düşünüyorum bu nedenle.