Android’te Tersine Mühendislik Part1 – Apk dosyasını tanıyalım, Android deyince aklımıza açık kaynak kodlu olduğu gelir.
- Peki Android için geliştirilen uygulamalar da açık kaynak kodlu mu?
- Yaptığımız uygulamaların kaynak kodlarına başkalarına erişebilir mi?
Android yapısı gereği açık kaynak kodludur. Burada açık kaynaklı olan kodlar Android’in işletim sistemidir.
Kullanıcıların geliştirdiği kaynak kodlar açık değil. Bunlara doğrudan erişemezsiniz ama dolaylı yollardan tamamına yada belli bir kısmına erişebiliriz.
Nasıl mı?
Tersine Mühendislik yöntemleri ile kaynak kodlara erişebiliriz.
Bu yazımızda ilk önce kaynak kodlara erişmeye çalışacağız daha sonra eriştiğimiz bu kaynak kodları değiştirip tekrar APK dosyasına çevireceğiz.
Nasıl Tersine Mühendislik yapacağımıza geçmeden önce Android uygulamaların çalışma prensibine bakalım.
Android uygulamalar genellikle Java kodları ile yazılırlar.
Yazılan bu Java kodları derlenerek Byte kodlara çevrilir. Android direk Byte kodları çalıştırmıyor.
Android, Dalvik Virtual Machine adlı sanal bir makine üzerinde çalışıyor. Bundan dolayı Byte kodlarımız Dalvik sanal makinesinde çalışabilir kodlara dönüşmesi gerek.
Byte kodlarımız ikinci bir işlemden daha geçerek Dalvik Byte kodlara dönüşür. Artık Android cihazımız, yazdığımız kodları çalıştırabilir halde.
Bir APK dosyası aslında sıkıştırılmış bir dosyadır. Bir Rar veya Zip uygulaması ile açtığımızda içinde bazı klasör ve dosyaların olduğunu göreceğiz.
Şimdi biraz da bu son uygulamanın içeriğine bakalım.
-
AndroidManifest.xml : Bu bir uygulamamızın manifesto dosyasıdır. Dosyanın içinde uygulamanın adı, içindeki sayfaların (Activity) bildirimi, uygulamanın kullanacağı izinler yer alır.
-
Resources.arsc : XML dosyaların derlenip bir araya getirildiği dosyadır.
-
Classes.dex : Yazımızın başında Java kodlarının Dalvik Byte koda derlendiğini söylemiştik. İşte o derlenen kodlar bir araya getirilip bu dosyanı içine koyulmuştur. Tersine Mühendislikte işime yarayacak bölüm burasıdır. Yapacağımız işlemler bu dosya üzerinden gerçekleştireceğiz.
-
META-INF : Uygulamanın sertifikaları, imzalarının bulunduğu klasördür.
-
Res : Uygulamamızda kullanacağımız resim, ses, video gibi kaynak dosyaları bu klasördedir.
-
Assets : Bu klasörde de kaynak dosyaları barınır ama Res klasöründen farklı olarak buradaki kaynak dosyaları Android tarafından tanınmayan dosyalardan oluşur.
-
Lib : Bu klasörde Android SDK içinde bulunmayan uygulamanın ihtiyaç duyduğu kütüphaneler bulunur.
Android uygulamaların geçtiği süreci anladığımıza göre artık Tersine Mühendislik teknikleri ile bir APK dosyasını ilk haline – Java kodlarına – nasıl çevirebildiğimize bakabiliriz.
Bir sonraki yazıda bir APK dosyasının kaynak kodlarını açmaya çalışacağız.
Bir sonraki yazıda görüşmek üzere.