SlideShare a Scribd company logo
1 of 13
Android uygulamalarını Reverse Engineering
(Tersine Mühendislik) Yöntemi ile
İnceleme
Bu makalemizde, kaynak kodu obfuscate edilmemiş bir
android uygulamasının tersine mühendislik yöntemi ile
incelenmesi konusuna giriş yapacağız.
blog.btrisk.com @btrisk /btrisktv /btrisk
1
Tersine mühendislik bir aygıtın, objenin veya sistemin; yapısının, işlevinin veya
çalışmasının, çıkarımcı bir akıl yürütme analiziyle keşfedilmesi işlemidir. Makine veya
mekanik alet, elektronik komponent, yazılım programı gibi parçalarına ayrılması ve çalışma
prensiplerinin detaylı şekilde analizini içerir.
Bir android uygulamasını herhangi bir arşiv programı (Winrar,Winzip v.b.) ile açtığımızda
içerisinde Meta-InfClass, Resorce, AndroidManifest ve Res dosyalarını barındırdığı görülür.
Şimdi bu dosyaların genel anlamda içeriğinden bahsedelim.
 META-INF Klasörü
o MANIFEST.MF: Bildiri dosyası.
o CERT.RSA: Uygulama sertifikası.
o CERT.SF: Kaynakların listesi.
 res: Kaynakları içeren dizin.
 AndroidManifest.xml: Ek Android bildirim dosyası olup içinde, uygulamanın adını,
versiyonu, erişim bilgileri, lib dosyalarının kaynağını belirten bilgiler yer almaktadır. Bu
android XML dosyası herkes tarafından açılıp okunabilen düz XML metin haline
dönüştürülebilir.
 classes.dex: Dalvik sanal makinesi (Dalvik virtual machine) tarafından anlaşılabilir dex
dosya biçiminde derlenmiş dosyadır.
 resources.arsc : Örneğin XML gibi derlenmiş kaynakların bulunduğu dosyadır.
Reverse işlemimizde kullanacağımız araçlar 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 işlemi uygulayacağımız Crackme03.apk uygulamasını telefonumuza veya
emalutörümüze kurulumunu gerçekleştirip uygulamamızın fonksiyonlarına göz atalım.
blog.btrisk.com @btrisk /btrisktv /btrisk
2
Uygulamada check butonuna bastığımızda bize “Min 4 chars” uyarısı verdiğini
gözlemledik.
blog.btrisk.com @btrisk /btrisktv /btrisk
3
“Enter Name” ve “Enter Serial” kısmını herhangi bir şeyler yazdığımızda “Bad boy”
uyarısını gözlemledik.
Karşımıza çıkan uyarılar ilerleyen adımlarda reverse işleminde bizlere yardımcı olacak.
Şimdi Crackme03.apk’yı APK-MultiTool aracılığı ile decomplie edelim. Setup.bat’ı çalıştırıp
Setup Directories seçelim. Daha sonrasında Crackme03.apk dosyasını “place-apk-here-for-
modding” içerisine kopyalayalım.
blog.btrisk.com @btrisk /btrisktv /btrisk
4
Bu işlem sonrasında Script.bat’ı çalıştaralım ve Set current project(24) seçelim.
Karşımıza çıkan bu ekrandan hangi apk üzerinde çalışacağımızı seçelim(1). Son işlem olarak
Decomplie apk(9)’yı seçelim.
APK-Multi-ToolprojectsCrackme03.apksmali klasöründeki smali dosyalarınının hepsini
Notpad++ ile açalım. Yukarıda aldığımız uyarıları “.smali” uzantılı dosyalarının içerisinde
bulmaya çalışalım. Aldığımız uyarıları “HelloAndroid$2.smali” dosyasında bulduk. Smali
kodumuzu incelemeden bir kaç önemli fonksiyonuna kısaca göz atalım.
move-object/from16 vAA, vBBBB (bir nesnenin yazmacını diğerine taşıma işlemi)
A:hedef yazmaç(register)
B:kaynak yazmaç
const vAA, #+BBBBBBBB (Sabit (#+BBBBBBBB) sayı değerli bir yazmaçın özel(vAA) bir
yazmaça değerinin taşınması işlemi)
A:hedef yazmaç
B:kaynak 32-bitlik tanımlı sabit tamsayı değeri(integer)
invoke-virtual/range { vA .. vX }, Lclass;->method()R
vA-vX: metoda geçirilmekte olan argümanların aralığı
class: Yöntemi içeren sınıfın adı
method: Çağırma yönteminin adı
R : Dödürülen değerin türü
Daha detaylı bilgiye https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html
adresinden ulaşabilirsiniz.
blog.btrisk.com @btrisk /btrisktv /btrisk
5
Şimdi “HelloAndroid$2.smali” dosyasının önemli noktalarına bakalım.
//İlk metin kutusunun(Enter Name) içeriğinin okunması
const v23, 0x7f050004
//0x7f050004 bu yazmaçın karşılığı public.xml içerisinde txt_name olarak geçmekte
invoke-virtual/range {v22 .. v23}, Lcom/example/helloandroid/HelloAndroid;-
>findViewById(I)Landroid/view/View;
move-result-object v9
//İkinci metin kutusunun (Enter Serial) içeriğinin okunması işlemi.
const v23, 0x7f050006
invoke-virtual/range {v22 .. v23}, Lcom/example/helloandroid/HelloAndroid;-
>findViewById(I)Landroid/view/View;
move-result-object v21
//İsim (Name) uzunluğunun kontrolünün yapılması. (Minimum 4 karakterli olmalı)
const/16 v22, 0x4
move v0, v11
move/from16 v1, v22
if-ge v0, v1, :cond_0
//Min 4 chars uyarısının verildiği kısım
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 dönüştürülmesi
invoke-virtual {v10, v5}, Ljava/lang/String;->charAt(I)C
move-result v3
//Asciiye dönüştürlen ismin (Name) ilk 5 rakamanın seçilir
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 0x6b016’nın xor edilme işlemi
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 değeri ile v23 değeri xor işlemine tabi tutuluyor.
xor-int v22, v22, v23
//Telefonun ime numarasına erişimin sağlanması
.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 kısımda da sim kart seri numarasına erişim sağlanmakta
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 numarasının ve sim seri numarasının ilk altı rakamı alınıyor
.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 numarasının xor işlemine tabi tutulması-Serial’ın ikinci
parçasının oluşturulması
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 foramatına ç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, "-"
//Serial’ın üçüncü kısmı oluştuluruyor
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 kısımda girilen serial ile programın hesapladığı serial kontrolü sağlanmakta
invoke-virtual {v14, v15}, Ljava/lang/String;->equals(Ljava/lang/Object;)
Serial 1. kısmın oluşturulması:
Enter name kısmına girilen ismin Ascii değeri :btrisk - Ascii-> 98116114105115107
İsmin ilk 5 karakteri ile 0x6B016’nın (438294) xor işleminin sonucu ->511826
Serial 2. kısmın oluşturulması:
İme numarası ve Sim seri numarasının xor işlemi sonucu
HW ID1 (İme): 425204 (ilk 6 karakter)
HW ID2 (Sim Serial No ): 890126 (ilk 6 karakter)
İme numarası ve Sim seri numarasının xor işlemi sonucu->780794
blog.btrisk.com @btrisk /btrisktv /btrisk
8
Serial 3. kısmının oluşturulması:
HW ID1 (İme): 425204 (ilk 6 karakter)
Böylece reverse işlememimiz tamamlanmış oldu. Ayrıca reverse işlemini aşağıdaki gibi de
yapabilirdik.
o Apk dosyamızı herhangi bir arşiv programı (Winrar,Winzip v.b.) ile açalım ve
içerisinden classes.dex uzantılı dosyayı bir klasöre kopyalayalım.
o Konunun başında verdiğimiz linklerden Dex2jar ve Java Decompiler programlarını
indirelim ve arşivden çıkarılm.
o Dex2jar klasörünün içerisine classes.dex dosyasını yapıştıralım.
o Dex2jar klasörü içerisinde komut satırını açıp “ dex2jar.bat classes.dex” yazıp enter
tuşuna basalım.
blog.btrisk.com @btrisk /btrisktv /btrisk
9
o Oluşan classes_dex2jar.jar dosyasını Java Decompiler (jd-gui.exe) ile açalım.
blog.btrisk.com @btrisk /btrisktv /btrisk
10
Uygulamamızı daha çok alışık olduğumuz Java dilinde kaynak kodunu görebildik. Yine
burada da atanan register değerlerini R.class içerisinde karşılıklarını görebiliriz.
blog.btrisk.com @btrisk /btrisktv /btrisk
11
Kaynak içerisinde serialin nasıl oluşturulduğu aşağıdaki kısımında kolayca anlaya biliyoruz.
Neden Smali?
Android .apk ve .jar dosyaları içerisinde belirli işlevleri yerine getirmek üzere Java sınıfları
yer alır. Smali ile Java sınıfları düzenlenebilir ve değiştirebilir formata gelir. Jar formatında
ise kaynak kodu rahatlıkla okuyabiliriz ama üzerinde değişikliker yapıp tekrardan kullanılır
hale getirilemesi zor bir süreçtir. Bu sebeplerden dolayı değişiklikler için ara kod düzeyi
olarak tabir etiğimiz Smali kodu üzerinden kaynak kodu obfuscate edilmemiş android
uygulamalar üzerinde tersine mühendislik yöntemi ile değişikler yapabilir ve programın
işleyişine müdahale edebiliriz.
Dex< > Smali < Jar
blog.btrisk.com @btrisk /btrisktv /btrisk
12
Hakkımızda
2009 yılında kurulmuş ve sadece bilgi güvenliği hizmetlerine odaklanmış olan BTRisk Bilgi
Güvenliği ve BT Yönetişim Hizmetleri bilgi güvenliği problemine yönetim kurulu seviyesinden
sistem odası uygulamasına kadar uzanan alanda çözüm üretmektedir.
BTRisk bilgi güvenliği problemini görünür hale getirerek algılanmasını, anlaşılmasını ve
dolayısıyla ele alınmasını mümkün hale getirmektedir.
BTRisk bilgi güvenliği problemine karşı geliştirdiği yaklaşımları gerçek hayat koşullarında test
etmiş ve uygulanabilir hale getirmiştir.
Bilgi güvenliği ve BT yönetişim hizmet alanlarımız aşağıdaki gibidir:
 Pentest Hizmetleri
 Bilgi Güvenliği ve BT Yönetişim Hizmetleri
 Bilgi Güvenliği Operasyon Hizmetleri
 Teknik Güvenlik Denetim Eğitimleri
 Yönetişim ve Denetim Eğitimleri
Özgün ürünlerimiz aşağıdaki gibidir:
5651 Uyumlu Wi-Fi ve Kablolu Bilgi Güvenliği Risk Analizi Tek Kullanımlık Parola
Ağ Hotspot Çözümü ve Denetim Uygulaması Çözümü

More Related Content

What's hot

Introduction to Gitlab | Gitlab 101 | Training Session
Introduction to Gitlab | Gitlab 101 | Training SessionIntroduction to Gitlab | Gitlab 101 | Training Session
Introduction to Gitlab | Gitlab 101 | Training SessionAnwarul Islam
 
Troopers 19 - I am AD FS and So Can You
Troopers 19 - I am AD FS and So Can YouTroopers 19 - I am AD FS and So Can You
Troopers 19 - I am AD FS and So Can YouDouglas Bienstock
 
Red team upgrades using sccm for malware deployment
Red team upgrades   using sccm for malware deploymentRed team upgrades   using sccm for malware deployment
Red team upgrades using sccm for malware deploymentenigma0x3
 
Gitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTreeGitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTreeTeerapat Khunpech
 
Clean Code I - Best Practices
Clean Code I - Best PracticesClean Code I - Best Practices
Clean Code I - Best PracticesTheo Jungeblut
 
Introducing GitLab (September 2018)
Introducing GitLab (September 2018)Introducing GitLab (September 2018)
Introducing GitLab (September 2018)Noa Harel
 
Ruby on Rails Penetration Testing
Ruby on Rails Penetration TestingRuby on Rails Penetration Testing
Ruby on Rails Penetration Testing3S Labs
 
Developing Faster with Swagger
Developing Faster with SwaggerDeveloping Faster with Swagger
Developing Faster with SwaggerTony Tam
 
Introducing GitLab (June 2018)
Introducing GitLab (June 2018)Introducing GitLab (June 2018)
Introducing GitLab (June 2018)Noa Harel
 
Meetup React Sanca - 29/11/18 - React Testing
Meetup React Sanca - 29/11/18 - React TestingMeetup React Sanca - 29/11/18 - React Testing
Meetup React Sanca - 29/11/18 - React TestingAugusto Lazaro
 
Zararlı Yazılım Analizi ve Tespitinde YARA Kullanımı
Zararlı Yazılım Analizi ve Tespitinde YARA KullanımıZararlı Yazılım Analizi ve Tespitinde YARA Kullanımı
Zararlı Yazılım Analizi ve Tespitinde YARA KullanımıBGA Cyber Security
 
Version Control with Git
Version Control with GitVersion Control with Git
Version Control with GitLuigi De Russis
 
Writing High Quality Code in C#
Writing High Quality Code in C#Writing High Quality Code in C#
Writing High Quality Code in C#Svetlin Nakov
 
DevOps!! 도데체 왜, 어떻게 할까??
DevOps!! 도데체 왜, 어떻게 할까??DevOps!! 도데체 왜, 어떻게 할까??
DevOps!! 도데체 왜, 어떻게 할까??Joseph Kim
 

What's hot (20)

BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-2
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-2BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-2
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-2
 
Introduction to Gitlab | Gitlab 101 | Training Session
Introduction to Gitlab | Gitlab 101 | Training SessionIntroduction to Gitlab | Gitlab 101 | Training Session
Introduction to Gitlab | Gitlab 101 | Training Session
 
Troopers 19 - I am AD FS and So Can You
Troopers 19 - I am AD FS and So Can YouTroopers 19 - I am AD FS and So Can You
Troopers 19 - I am AD FS and So Can You
 
Red team upgrades using sccm for malware deployment
Red team upgrades   using sccm for malware deploymentRed team upgrades   using sccm for malware deployment
Red team upgrades using sccm for malware deployment
 
Gitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTreeGitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTree
 
Clean Code I - Best Practices
Clean Code I - Best PracticesClean Code I - Best Practices
Clean Code I - Best Practices
 
Introducing GitLab (September 2018)
Introducing GitLab (September 2018)Introducing GitLab (September 2018)
Introducing GitLab (September 2018)
 
Ruby on Rails Penetration Testing
Ruby on Rails Penetration TestingRuby on Rails Penetration Testing
Ruby on Rails Penetration Testing
 
Developing Faster with Swagger
Developing Faster with SwaggerDeveloping Faster with Swagger
Developing Faster with Swagger
 
Introducing GitLab (June 2018)
Introducing GitLab (June 2018)Introducing GitLab (June 2018)
Introducing GitLab (June 2018)
 
Meetup React Sanca - 29/11/18 - React Testing
Meetup React Sanca - 29/11/18 - React TestingMeetup React Sanca - 29/11/18 - React Testing
Meetup React Sanca - 29/11/18 - React Testing
 
Zararlı Yazılım Analizi ve Tespitinde YARA Kullanımı
Zararlı Yazılım Analizi ve Tespitinde YARA KullanımıZararlı Yazılım Analizi ve Tespitinde YARA Kullanımı
Zararlı Yazılım Analizi ve Tespitinde YARA Kullanımı
 
Version Control with Git
Version Control with GitVersion Control with Git
Version Control with Git
 
Writing High Quality Code in C#
Writing High Quality Code in C#Writing High Quality Code in C#
Writing High Quality Code in C#
 
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1
 
DevOps!! 도데체 왜, 어떻게 할까??
DevOps!! 도데체 왜, 어떻게 할까??DevOps!! 도데체 왜, 어떻게 할까??
DevOps!! 도데체 왜, 어떻게 할까??
 
Introduction To Git
Introduction To GitIntroduction To Git
Introduction To Git
 
BitBucket presentation
BitBucket presentationBitBucket presentation
BitBucket presentation
 
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 2
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 2BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 2
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 2
 
Source control
Source controlSource control
Source control
 

Similar to Android Uygulamaların Tersine Mühendislik Yöntemi ile İncelenmesi

ARM Mimarisinde Exploit Geliştirme
ARM Mimarisinde Exploit GeliştirmeARM Mimarisinde Exploit Geliştirme
ARM Mimarisinde Exploit GeliştirmeSignalSEC Ltd.
 
RPC Zafiyetlerinin Keşfi
RPC Zafiyetlerinin KeşfiRPC Zafiyetlerinin Keşfi
RPC Zafiyetlerinin KeşfiSignalSEC Ltd.
 
W3af ile Web Uygulama Güvenlik Testleri – II
W3af ile Web Uygulama Güvenlik Testleri – IIW3af ile Web Uygulama Güvenlik Testleri – II
W3af ile Web Uygulama Güvenlik Testleri – IIBGA Cyber Security
 
45965 php-source-code-analysis
45965 php-source-code-analysis45965 php-source-code-analysis
45965 php-source-code-analysisAttaporn Ninsuwan
 
Introduction to Android Programming
Introduction to Android ProgrammingIntroduction to Android Programming
Introduction to Android ProgrammingAnıl Sözeri
 
Emrah KAHRAMAN - Java RMI
Emrah KAHRAMAN - Java RMI Emrah KAHRAMAN - Java RMI
Emrah KAHRAMAN - Java RMI Emrah Kahraman
 
Wireshark.pdf
Wireshark.pdfWireshark.pdf
Wireshark.pdfandrohitt
 
Nginx ve Unicorn'la Rack Uygulamalarını Koşturmak
Nginx ve Unicorn'la Rack Uygulamalarını KoşturmakNginx ve Unicorn'la Rack Uygulamalarını Koşturmak
Nginx ve Unicorn'la Rack Uygulamalarını KoşturmakUğur Özyılmazel
 
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim NotlarımWeb Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim NotlarımNur Yesilyurt
 
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş SüreciASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş SüreciSinan Bozkuş
 
Java ve axis2 framework ile web service yayınlamak
Java ve axis2 framework ile web service yayınlamakJava ve axis2 framework ile web service yayınlamak
Java ve axis2 framework ile web service yayınlamakTayfun Çelik
 
Heap Overflow Zafiyetleri & Exploiting
Heap Overflow Zafiyetleri & ExploitingHeap Overflow Zafiyetleri & Exploiting
Heap Overflow Zafiyetleri & ExploitingSignalSEC Ltd.
 
Girişimciler ve Geliştiriciler için Android - Etkin Android Programlama
Girişimciler ve Geliştiriciler için Android - Etkin Android ProgramlamaGirişimciler ve Geliştiriciler için Android - Etkin Android Programlama
Girişimciler ve Geliştiriciler için Android - Etkin Android ProgramlamaFatih Sokmen
 

Similar to Android Uygulamaların Tersine Mühendislik Yöntemi ile İncelenmesi (20)

ARM Mimarisinde Exploit Geliştirme
ARM Mimarisinde Exploit GeliştirmeARM Mimarisinde Exploit Geliştirme
ARM Mimarisinde Exploit Geliştirme
 
RPC Zafiyetlerinin Keşfi
RPC Zafiyetlerinin KeşfiRPC Zafiyetlerinin Keşfi
RPC Zafiyetlerinin Keşfi
 
W3af ile Web Uygulama Güvenlik Testleri – II
W3af ile Web Uygulama Güvenlik Testleri – IIW3af ile Web Uygulama Güvenlik Testleri – II
W3af ile Web Uygulama Güvenlik Testleri – II
 
45965 php-source-code-analysis
45965 php-source-code-analysis45965 php-source-code-analysis
45965 php-source-code-analysis
 
Introduction to Android Programming
Introduction to Android ProgrammingIntroduction to Android Programming
Introduction to Android Programming
 
Emrah KAHRAMAN - Java RMI
Emrah KAHRAMAN - Java RMI Emrah KAHRAMAN - Java RMI
Emrah KAHRAMAN - Java RMI
 
Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2Hacking'in Mavi Tarafı -2
Hacking'in Mavi Tarafı -2
 
Jmeter ile uygulama katmanında yük testi gerçekleştirme
Jmeter ile uygulama katmanında yük testi gerçekleştirmeJmeter ile uygulama katmanında yük testi gerçekleştirme
Jmeter ile uygulama katmanında yük testi gerçekleştirme
 
Wireshark.pdf
Wireshark.pdfWireshark.pdf
Wireshark.pdf
 
.Net ile yazılım güvenliği
.Net ile yazılım güvenliği.Net ile yazılım güvenliği
.Net ile yazılım güvenliği
 
Nginx ve Unicorn'la Rack Uygulamalarını Koşturmak
Nginx ve Unicorn'la Rack Uygulamalarını KoşturmakNginx ve Unicorn'la Rack Uygulamalarını Koşturmak
Nginx ve Unicorn'la Rack Uygulamalarını Koşturmak
 
Holynix v1
Holynix v1Holynix v1
Holynix v1
 
Sqlmap Analiz
Sqlmap AnalizSqlmap Analiz
Sqlmap Analiz
 
Sunu (1)
Sunu (1)Sunu (1)
Sunu (1)
 
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim NotlarımWeb Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
 
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş SüreciASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
 
Java ve axis2 framework ile web service yayınlamak
Java ve axis2 framework ile web service yayınlamakJava ve axis2 framework ile web service yayınlamak
Java ve axis2 framework ile web service yayınlamak
 
Heap Overflow Zafiyetleri & Exploiting
Heap Overflow Zafiyetleri & ExploitingHeap Overflow Zafiyetleri & Exploiting
Heap Overflow Zafiyetleri & Exploiting
 
Girişimciler ve Geliştiriciler için Android - Etkin Android Programlama
Girişimciler ve Geliştiriciler için Android - Etkin Android ProgramlamaGirişimciler ve Geliştiriciler için Android - Etkin Android Programlama
Girişimciler ve Geliştiriciler için Android - Etkin Android Programlama
 
Bmup_v1
Bmup_v1Bmup_v1
Bmup_v1
 

More from BTRisk Bilgi Güvenliği ve BT Yönetişim Hizmetleri

More from BTRisk Bilgi Güvenliği ve BT Yönetişim Hizmetleri (20)

Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
 
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 2
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 2Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 2
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 2
 
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1
 
BTRisk - Siber Olay Tespit ve Mudahale Egitimi
BTRisk - Siber Olay Tespit ve Mudahale EgitimiBTRisk - Siber Olay Tespit ve Mudahale Egitimi
BTRisk - Siber Olay Tespit ve Mudahale Egitimi
 
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3
 
Yazıcı Güvenliği
Yazıcı GüvenliğiYazıcı Güvenliği
Yazıcı Güvenliği
 
BTRISK ISO27001 UYGULAMA EGITIMI SUNUMU
BTRISK ISO27001 UYGULAMA EGITIMI SUNUMUBTRISK ISO27001 UYGULAMA EGITIMI SUNUMU
BTRISK ISO27001 UYGULAMA EGITIMI SUNUMU
 
Sizma testi bilgi toplama
Sizma testi bilgi toplamaSizma testi bilgi toplama
Sizma testi bilgi toplama
 
Kali Linux Hakkında Herşey
Kali Linux Hakkında HerşeyKali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
 
Web uygulama açıklıklarından faydalanarak sistem ele geçirme
Web uygulama açıklıklarından faydalanarak sistem ele geçirmeWeb uygulama açıklıklarından faydalanarak sistem ele geçirme
Web uygulama açıklıklarından faydalanarak sistem ele geçirme
 
BTRisk iOS Mobil Uygulama Denetimi Eğitimi
BTRisk iOS Mobil Uygulama Denetimi EğitimiBTRisk iOS Mobil Uygulama Denetimi Eğitimi
BTRisk iOS Mobil Uygulama Denetimi Eğitimi
 
Unix Denetim Dokümanı
Unix Denetim DokümanıUnix Denetim Dokümanı
Unix Denetim Dokümanı
 
BTRisk Yazılım Güvenliği Yönetimi Eğitimi
BTRisk Yazılım Güvenliği Yönetimi EğitimiBTRisk Yazılım Güvenliği Yönetimi Eğitimi
BTRisk Yazılım Güvenliği Yönetimi Eğitimi
 
BTRisk Android Uygulamalara Malware Yerleştirme Sunumu
BTRisk Android Uygulamalara Malware Yerleştirme SunumuBTRisk Android Uygulamalara Malware Yerleştirme Sunumu
BTRisk Android Uygulamalara Malware Yerleştirme Sunumu
 
BTRisk ISO 27001:2013 Bilgilendirme ve İç Denetim Eğitimi Sunumu
BTRisk ISO 27001:2013 Bilgilendirme ve İç Denetim Eğitimi SunumuBTRisk ISO 27001:2013 Bilgilendirme ve İç Denetim Eğitimi Sunumu
BTRisk ISO 27001:2013 Bilgilendirme ve İç Denetim Eğitimi Sunumu
 
BTRİSK Web Uygulama Güvenliği Denetimi Eğitim Sunumu
BTRİSK Web Uygulama Güvenliği Denetimi Eğitim SunumuBTRİSK Web Uygulama Güvenliği Denetimi Eğitim Sunumu
BTRİSK Web Uygulama Güvenliği Denetimi Eğitim Sunumu
 
Bilgi Güvenliği Farkındalık Eğitimi Sunumu
Bilgi Güvenliği Farkındalık Eğitimi SunumuBilgi Güvenliği Farkındalık Eğitimi Sunumu
Bilgi Güvenliği Farkındalık Eğitimi Sunumu
 
BTRisk Adli Bilişim Eğitimi Sunumu
BTRisk Adli Bilişim Eğitimi SunumuBTRisk Adli Bilişim Eğitimi Sunumu
BTRisk Adli Bilişim Eğitimi Sunumu
 
BTRİSK Web Uygulama Güvenliği Denetimi Eğitimi
BTRİSK Web Uygulama Güvenliği Denetimi EğitimiBTRİSK Web Uygulama Güvenliği Denetimi Eğitimi
BTRİSK Web Uygulama Güvenliği Denetimi Eğitimi
 
BTRWATCH ISO27001 Yazılımı
BTRWATCH ISO27001 YazılımıBTRWATCH ISO27001 Yazılımı
BTRWATCH ISO27001 Yazılımı
 

Android Uygulamaların Tersine Mühendislik Yöntemi ile İncelenmesi

  • 1. Android uygulamalarını Reverse Engineering (Tersine Mühendislik) Yöntemi ile İnceleme Bu makalemizde, kaynak kodu obfuscate edilmemiş bir android uygulamasının tersine mühendislik yöntemi ile incelenmesi konusuna giriş yapacağız.
  • 2. blog.btrisk.com @btrisk /btrisktv /btrisk 1 Tersine mühendislik bir aygıtın, objenin veya sistemin; yapısının, işlevinin veya çalışmasının, çıkarımcı bir akıl yürütme analiziyle keşfedilmesi işlemidir. Makine veya mekanik alet, elektronik komponent, yazılım programı gibi parçalarına ayrılması ve çalışma prensiplerinin detaylı şekilde analizini içerir. Bir android uygulamasını herhangi bir arşiv programı (Winrar,Winzip v.b.) ile açtığımızda içerisinde Meta-InfClass, Resorce, AndroidManifest ve Res dosyalarını barındırdığı görülür. Şimdi bu dosyaların genel anlamda içeriğinden bahsedelim.  META-INF Klasörü o MANIFEST.MF: Bildiri dosyası. o CERT.RSA: Uygulama sertifikası. o CERT.SF: Kaynakların listesi.  res: Kaynakları içeren dizin.  AndroidManifest.xml: Ek Android bildirim dosyası olup içinde, uygulamanın adını, versiyonu, erişim bilgileri, lib dosyalarının kaynağını belirten bilgiler yer almaktadır. Bu android XML dosyası herkes tarafından açılıp okunabilen düz XML metin haline dönüştürülebilir.  classes.dex: Dalvik sanal makinesi (Dalvik virtual machine) tarafından anlaşılabilir dex dosya biçiminde derlenmiş dosyadır.  resources.arsc : Örneğin XML gibi derlenmiş kaynakların bulunduğu dosyadır. Reverse işlemimizde kullanacağımız araçlar 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 işlemi uygulayacağımız Crackme03.apk uygulamasını telefonumuza veya emalutörümüze kurulumunu gerçekleştirip uygulamamızın fonksiyonlarına göz atalım.
  • 3. blog.btrisk.com @btrisk /btrisktv /btrisk 2 Uygulamada check butonuna bastığımızda bize “Min 4 chars” uyarısı verdiğini gözlemledik.
  • 4. blog.btrisk.com @btrisk /btrisktv /btrisk 3 “Enter Name” ve “Enter Serial” kısmını herhangi bir şeyler yazdığımızda “Bad boy” uyarısını gözlemledik. Karşımıza çıkan uyarılar ilerleyen adımlarda reverse işleminde bizlere yardımcı olacak. Şimdi Crackme03.apk’yı APK-MultiTool aracılığı ile decomplie edelim. Setup.bat’ı çalıştırıp Setup Directories seçelim. Daha sonrasında Crackme03.apk dosyasını “place-apk-here-for- modding” içerisine kopyalayalım.
  • 5. blog.btrisk.com @btrisk /btrisktv /btrisk 4 Bu işlem sonrasında Script.bat’ı çalıştaralım ve Set current project(24) seçelim. Karşımıza çıkan bu ekrandan hangi apk üzerinde çalışacağımızı seçelim(1). Son işlem olarak Decomplie apk(9)’yı seçelim. APK-Multi-ToolprojectsCrackme03.apksmali klasöründeki smali dosyalarınının hepsini Notpad++ ile açalım. Yukarıda aldığımız uyarıları “.smali” uzantılı dosyalarının içerisinde bulmaya çalışalım. Aldığımız uyarıları “HelloAndroid$2.smali” dosyasında bulduk. Smali kodumuzu incelemeden bir kaç önemli fonksiyonuna kısaca göz atalım. move-object/from16 vAA, vBBBB (bir nesnenin yazmacını diğerine taşıma işlemi) A:hedef yazmaç(register) B:kaynak yazmaç const vAA, #+BBBBBBBB (Sabit (#+BBBBBBBB) sayı değerli bir yazmaçın özel(vAA) bir yazmaça değerinin taşınması işlemi) A:hedef yazmaç B:kaynak 32-bitlik tanımlı sabit tamsayı değeri(integer) invoke-virtual/range { vA .. vX }, Lclass;->method()R vA-vX: metoda geçirilmekte olan argümanların aralığı class: Yöntemi içeren sınıfın adı method: Çağırma yönteminin adı R : Dödürülen değerin türü Daha detaylı bilgiye https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html adresinden ulaşabilirsiniz.
  • 6. blog.btrisk.com @btrisk /btrisktv /btrisk 5 Şimdi “HelloAndroid$2.smali” dosyasının önemli noktalarına bakalım. //İlk metin kutusunun(Enter Name) içeriğinin okunması const v23, 0x7f050004 //0x7f050004 bu yazmaçın karşılığı public.xml içerisinde txt_name olarak geçmekte invoke-virtual/range {v22 .. v23}, Lcom/example/helloandroid/HelloAndroid;- >findViewById(I)Landroid/view/View; move-result-object v9 //İkinci metin kutusunun (Enter Serial) içeriğinin okunması işlemi. const v23, 0x7f050006 invoke-virtual/range {v22 .. v23}, Lcom/example/helloandroid/HelloAndroid;- >findViewById(I)Landroid/view/View; move-result-object v21 //İsim (Name) uzunluğunun kontrolünün yapılması. (Minimum 4 karakterli olmalı) const/16 v22, 0x4 move v0, v11 move/from16 v1, v22 if-ge v0, v1, :cond_0 //Min 4 chars uyarısının verildiği kısım 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 dönüştürülmesi invoke-virtual {v10, v5}, Ljava/lang/String;->charAt(I)C move-result v3 //Asciiye dönüştürlen ismin (Name) ilk 5 rakamanın seçilir 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 0x6b016’nın xor edilme işlemi
  • 7. 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 değeri ile v23 değeri xor işlemine tabi tutuluyor. xor-int v22, v22, v23 //Telefonun ime numarasına erişimin sağlanması .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 kısımda da sim kart seri numarasına erişim sağlanmakta 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 numarasının ve sim seri numarasının ilk altı rakamı alınıyor .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 numarasının xor işlemine tabi tutulması-Serial’ın ikinci parçasının oluşturulması
  • 8. 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 foramatına ç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, "-" //Serial’ın üçüncü kısmı oluştuluruyor 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 kısımda girilen serial ile programın hesapladığı serial kontrolü sağlanmakta invoke-virtual {v14, v15}, Ljava/lang/String;->equals(Ljava/lang/Object;) Serial 1. kısmın oluşturulması: Enter name kısmına girilen ismin Ascii değeri :btrisk - Ascii-> 98116114105115107 İsmin ilk 5 karakteri ile 0x6B016’nın (438294) xor işleminin sonucu ->511826 Serial 2. kısmın oluşturulması: İme numarası ve Sim seri numarasının xor işlemi sonucu HW ID1 (İme): 425204 (ilk 6 karakter) HW ID2 (Sim Serial No ): 890126 (ilk 6 karakter) İme numarası ve Sim seri numarasının xor işlemi sonucu->780794
  • 9. blog.btrisk.com @btrisk /btrisktv /btrisk 8 Serial 3. kısmının oluşturulması: HW ID1 (İme): 425204 (ilk 6 karakter) Böylece reverse işlememimiz tamamlanmış oldu. Ayrıca reverse işlemini aşağıdaki gibi de yapabilirdik. o Apk dosyamızı herhangi bir arşiv programı (Winrar,Winzip v.b.) ile açalım ve içerisinden classes.dex uzantılı dosyayı bir klasöre kopyalayalım. o Konunun başında verdiğimiz linklerden Dex2jar ve Java Decompiler programlarını indirelim ve arşivden çıkarılm. o Dex2jar klasörünün içerisine classes.dex dosyasını yapıştıralım. o Dex2jar klasörü içerisinde komut satırını açıp “ dex2jar.bat classes.dex” yazıp enter tuşuna basalım.
  • 10. blog.btrisk.com @btrisk /btrisktv /btrisk 9 o Oluşan classes_dex2jar.jar dosyasını Java Decompiler (jd-gui.exe) ile açalım.
  • 11. blog.btrisk.com @btrisk /btrisktv /btrisk 10 Uygulamamızı daha çok alışık olduğumuz Java dilinde kaynak kodunu görebildik. Yine burada da atanan register değerlerini R.class içerisinde karşılıklarını görebiliriz.
  • 12. blog.btrisk.com @btrisk /btrisktv /btrisk 11 Kaynak içerisinde serialin nasıl oluşturulduğu aşağıdaki kısımında kolayca anlaya biliyoruz. Neden Smali? Android .apk ve .jar dosyaları içerisinde belirli işlevleri yerine getirmek üzere Java sınıfları yer alır. Smali ile Java sınıfları düzenlenebilir ve değiştirebilir formata gelir. Jar formatında ise kaynak kodu rahatlıkla okuyabiliriz ama üzerinde değişikliker yapıp tekrardan kullanılır hale getirilemesi zor bir süreçtir. Bu sebeplerden dolayı değişiklikler için ara kod düzeyi olarak tabir etiğimiz Smali kodu üzerinden kaynak kodu obfuscate edilmemiş android uygulamalar üzerinde tersine mühendislik yöntemi ile değişikler yapabilir ve programın işleyişine müdahale edebiliriz. Dex< > Smali < Jar
  • 13. blog.btrisk.com @btrisk /btrisktv /btrisk 12 Hakkımızda 2009 yılında kurulmuş ve sadece bilgi güvenliği hizmetlerine odaklanmış olan BTRisk Bilgi Güvenliği ve BT Yönetişim Hizmetleri bilgi güvenliği problemine yönetim kurulu seviyesinden sistem odası uygulamasına kadar uzanan alanda çözüm üretmektedir. BTRisk bilgi güvenliği problemini görünür hale getirerek algılanmasını, anlaşılmasını ve dolayısıyla ele alınmasını mümkün hale getirmektedir. BTRisk bilgi güvenliği problemine karşı geliştirdiği yaklaşımları gerçek hayat koşullarında test etmiş ve uygulanabilir hale getirmiştir. Bilgi güvenliği ve BT yönetişim hizmet alanlarımız aşağıdaki gibidir:  Pentest Hizmetleri  Bilgi Güvenliği ve BT Yönetişim Hizmetleri  Bilgi Güvenliği Operasyon Hizmetleri  Teknik Güvenlik Denetim Eğitimleri  Yönetişim ve Denetim Eğitimleri Özgün ürünlerimiz aşağıdaki gibidir: 5651 Uyumlu Wi-Fi ve Kablolu Bilgi Güvenliği Risk Analizi Tek Kullanımlık Parola Ağ Hotspot Çözümü ve Denetim Uygulaması Çözümü