Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Bir APK nın Anatomisi

Bir APK nın Anatomisi

#apk #android #security #güvenlik #test #dex #jdgui #apktool #jar #zip #source #code #view #androidmanifest

Meryem Akdoğan

January 24, 2017
Tweet

More Decks by Meryem Akdoğan

Other Decks in Technology

Transcript

  1. META-INF/ assets/ lib/ resources/ classes.dex AndroidManifest.xml resources.arsc • MANIFEST.MF •

    CERT.RSA • CERT.SF • armeabi • armeabi-v7a • x86 • mips • res/drawable-hdpi • res/layout • res/values
  2. META-INF/ • MANIFEST.MF • CERT.RSA • CERT.SF assets/ lib/ classes.dex

    AndroidManifest.xml resources.arsc • armeabi • armeabi-v7a • x86 • mips • res/drawable-hdpi • res/layout • res/values resources/ META-INF/ dizini altında dosya imzaları ve geliştirici Public Key’i bulunur. MANIFEST.MF • APK dosyası içerisindeki her bir elemana ait SHA1 hash değerini içeren dosyadır. CERT.RSA • Uygulama sertifikasıdır. CERT.SF • Kaynakların listesini bulundurur.
  3. META-INF/ assets/ lib/ resources/ classes.dex AndroidManifest.xml resources.arsc • MANIFEST.MF •

    CERT.RSA • CERT.SF • armeabi • armeabi-v7a • x86 • mips • res/drawable-hdpi • res/layout • res/values assets/ dizini altında android tarafından tanınmayan verilerin tutulduğu dosyalar yer alır. (Örneğin; sqLite, raw, ses dosyaları veya resim) Ayrıca bazı malware’ler bu dizinde cihaza kurmak üzere APK dosyaları saklarlar.
  4. META-INF/ assets/ lib/ resources/ classes.dex AndroidManifest.xml resources.arsc • MANIFEST.MF •

    CERT.RSA • CERT.SF • armeabi • armeabi-v7a • x86 • mips • res/drawable-hdpi • res/layout • res/values Lib/ dizini, uygulamanın işlemci mimarisine göre derlenmiş halini içerisinde bulundurur. Birden fazla alt klasörü vardır bu alt klasörler: • armeabi: ARM tabanlı tüm işlemciler için • armeabi-v7a: ARMv7 ve üstü tabanlı tüm işlemciler için • x86: x86 tabanlı işlemciler için • mips: MIPS tabanlı işlemciler için derlenmiştir.
  5. META-INF/ assets/ lib/ resources/ classes.dex AndroidManifest.xml resources.arsc • MANIFEST.MF •

    CERT.RSA • CERT.SF • armeabi • armeabi-v7a • x86 • mips • res/drawable-hdpi • res/layout • res/values Proje için gerekli tüm kaynaklar burada yer almaktadır. drawable-ddpi: Uygulama içerisinde kullanılacak resimler vardır. layout: Oluşturulacak ekran tasarımları için hazır- lanan xml dosyaları yer alır. values: Uygulama içerisinde kullanılacak sabit değişkenler bu klasör içerisinde xml formatı ile tutulabilir.
  6. META-INF/ assets/ lib/ resources/ classes.dex AndroidManifest.xml resources.arsc • MANIFEST.MF •

    CERT.RSA • CERT.SF • armeabi • armeabi-v7a • x86 • mips • res/drawable-hdpi • res/layout • res/values AndroidManifest.xml : Bu dosya uygulamanın temel karakteristiklerini ve her bir bileşenini tanımlar. • Uygulamanın cihazdan talep ettiği izinler ve uygulamada bulunan komponentler derlenmiş olarak bu dosya içerisinde yer alır.
  7. <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="gy.gyapplication" android:versionCode="1" android:versionName="1.0" /> <uses-sdk

    android:minSdkVersion="19" android:targetSdkVersion="22"/> <uses-permission android:name=“android.permission.INTERNET"/> <uses-permission android:name=“android.permission.READ_SMS/> <instrumentation android:name="android.bluetooth.BluetoothInstrumentation" android:targetPackage="1"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:allowClearUserData="false" android:hardwareAccelerated="true"> <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> AndroidManifest.xml Dosya Yapısı
  8. META-INF/ assets/ lib/ resources/ classes.dex AndroidManifest.xml resources.arsc • MANIFEST.MF •

    CERT.RSA • CERT.SF • armeabi • armeabi-v7a • x86 • mips • res/drawable-hdpi • res/layout • res/values classes.dex : • Sınıfların Dalvik sanal makine tarafından anlaşılır DEX dosya formatına dönüştürülmüş halidir.
  9. META-INF/ assets/ lib/ resources/ classes.dex AndroidManifest.xml resources.arsc • MANIFEST.MF •

    CERT.RSA • CERT.SF • armeabi • armeabi-v7a • x86 • mips • res/drawable-hdpi • res/layout • res/values resources.arsc: Derlenmiş kaynakların bulunduğu dosyadır. • string.xml • ids.xml • layouts.xml
  10. • Java + Android SDK ile geliştirilir. • Geliştirilen .java

    dosyaları derlenerek .class dosyaları oluşturulur. • Android için çalışılabilir hale getirmek için tekrar derlenerek tek bir .dex dosyası oluşturulur. • Daha sonraki adımda ise .dex dosyasına farklı dosyalarda eklenerek Android içinde çalıştırılabilir .apk dosyası elde edilir. APK Dosyası Nasıl Oluşturulur?
  11. • Java olarak yazılan uygulama kodları (.class) derleyiciler tarafından Dalvik

    VM’in okuyabileceği bytecode lara çevrilerek toplanır ve .dex uzantılı dosyaya dönüştürülür. • .dex uzantılı dosyalar Dalvik VM’in çalıştırılabilir (executable) dosya uzantılarıdır. Dalvik VM Java code Java byte code Dalvik byte code Dalvik VM
  12. APK paketi oluşturulduktan sonra yayınlayacaksanız ya da cihaza veya emülatöre

    yüklenecekse eğer bu paket içeriğinin geliştirici sertifikasıyla imzalanması gerekmektedir. • Uygulamalar ‘self-signed’ sertifika ile imzanlanabilir. • İmza dosyaları ve sertifika META-INF dizini altındadır. APK Dosyasının İmzalanması
  13. APK Dosyasının İmzalanması İmzanın saklanacağı yol seçilir. Kişisel bilgiler bölümü

    doldurulur. Takma ad Parola ve İmzanın geçerlilik süresi belirlenir.
  14. APK Uygulamasını Doğrulama Google, mağazaya yüklenen kötü amaçlı uygulamaları kaldırmak

    için Google Bouncer adlı bir otomatikleştirilmiş virüsten koruma sistemi kullanır. Bouncer, uygulamanın amacına uygun bir biçimde çalışıp çalışmadığını da denetler.
  15. APK Uygulamalarının Veri Deposu Android uygulama geliştiriciler, uygulama verilerini saklamak

    için bazı depolama yöntemleri kullanırlar. Kullanacakları yöntemler; • Shared Preferences klasörü altında, • SQLite Database dosyasında, • Dahili depolama alanında, • Harici depolama (sdcard gibi) olabilir.
  16. • Bir APK dosyasının kaynak kodlarına ve içerisindeki dosyalara ulaşabilmek

    için tersine mühendislik yolları kullanılır. • Adb pull ile APK elde edilir. • Apktool tersine mühendislik aracı kullanılır. • Dex2jar, jd-gui gibi decompile araçları yardımıyla dosyalara ulaşılabilir. • AndroidManifest.xml dosyası ve kaynak kodları incelenir. APK Dosyalarında Tersine Mühendislik