Android UygulamalarınTersine Mühendislik Yöntemi Ile Incelenmesi

Embed Size (px)

DESCRIPTION

Kaynak kodu obfuscate edilmemiş bir android uygulamasının tersine mühendislik yöntemi ile analiz edilmesi.

Citation preview

  • Android uygulamalarn Reverse Engineering

    (Tersine Mhendislik) Yntemi ile

    nceleme

    Bu makalemizde, kaynak kodu obfuscate edilmemi bir

    android uygulamasnn tersine mhendislik yntemi ile

    incelenmesi konusuna giri yapacaz.

  • blog.btrisk.com @btrisk /btrisktv /btrisk

    1

    Tersine mhendislik bir aygtn, objenin veya sistemin; yapsnn, ilevinin veya almasnn, karmc bir akl yrtme analiziyle kefedilmesi ilemidir. Makine veya mekanik alet, elektronik komponent, yazlm program gibi paralarna ayrlmas ve alma prensiplerinin detayl ekilde analizini ierir.

    Bir android uygulamasn herhangi bir ariv program (Winrar,Winzip v.b.) ile atmzda ierisinde Meta-InfClass, Resorce, AndroidManifest ve Res dosyalarn barndrd grlr. imdi bu dosyalarn genel anlamda ieriinden bahsedelim.

    META-INF Klasr o MANIFEST.MF: Bildiri dosyas. o CERT.RSA: Uygulama sertifikas. o CERT.SF: Kaynaklarn listesi.

    res: Kaynaklar ieren dizin.

    AndroidManifest.xml: Ek Android bildirim dosyas olup iinde, uygulamann adn, versiyonu, eriim bilgileri, lib dosyalarnn kaynan belirten bilgiler yer almaktadr. Bu android XML dosyas herkes tarafndan alp okunabilen dz XML metin haline dntrlebilir.

    classes.dex: Dalvik sanal makinesi (Dalvik virtual machine) tarafndan anlalabilir dex dosya biiminde derlenmi dosyadr.

    resources.arsc : rnein XML gibi derlenmi kaynaklarn bulunduu dosyadr. Reverse ilemimizde kullanacamz aralar ve indirme sayfalar; Android crackme 03.apk: http://crackmes.de/users/deurus/android_crackme03/ APK-MultiTool: http://apkmultitool.com/?q=node/5 Notpad++: http://notepad-plus-plus.org/download/v6.5.5.html Dex2jar: http://code.google.com/p/dex2jar/ Java decompiler: http://java.decompiler.free.fr/

    Reverse ilemi uygulayacamz Crackme03.apk uygulamasn telefonumuza veya emalutrmze kurulumunu gerekletirip uygulamamzn fonksiyonlarna gz atalm.

  • blog.btrisk.com @btrisk /btrisktv /btrisk

    2

    Uygulamada check butonuna bastmzda bize Min 4 chars uyars verdiini gzlemledik.

  • blog.btrisk.com @btrisk /btrisktv /btrisk

    3

    Enter Name ve Enter Serial ksmn herhangi bir eyler yazdmzda Bad boy uyarsn gzlemledik.

    Karmza kan uyarlar ilerleyen admlarda reverse ileminde bizlere yardmc olacak. imdi Crackme03.apky APK-MultiTool aracl ile decomplie edelim. Setup.bat altrp Setup Directories seelim. Daha sonrasnda Crackme03.apk dosyasn place-apk-here-for-modding ierisine kopyalayalm.

  • blog.btrisk.com @btrisk /btrisktv /btrisk

    4

    Bu ilem sonrasnda Script.bat altaralm ve Set current project(24) seelim. Karmza kan bu ekrandan hangi apk zerinde alacamz seelim(1). Son ilem olarak Decomplie apk(9)y seelim.

    APK-Multi-Tool\projects\Crackme03.apk\smali klasrndeki smali dosyalarnnn hepsini Notpad++ ile aalm. Yukarda aldmz uyarlar .smali uzantl dosyalarnn ierisinde bulmaya alalm. Aldmz uyarlar HelloAndroid$2.smali dosyasnda bulduk. Smali kodumuzu incelemeden bir ka nemli fonksiyonuna ksaca gz atalm. move-object/from16 vAA, vBBBB (bir nesnenin yazmacn dierine tama ilemi) A:hedef yazma(register) B:kaynak yazma const vAA, #+BBBBBBBB (Sabit (#+BBBBBBBB) say deerli bir yazman zel(vAA) bir yazmaa deerinin tanmas ilemi) A:hedef yazma B:kaynak 32-bitlik tanml sabit tamsay deeri(integer) invoke-virtual/range { vA .. vX }, Lclass;->method()R vA-vX: metoda geirilmekte olan argmanlarn aral class: Yntemi ieren snfn ad method: arma ynteminin ad R : Ddrlen deerin tr Daha detayl bilgiye https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html adresinden ulaabilirsiniz.

  • blog.btrisk.com @btrisk /btrisktv /btrisk

    5

    imdi HelloAndroid$2.smali dosyasnn nemli noktalarna bakalm. //lk metin kutusunun(Enter Name) ieriinin okunmas const v23, 0x7f050004 //0x7f050004 bu yazman karl public.xml ierisinde txt_name olarak gemekte invoke-virtual/range {v22 .. v23}, Lcom/example/helloandroid/HelloAndroid;->findViewById(I)Landroid/view/View; move-result-object v9 //kinci metin kutusunun (Enter Serial) ieriinin okunmas ilemi. const v23, 0x7f050006 invoke-virtual/range {v22 .. v23}, Lcom/example/helloandroid/HelloAndroid;->findViewById(I)Landroid/view/View; move-result-object v21 //sim (Name) uzunluunun kontrolnn yaplmas. (Minimum 4 karakterli olmal) const/16 v22, 0x4 move v0, v11 move/from16 v1, v22 if-ge v0, v1, :cond_0 //Min 4 chars uyarsnn verildii ksm const-string v23, "Min 4 chars" const/16 v24, 0x1 .line 86 invoke-static/range {v22 .. v24}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast; move-result-object v13 .line 88 .local v13, notificacionToast:Landroid/widget/Toast; invoke-virtual {v13}, Landroid/widget/Toast;->show()V //karakter dizisinin integer'e dntrlmesi invoke-virtual {v10, v5}, Ljava/lang/String;->charAt(I)C move-result v3 //Asciiye dntrlen ismin (Name) ilk 5 rakamann seilir const/16 v22, 0x0 const/16 v23, 0x5 move-object v0, v12 move/from16 v1, v22 move/from16 v2, v23 invoke-virtual {v0, v1, v2}, Ljava/lang/String;->i(II)Ljava/lang/String; //Birici metin kutusuna girilen isimin ilk be rakam ile 0x6b016nn xor edilme ilemi

  • blog.btrisk.com @btrisk /btrisktv /btrisk

    6

    invoke-static {v12}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v22 const v23, 0x6b016 //v22 deeri ile v23 deeri xor ilemine tabi tutuluyor. xor-int v22, v22, v23 //Telefonun ime numarasna eriimin salanmas .local v8, mTelephonyMgr:Landroid/telephony/TelephonyManager; invoke-virtual {v8}, Landroid/telephony/TelephonyManager;->getDeviceId()Ljava/lang/String move-result-object v6 .line 102 .local v6, imei2:Ljava/lang/String; //Bu ksmda da sim kart seri numarasna eriim salanmakta invoke-virtual {v8}, Landroid/telephony/TelephonyManager;->getSimSerialNumber()Ljava/lang/String; move-result-object v16 .line 103 .local v16, simsn:Ljava/lang/String; const-wide/16 v17, 0x0 //me numarasnn ve sim seri numarasnn ilk alt rakam alnyor .line 104 .local v17, temp01:J const/16 v22, 0x0 const/16 v23, 0x6 move-object v0, v6 move/from16 v1, v22 move/from16 v2, v23 invoke-virtual {v0, v1, v2}, Ljava/lang/String;->substring(II)Ljava/lang/String; move-result-object v19 .line 105 .local v19, temp02:Ljava/lang/String; const/16 v22, 0x0 const/16 v23, 0x6 move-object/from16 v0, v16 move/from16 v1, v22 move/from16 v2, v23 invoke-virtual {v0, v1, v2}, Ljava/lang/String;->substring(II)Ljava/lang/String; move-result-object v20 //sim seri numaras ve ime numarasnn xor ilemine tabi tutulmas-Serialn ikinci parasnn oluturulmas

  • blog.btrisk.com @btrisk /btrisktv /btrisk

    7

    .local v20, temp03:Ljava/lang/String;< invoke-static/range {v19 .. v19}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v22 invoke-static/range {v20 .. v20}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v23 xor-int v22, v22, v23 //Serialin Serial1-Serial2-Serial3 olarak dizi foramatna evrilmesi new-instance v22, Ljava/lang/StringBuilder; invoke-static {v12}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String; move-result-object v23 invoke-direct/range {v22 .. v23}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V const-string v23, "-" invoke-virtual/range {v22 .. v23}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v22 invoke-static/range {v17 .. v18}, Ljava/lang/String;->valueOf(J)Ljava/lang/String; move-result-object v23 invoke-virtual/range {v22 .. v23}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v22 const-string v23, "-" //Serialn nc ksm olutuluruyor invoke-virtual/range {v22 .. v23}, Ljava/lang/StringBuilder;- >append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v22 move-object/from16 v0, v22 move-object/from16 v1, v19 invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v22 //Bu ksmda girilen serial ile programn hesaplad serial kontrol salanmakta invoke-virtual {v14, v15}, Ljava/lang/String;->equals(Ljava/lang/Object;) Serial 1. ksmn oluturulmas: Enter name ksmna girilen ismin Ascii deeri :btrisk - Ascii-> 98116114105115107 smin ilk 5 karakteri ile 0x6B016nn (438294) xor ileminin sonucu ->511826

    Serial 2. ksmn oluturulmas: me numaras ve Sim seri numarasnn xor ilemi sonucu HW ID1 (me): 425204 (ilk 6 karakter) HW ID2 (Sim Serial No ): 890126 (ilk 6 karakter) me numaras ve Sim seri numarasnn xor ilemi sonucu->780794

  • blog.btrisk.com @btrisk /btrisktv /btrisk

    8

    Serial 3. ksmnn oluturulmas: HW ID1 (me): 425204 (ilk 6 karakter)

    Bylece reverse ilememimiz tamamlanm oldu. Ayrca reverse ilemini aadaki gibi de yapabilirdik. o Apk dosyamz herhangi bir ariv program (Winrar,Winzip v.b.) ile aalm ve ierisinden classes.dex uzantl dosyay bir klasre kopyalayalm. o Konunun banda verdiimiz linklerden Dex2jar ve Java Decompiler programlarn indirelim ve arivden karlm. o Dex2jar klasrnn ierisine classes.dex dosyasn yaptralm. o Dex2jar klasr ierisinde komut satrn ap dex2jar.bat classes.dex yazp enter tuuna basalm.

  • blog.btrisk.com @btrisk /btrisktv /btrisk

    9

    o Oluan classes_dex2jar.jar dosyasn Java Decompiler (jd-gui.exe) ile aalm.

  • blog.btrisk.com @btrisk /btrisktv /btrisk

    10

    Uygulamamz daha ok alk olduumuz Java dilinde kaynak kodunu grebildik. Yine burada da atanan register deerlerini R.class ierisinde karlklarn grebiliriz.

  • blog.btrisk.com @btrisk /btrisktv /btrisk

    11

    Kaynak ierisinde serialin nasl oluturulduu aadaki ksmnda kolayca anlaya biliyoruz.

    Neden Smali? Android .apk ve .jar dosyalar ierisinde belirli ilevleri yerine getirmek zere Java snflar yer alr. Smali ile Java snflar dzenlenebilir ve deitirebilir formata gelir. Jar formatnda ise kaynak kodu rahatlkla okuyabiliriz ama zerinde deiikliker yapp tekrardan kullanlr hale getirilemesi zor bir sretir. Bu sebeplerden dolay deiiklikler iin ara kod dzeyi olarak tabir etiimiz Smali kodu zerinden kaynak kodu obfuscate edilmemi android uygulamalar zerinde tersine mhendislik yntemi ile deiikler yapabilir ve programn ileyiine mdahale edebiliriz.

    Dex< > Smali < Jar

  • blog.btrisk.com @btrisk /btrisktv /btrisk

    12

    Hakkmzda

    2009 ylnda kurulmu ve sadece bilgi gvenlii hizmetlerine odaklanm olan BTRisk Bilgi

    Gvenlii ve BT Ynetiim Hizmetleri bilgi gvenlii problemine ynetim kurulu seviyesinden

    sistem odas uygulamasna kadar uzanan alanda zm retmektedir.

    BTRisk bilgi gvenlii problemini grnr hale getirerek alglanmasn, anlalmasn ve

    dolaysyla ele alnmasn mmkn hale getirmektedir.

    BTRisk bilgi gvenlii problemine kar gelitirdii yaklamlar gerek hayat koullarnda test

    etmi ve uygulanabilir hale getirmitir.

    Bilgi gvenlii ve BT ynetiim hizmet alanlarmz aadaki gibidir:

    Pentest Hizmetleri

    Bilgi Gvenlii ve BT Ynetiim Hizmetleri

    Bilgi Gvenlii Operasyon Hizmetleri

    Teknik Gvenlik Denetim Eitimleri

    Ynetiim ve Denetim Eitimleri

    zgn rnlerimiz aadaki gibidir:

    5651 Uyumlu Wi-Fi ve Kablolu Bilgi Gvenlii Risk Analizi Tek Kullanmlk Parola

    A Hotspot zm ve Denetim Uygulamas zm