You are on page 1of 13

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.

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
1

Uygulamada check butonuna bastmzda bize Min 4 chars uyars verdiini


gzlemledik.

blog.btrisk.com

@btrisk

/btrisktv

/btrisk
2

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-formodding ierisine kopyalayalm.

blog.btrisk.com

@btrisk

/btrisktv

/btrisk
3

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
4

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
5

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
6

.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;-><init>(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
7

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
8

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

blog.btrisk.com

@btrisk

/btrisktv

/btrisk
9

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
10

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
11

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


A Hotspot zm

blog.btrisk.com

Bilgi Gvenlii Risk Analizi


ve Denetim Uygulamas

@btrisk

Tek Kullanmlk Parola


zm

/btrisktv

/btrisk
12

You might also like