Android .apk Dosyasından Kaynak Kodlara Erişim

Kaynak Kodlara Erişim

Herhangi bir .apk dosyasından (kaynak kodlara erişim) kaynak koduna erişebileceğinizi biliyor muydunuz? Marketten indirdiğiniz programların .apk uzantılı dosyalarında veya internetten indirdiğiniz .apk dosyalarında işlem yapabilirsiniz.

Evet yanlış okumadınız. Android uygulamalarınızı java ile yazıyorsanız .jar dosyaları gibi sıkıştırılmış dosyalar ile de muhakkak uğraşmışlığınız olmuştur. Her uygulama compile edildikten sonra class dosyaları yalın olarak bulunmaz ve tekrar farklı formatlara dönüştürülüp sıkıştırılmış dosya formatında sizlere .apk olarak servis edilir. (kaynak kodlara erişim)

Peki android uygulamaların Kaynak Kodlara Erişim mümkün müdür ?

Kısmen evet, bu tür decompiler uygulamaları tamamen size kodu vermez. Bazı kısımlarını gösterir. Değişkenler, sabitler vs size farklı isimlerde gözükür, bazen çok anlamsız olduğunu düşünebilsek de ne arayacağınızı biliyorsanız, aradığınızı bulabilirsiniz.

Decompiler ne amaçlarla kullanılır ? (kaynak kodlara erişim)

Bir uygulamanın kaynak kodlarına erişmek isteyebilirsiniz. Tabii, kimse size kendi yazdığı kaynak kodlarını paylaşmayacak olduğunu da düşünürseniz, ya uygulamayı çok iyi analiz edeceksiniz ki bu zaten gereklidir ya da kaynak dosyalardaki kullanım şekillerine bir yöntemle erişmeniz gerekecek. Bu tür bir uğraşı için, apk decompiler kullanabiliyorsunuz. Apk decompiler edilebilmesine karşılık olarak ise, uygulama güvenlik önlemleri sağlanabiliniyor.

Önce googleplay den ilgili apk nın adresini kopyalıyorsunuz.

Sonra bu uygulamanın apk dosyasını bilgisayara indirebilmek için

buraya tıkladığınızda çıkan ekrandaki satıra yazıyorsunuz. Ve bir süre sonra uygulamanın apk dosyası bilgisayarınıza indiriliyor.

1.Yol:

Online( Kaynak Kodlara Erişim)

Bu işlem için online araçlar hizmete sunulmuş durumda. Apk dosyasını bu sitelere yükleyerek (kaynak kodlara erişim) kaynak kodları çok kısa sürede fazla uğraşmadan elde edebilirisiniz.

Çevrimiçi aracını kullanın, apk yükleyin ve Kaynak Kodlara Erişim ve kaynak kodunu alın.

http://www.javadecompilers.com/apk

http://www.decompileandroid.com

2.Yol:

Apktool Kullanımı (Kaynak Kodlara Erişim)

Apk dosyasını decompile ederek içerisindeki dosyaları okunabilir hale getiren bir araçtır. Buradan indirebilirsiniz.

Kullanımı:

d parametresi ile apk dosyasını decode ederek içerisindeki dosya ve klasörleri bir klasörde toplayabiliriz.

Apk uzantılı dosyamızın uzantısını .zip yapıp unzip ile açtığımızda da apk içerisindeki dosyalara erişebiliriz. Fakat o zaman AndroidManifest.xml dosyasının içerisini görüntüleyemiyoruz.

b parametresi ile dosyaları toplayarak apk dosyası haline getirebiliriz.

Bir .apk dosyasını açmaya çalıştığımızda karşımıza çıkan yapı şu şekildedir;

Kaynak Kodlara Erişim

“.dex” formatında olan bu yapıyı anlamlandırılabilir hale getirmek için decompile etmeliyiz. Apktool android .apk dosyalarını decompile etmek için kullanılan araçtır. Decompile sonucunda smali adını verdiğimiz ara kodları elde ederiz.

.dex  <————–>   .smali   <—————–   java resource code

Apktool son versiyonunu https://ibotpeaches.github.io/Apktool/  adresinden indirebilirsiniz.

İndirmiş olduğunuz .jar dosyasını decompiler etmek için  “d”  parametresi ile çalıştırmalısınız.

Kaynak Kodlara Erişim

Decompiler sonucunda kaynak kodlara erişim;

  • Resources (xml dosyaları ve resimler)
  • Manifest File
  • Yml dosyası (sdk ve versiyon bilgisi)
  • smali dosyası

oluşmaktadır.

Oluşan dosyalara ait bir ekran görüntüsü aşağıda veilmiştir.

Kaynak Kodlar

Buradaki manifest dosyasını açtığımızda neredeyse orjinaliyle aynı bir manifest dosyası elde ettiğimizi görüyoruz.

Kaynak

Ayrıca Apktool sadece decompiler yapma işlemi için değil, aynı şekilde decompiler edilmiş bir apk dosyasını derleme yaparak paketleme işlemi için de  kullanılmaktadır.

Bunun için “b” (build) parametresi kullanılır.

build

3.Yol:

APK Easy Manager kullanımı

Hiç uğraşmadan komut vermeden  tek bir tuşa basarak apk dosyasını ayıklayabilir kaynak kodlara erişim ve birleştirebilirsiniz decompiler kısmı apk ayıklama kısmıdır builder kısmı ise apk birleştirme kısmıdır.

APK Tool’ün yan kuruluşu da diyebileceğimiz bu proğram aynen APK Tool’ün yaptığı işlemlerin kısaltılmış hali olarak gözükmekte, bunda tek fark sadece arayüz eklenmiş, ilemler yine cmd ekranında yapıyor ama çalışılabilir exe arayüz olduğu için cmd ekranını göremiyoruz.

Uygulama çoğu apk’da işe yaradığı gibi bazılarındada işe yaramayabiliyor, çalışmak için apk yı üzerine sürüklemeniz yeterli. (kaynak kodlara erişim)

  • Öncelikle indirmek için tıklayınız -> APK Easy Manager
  • İndirdikten sonra açtığınızda aşağıdaki gibi bir program ile karşılaşacaksınız
APK Easy Manager
Android .apk Dosyasından Kaynak Kodlara Erişim 25

Nasıl kullanabilirsiniz (Kaynak Kodlara Erişim) ?

  • Bir .apk dosyasını bu program açık durumdayken, Drop APK Files here kısmına sürükleyiniz ve seçiniz.
  • Dosyanın ismi, uygulama içerisindeki listede seçili durumda iken, Decompiler kısmında Decompiler 1 – Ginderbread and below version Apps‘i seçiniz ve Start Decompiling butonuna tıklayınız.
  • İlgili apk dosyası decompile edildikten sonra, uygulamanın bulunduğu dizin içerisinde projects klasörü içerisinde uygulamaya ait yeni bir klasör açılmış ve erişebileceğiniz tüm kodlar burada bulunuyor olacaktır.
APK Easy Manager

Buradada Project klasörüne girerek ayıkladığımız apk’yı düzenliyoruz türkçeleştireceksek türkçeleştirip bir sonraki aşamaya geçiyoruz

APK Easy Manager

Bu bölümden türkçeleştireceksek values e giriyoruz resim degiştirmek vs için diğer klasörlere bakabilir ve düzenleyip degiştirebilirsiniz.

APK Easy Manager

notepad++ ile açıyoruz

APK Easy Manager

string kısımlarını türkçeleştirdikten sonra

Easy Manager

kaydet diyip çıkıyoruz

APK Easy

daha sonra geri çıkarak klasörü builder bölümüne sürüklüyoruz ve builder 1 seçip start building butonuna basıyoruz.

APK Manager

oluşan dosya result klasörünün içerisinde belirecektir

APK Easy Manager

Bu dosyayı alıp kullanabiliriz artık
Telefonunuza attığınız dosyanın yerini input butonuna basarak kayıt edilecegi yeri Output butonuna basarak seçiyoruz ve testkey seçenegini seçip sing the file butonuna basıyoruz ve dosyamız lisanslanmış oluyor böylece telefonunuza kurulabilir duruma gelmiş oldu.
Dosyaları yukarıda belirttiğim adreslerden indirerek uygulamaya başlayabilirsiniz.
Not : Her Apk dosyasında işe yaramayabiliyor

Uyğulamanın çalışması için sisteminizde java yüklü olmalıdır

Tüm bu aşamalardan sonra apk dosyanızı kullanabilir ve paylaşabilirsiniz umarım herkes için yararlı olur ve sizleri büyük sıkıntılardan kurtarır. Düzenlemelerinizi Notepad++ ile yapınız. (kaynak kodlara erişim)

Java SE Development ve Runtime Kit 7u40

APK Easy Manager

Notepad++

4.Yol:

DEX2JAR KULLANIMI (Kaynak Kodlara Erişim)

Classes.dex dosyasını JAR dosyasına dönüştürmek için kullanılan bir araçtır. Buradan erişebilirsiniz.

Gerekli olan programlar:

DEX2JAR  Burdan dex2jar dosyasını indirin. ya da buradan .

Burdan jd-gui.exe dosyasını indirin ya da buradan .

Belirttiğim 2 programı indirdikten sonra kodlamasını görmek istediğiniz bir APK dosyası seçin ve sırasıyla işlemlere devam edin.

Yeni bir klasör oluşturun ve kodunu çözmek istediğiniz .apk dosyasına kopyalayın.

APK Dosyasını bilgisayarınıza indirin ve ornek.apk isimli dosyanızın sonuna “.zip” ekleyerek sıkıştırılmış hale dönüştürün.

Şimdi classes.dex dosyalarına vb. erişebilirsiniz. Bu aşamada çizilebilir dosyaları görebiliyor ancak xml ve Java dosyalarını göremiyorsunuz. (kaynak kodlara erişim)

Zip haline dönüştürdüğünüz APK dosyasına sağ tıklayarak Dosyaları çıkart komutunu uygulayın.

İndirdiğiniz dex2jar dosyasını da “klasöre çıkar dex2jarx.x.x.x” diyin.

Çıkarttığınız “Ornek.Apk” klasörünün içindeki Classes.dex dosyasını üst satırda oluşturduğumuz “dex2jar” klasörünün içine atın.

Özetle apk yı zip haline çevirdik, sonra bunu klasör haline getirdik, sonra da bu klasör içindeki Classes.dex dosyasını dex2jar klasörünün içine kopyaladık.

Şimdi Başlat – Çalıştır – CMD komut dizinini açın.

“cd” komutu ile “dex2jar” klasörüne gidin ve klasör içine girdikten sonra şu komutu uygulayın:

yani komut satırına cd dex2jar yazıp entera basıyoruz

tabi bu işlemi dex2jar klasörünü nerede oluşturduysanız oraya gittikten sonra yapıyoruz.

dex2jar klasöründe iken komut satırına

dex2jar classes.dex” (Tırnaklar olmayacak)  yazıyoruz.

(mac terminali veya ubuntu için ./d2j-dex2jar.sh classes.dex yazın)

Bu komuttan sonra “classes_dex2jar.jar” diye bir dosya oluşacaktır.

dex2jar classes.dex yazınca
dex2jar’ is not recognized as an internal or external command,
operable program or batch file
hatasını alanlar bunu yazsın   d2j-dex2jar classes.dex
ayrıca java yazılımı pc nizde yüklü olması gerekli, yoksa hata alırsınız

Oluşturulan dosya dex2jar klasörünün içindedir

Classes_dex2jar.jar dosyasını ilk başta indirdiğimiz “Jd-Gui.exe” programı ile indirip Kodlara ulaşabilirsiniz.

şimdi sınıf dosyalarını görebiliyorsunuz

Bu sınıf dosyalarını kaydedin (jd-gui’de, Dosya -> Tüm Kaynakları Kaydet’e tıklayın) src ismine göre. Bu aşamada Java kaynağını elde edersiniz ancak .xml dosyaları hala okunamaz durumdadır, bu yüzden devam edin.

Şimdi başka bir yeni klasör aç

  1. apktool.bat (veya apktool / Linux için) ve apktool_<version>.jar // http://ibotpeaches.github.io/Apktool/install/
  2. jar dosyasını yukarıdan apktool.jar olarak yeniden adlandırın ve her iki dosyayı da aynı klasöre yerleştirin.
  3. bir dos kutusu (cmd.exe) açın ve bu klasöre geçin; Java Ortamı’nın kurulu olduğunu doğrulayın (Linux için ayrıca gerekli kütüphanelerle ilgili notları kontrol edin)
  4. google kullanarak framework-res.apk dosyasını indirin ve aynı klasöre koyun (Tüm apk dosyalarının framework-res.apk dosyasına ihtiyacı yoktur)
  5. Başlat: apktool decode [apk file] örneğin apktool decode compass.apk  gibiOrta sonuç : kaynak dosyaları, AndroidManifest.xml
  6. aPK dosyasını seçtiğiniz bir açıcı ile açınOrta sonuç classes.dex
  7. http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.Zip&can=2&q= adresinden dex2jar-0.0.9.15.Zip dosyasını indirip çıkarın
  8. classes.dex öğesini dex2jar.bat üzerine sürükleyip bırakın (veya bir DOS kutusuna <path_to>dex2jar.bat classes.dex yazın; Linux için dex2jar.sh kullanın)Orta sonuç classes_dex2jar.jar
  9. classes_dex2jar.jar_ paketini açın (kullanılan kod çözücüye bağlı olarak isteğe bağlı olabilir)
  10. sınıf dosyalarınızı kodabilirsiniz (örneğin JD-GUI veya DJ Decompiler ileSonuç : kaynak kodu
  1. Şimdi komutu apktool if framework-res.apk gibi çalıştırın (eğer burada yoksa get here yoksa) ve sonraki
  2. apktool d myApp.apk (burada myApp.apk, kodunu çözmek istediğiniz dosya adını belirtir)

şimdi bu klasörde bir dosya klasörü almak ve apk’ın xml dosyalarını kolayca okuyabilirsiniz. (kaynak kodlara erişim)

Dex2Jar (Kaynak Kodlara Erişim)

Bir diğer tersine mühendislik aracı Dex2Jar  “.dex” formatında yer alan apk içerisindeki dosyaları  “.jar” uzantılı java binary dosyalarına çevirir.

.jar  uzantılı java binary dosyalarına dönüştürülmüş olan bu dosyalar başka bi java decompiler aracı kullanılarak rahatlıkla kaynak koda dönüştürülebilir. Kaynak kodlara erişim.

Bu araç aşağıdaki linkten indirilebilir

https://sourceforge.net/projects/dex2jar/?source=type_redirect

ve programını açarak  “./d2j-dex2jar.sh”  aracılığıyla çalıştırabilirsiniz.

Dex2Jar

Yukarıda ekran görüntülerinde de görüldüğü gibi örnek olarak  “BGA_Mucahid.apk”  uygulaması decompiler edilerek  “output.jar”  dosyasına dönüştürülmüştür.

JD-GUI (Kaynak Kodlara Erişim)

Uygulamanın kaynak kodlara erişim kaynak kodlarını görmeye yardımcı Java decompiler aracıdır. Classes.dex dosyasının dex2jar yardımıyla .jar dosyasına dönüştürülmesinden sonra jd-gui ile bu jar dosyasını açarak uygulamanın kaynak kodlarına erişebiliriz. Buradan indirebilirsiniz.

JD-GUI programı, dex2jar programı ile decompiler ettiğimiz  “.jar”  uzantılı java binary dosyalarını source koda çevirmemize yarayan bir decompiler aracıdır. Kullandığınız işletim sistemine göre uygun versiyonu;

http://java-decompiler.github.io/

adresinden indirebilirsiniz.

Bununla alakalı kısa bir örnek yapacak olursak adımlar şu şekildedir;

  • Öncelikle indirmiş olduğumuz  .jar  uzantılı JD-GUI programını  “java -jar jd-gui-1.4.0.jar”  komutuyla çalıştırıyoruz
  • Sonra grafik arayüze sahip olduğumuz programımızda “File” sekmesinden “Open File”  tuşuna basarak gelen dizin ekranından az önce “Dex2jar”  programı ile oluşturduğumuz  “output.jar” dosyasını seçiyoruz.
  • Bu işlemleri, oluşturulmuş olan “output.jar” dosyasını  JD-GUI  içerisine sürükle bırak yaparak da bu işlemleri kısa yoldan tanımlayabilirsiniz.
JD-GUI

Decompiler işlemi sonucunda ise android gelişiricinin yazmış olduğu kodları elde ediyoruz.

JD-GUI

APK Easy Tool (APK Tool GUI)

Apk Easy Tool, üzerinde çalıştığınız uygulamalar için APK dosyalarını yönetmenizi, decompile ederek içerisindeki dosyaları okunabilir hale getirmenizi (kaynak dosyalara erişim) , derlemenizi ve imzalamanızı sağlayan bir uygulamadır. Aslında bu araç daha önce de Mobil Uygulama Testlerinde Kullanılabilecek Araçlar yazımızda da bahsettiğim APKtool aracının arayüz aracılığıyla daha kolay bir kullanım sağlamasıdır.

İndirme Linkleri : 

Kullanımı (Kaynak Kodlara Erişim) :

  • Yukarıdaki indirme linkinden taşınabilir .zip dosyasını veya kurulum dosyasını indirebilirsiniz.
  • Kurulum için .msi dosyasını indirmeniz gerekecek fakat taşınabilir dosya da yalnızca .zip dosyasını açarak .exe dosyasını çalıştırmalısınız.
APK Easy Tool

Uygulama arayüzü açıldıktan sonra “Select APK” butonuna tıklayarak üzerinde çalışmak istediğiniz mobil uygulamanın .apk dosyasını seçin. Ayrıca bu işlemi yapmak yerine .apk dosyasını APK Easy Tool arayüzü üzerine sürükleyip bırakarak da yapabilirsiniz.

APK Easy Tool
  • Uygulama dosyası seçildikten sonra Decompile butonuna basarak  ayıklama işlemini yapabilirsiniz.
  • Burada “Decompile name” için paketi çıkarmak istediğiniz bir klasör ismi ve bu ayıkladığınız klasörle işiniz bittikten sonra derlemek istediğiniz de uygulama paketine vermek istediğiniz ismi “Compile name” alanını doldurmanız gerekecek.
  • Uygulamanın paket içerisindeki dosyaları ayıklandığı default olarak “Decompiled APKs” dizini içerisinde olacaktır. İsterseniz bu dizini değiştirerek klasörü başka bir yere çıkartabilirsiniz. Bunun için “change” butonuna basarak bilgisayarınızda herhangi bir dizin seçmeni yeterli olacaktır.
  • Decompiled edilen paket dosyaları tekrar derlenmek istendiğinde ise “Recompiled APKs” dizini içerisinde oluşturulacaktır. Aynı yöntemle dizini de değiştirebilirsiniz.
APK Easy Tool

Smali, Classes.dex dosyasının açılmış haline denir. Baksmali ise Classes.dex dosyasının düzenlenip tekrar kapanmış haline denir. Uygulamanın smali kodu üzerinden değişikler yapabilir ve programın işleyişine müdahale edebilirsiniz.

APK Easy Tool

Framework bölümü, Apk veya Jar  dosyasının android sürümüne uygun dosyaları oluşturmak için kullanılır. Rom uygulaması ise o roma ait, 3.parti bir uygulama ise Android sürümüne uygun herhangi bir romdan alınabilir. Framework dosyaları Rom dosyalarını açıp kapatmak içindir.

Easy Tool

Her bir işlem için ayrı bir dizin oluşturulacaktır.

APK Easy

Herhangi bir hata ile karşılaşmanız durumunda ise Log Output bölümünde logları görüntüleyebilir veya uygulamanın klasör oluşturduğu noktaya gidebilirsiniz. Bu dosya için yine “BelgelerAPK Easy ToolLogs” dizinine bakabilirsiniz.

APK Easy Tool

Ayrıca derlediğiniz uygulamayı cihazınıza kolayca kurabilirsiniz. Cihazınız bilgisayara kablo ile bağlı durumda ve ayarlarınızda “USB Debugging” ve “Bilinmeyen Kaynaklar” bölümleri aktif durumda ise “Install APK” butonuna basarak uygulama paket dosyasını cihazınıza yüklemiş olacaksınız.

Yorum yapın