Android'e bir şekilde bulaştıysanız AppBrain'i duymuşsunuzdur. Google'ın Android Market'ine alternatif olan ve size uygulama tavsiye edebilen bir site. AppBrain'in bir de istatistik hizmeti var. Bu istatistikler içinde benim en çok ilgimi çeken Developer tools istatistikleri. Örneğin ACRA kütüphnesini kullanan top 10 uygulamayı görebiliyorsunuz. AppBrain'in bu istatistikleri nasıl topladığını merak ediyorsanız okumaya devam edin.
Bu yazıda apk dosylarının, reverse engineering ile nasıl inceleneceğini adım adım anlatacağım.
1. Apk dosyasını indirme
Android projelerinin emulatörde ya da cihazda çalışabilmesi için projenin paketlenmesi ve imzalanması gerekiyor. Proje paketlendiğinde '.apk' uzantılı bir dosya oluşur. Apk dosyalarının oluşturulması ile ilgili detaylı bilgi almak isteyenler resmi android geliştirici sayfalarındaki Building and Running bölümüne bakabilir.
Apk dosyasını indirebilmek için apk downloader adında bir araç kullanacağız. Apk-downloader bir Chrome eklentisi. Android Market'te uygulamanın sayfasına girdiğinizde adres barında apk indirmek için bir düğme çıkartıyor. Apk-downloader, Google hesap bilgilerinize (şifreniz dahil) ve Google'a kayıtlı Android cihaz'ınızın Google Service Framework ID'sine ihtiyaç duyuyor. Google hesap bilgileriniz bizi hiç ilgilendirmiyor dese de işim bittikten sonra Google şifremi değiştirdim, size de aynısını tavsiye ediyorum. İncelemek istediğimiz uygulamayı Android Markette bulduktan sonra apk'yı indiriyoruz.
Instagram'ın popüler Android uygulamasının apk dosyasını aşağıdaki şekildeki gibi apk-downloader'ın apk indirme düğmesini kullanarak indirdim.
2. dex2jar
İkinci aracımız dex2jar. Dex2Jar sayesinde dex formatındaki dosyalari java class dosyalarına çevireceğiz ve java decompiler ile class dosyalarını java dosyalarına çevireceğiz. dex dosyasının açılımı "Dalvik executable". Android uygulamarını çalıştıran virtual machine (Dalvik), java class dosyalarını değil dex formatındaki dosyaları okuyabiliyor.
dex2jar ile apk dosyasını aşağıdaki gibi jar (java archive) dosyasına çeviriyoruz.
tututil:TEMP ilkinulas$ ~/Development/tools/dex2jar-0.0.9.12/d2j-dex2jar.sh com.instagram.android.apk dex2jar com.instagram.android.apk -> com.instagram.android-dex2jar.jar
Oluşan jar dosyasını okumak incelemek için Java Decompiler kullanacağız.
Java decompiler'ın arayüzü ile bakarsak Instagram'ın Android uygulamasınin aşağıdaki kütüphaneleri kullandıgını görebiliriz: (Aşağıdaki resim java decompiler'in arayüzünü gösteriyor.)- Android HttpClient Lib.
- FasterXML
- oauth-signpost
- ACRA
- Apache Commons Lang (org.apache.commons.lang3)
3. apktool
apk dosyasının içinde sadece derlenmiş dex dosyaları bulunmuyor. Uygulamayı meydana getiren AndroidManifest.xml dosyasi, res, assets, lib dizinleri de apk dosyası içinde bulunmakta. Bu dosyalara erişmek için apktool aracını kullanacağız.
Aşağıdaki komut ile apk dosyasını INSTAGRAM dizinine açıyoruz.
tututil:TEMP ilkinulas$ apktool decode com.instagram.android.apk INSTAGRAM I: Baksmaling... I: Loading resource table... I: Loaded. I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: /Users/ilkinulas/Library/apktool/framework/1.apk I: Loaded. I: Regular manifest package... I: Decoding file-resources... I: Decoding values */* XMLs... I: Done. I: Copying assets and libs... tututil:TEMP ilkinulas$ ls -ltr INSTAGRAM/ total 32 drwxr-xr-x 8 ilkinulas staff 272 Jan 6 16:32 smali -rw-r--r-- 1 ilkinulas staff 8248 Jan 6 16:32 AndroidManifest.xml drwxr-xr-x 46 ilkinulas staff 1564 Jan 6 16:32 res drwxr-xr-x 4 ilkinulas staff 136 Jan 6 16:32 lib drwxr-xr-x 8 ilkinulas staff 272 Jan 6 16:32 assets -rw-r--r-- 1 ilkinulas staff 247 Jan 6 16:32 apktool.yml tututil:TEMP ilkinulas$
apk-downloader, dex2jar, java decompiler ve apktool ile siz de seçtiğiniz bir uygulamayı decompile edip inceleyebilirsiniz. Happy hacking :)
0 comments:
Post a Comment