Akıllı Telefonlar ve Android Reverse Engineering

ogulcankacar

Yeni üye
29 Ağu 2022
42
42

Akıllı Telefonlar ve Android Reverse Engineering
myLogo.png



Giriş


Arkadaşlar merhaba bu yazımızda kısaca akıllı telefonlar hakkında birkaç şeye değinip ardından basit düzeyde bir android uygulamasının yani apk’nın (ki şuan apk yerine abb kullanılmaya başlandı) nasıl manipüle edildiğine bakacağız.

Akıllı Telefonlar
Şimdi öncelikle bildiğini gibi akıllı telefon dünyası bildiğiniz üzere çok hızlı gelişen bir süreç olmuştur. Hani daha dün tuşlu telefonlar kullanıyorduk. Şimdi parmaklarımızla hayatımızı kaydırıyoruz. Tabi bu hem olumlu yönde hem de olumsuz yönde kıvrılıp gitmektedir. Nitekim akıllı telefonlar deyince neredeyse herkesin aklına android ve IOS işletim sistemi olan telefonlar gelmektedir. Tabi bunların dışında olanlar da vardır illaki ama en yaygın olanları bunlardır diyebiliriz. İnsanlar akıllı telefon alırken genel de android ve IOS işletim sistemi tercih ediyorlar. Aslında bunun birkaç temel sebebi vardır; örneğin andorid işletim sistemine baktığımızda, android Google tarafından geliştirilmiş açık kaynaklı bir işletim sistemidir. Açık kaynak olmasının yararları da işte herkes bunu alarak derleyip istediği gibi kullanabilir. Derlemekten kastımız işte bir tane telefon üretirseniz kendinize işlemci, ana kart gibi donanımları bir ara getirip üstüne bir de android işletim sistemi yüklerseniz kendinize bir telefon üretebilirsiniz. Çünkü kaynak kodu zaten hazır olarak internet üzerinde bulunuyor. Android’in çekirdeğini de Linux oluşturmaktadır. Bu yüzden çok geniş yetenekleri vardır. Aslında temel olarak dokunmatik ekranlar için tasarlanmıştır, bu yüzden de düşük maliyetli ve kişiselleştirilebilen işletim sistemine muhtaç tüm cihazlar için bir nimettir diyebiliriz. Başlarda bu sadece tablet ve akıllı telefonları kapsamakta olsa da, günümüzde televizyonlar, arabalar, oyun konsolları, dijital kameralar ve saatler gibi cihazlarda da kullanılmaya başlamıştır. Diğer işletim sistemi olan IOS işletim sisteminin tutması neden derseniz ise, burada apple markasının güzel teknoloji pazarlama yolları insanlar üzerinde çok etkili olmuştur. Tabi bunun yanında apple güvenliğe çok odaklanmıştır. Bildiğiniz kapalı kutu bir cihazı güzel pazarlama yöntemleriyle ilginç hale getirip satın alınmasını sağlamıştır.​

Android Uygulama Geliştirme
Şimdi bir android uygulaması yazılma süreci genelde Android Studio ile başlamaktadır.
1.png

Android Stuido’ya fazla değinmek istemiyorum ama şimdi birazdan buradan yapılan bir uygulamanın kaynak kodlarına ulaşarak bir takım işlemler yapacağımız için üstün körü değinmekte de fayda var diye düşünüyorum. Bu sebeple birkaç şeyden bahsedebiliriz; şimdi öncelikle Android Stuido genelde Java veya Kotlin yazılım dilleri ile uygulamanızın kodlarını, XML düzeniyle de uygulamanızın tasarımını yapabilirsiniz. Android Stuido’da görselde de görüldüğü üzere bazı klasörler/paketler kullanılarak sınıflandırmalar yapılmıştır. Bu klasörlere değinmekte fayda var ki zaten amaçta bu klasörlerin hangileri işimize yarayabilir bunu az biraz öğrenmek;​
  • Manifest klasöründe, bu aslında çok önemli bir dosyadır üzerinde baya konuşulabilinir ama kısaca biz burada uygulamamızda kullanacağımız izinleri istediğimiz bölümdür diyelim. Bu dosya içerisinde çalışan activity'ler versiyonlar filan gibi şeyleri görebiliyoruz.​
  • Java klasörü ise aslında, Java veya Kotlin programlama diliyle uygulamamızın programlama kısmının yazıldığı bölümdür diyebiliriz.​
  • Res klasörü içerisinde de, burada uygulamamızda kullanacağımız; görseller, ses dosyaları, tasarımlar, renkler, yazı tipleri vb. unsurların tasarlandığı/eklendiği bölümdür.​
  • Gradle Scripts bölümü ise uygulamamızın versiyon bilgilerinin ayarlandığı, dış kütüphaneler filan eklendiği bölümdür diyebiliriz.​
Bu anlattıklarım çok üstünkörü ama zaten amacım Android Studio’yu tanıtmak değil, Android Stuido kullanılarak oluşturulan bir uygulamanın kaynak kodlarına ulaştığımızda nereye, hangi klasörlere göz atsak birşeyler elde edebiliriz bunu anlamaktır. Neticede İşte burada bir uygulama yazıldıktan sonra apk olarak uygulama oluşturup bu apk’yı Google play’e aktarabiliyorsunuz. Derleme sırasında da bir DEX dosyası oluşmaktadır. DEX dosyası yani bir asembly dosyasıdır. İşte bu DEX koduyla beraber bizim kütüphanelerimiz apk paketimize eklenmektedir. Bu dosyalarımız apk paketimize eklendikten sonra biz artık geliştirici sahibi olduğumuzu belirten kendi imzamızla beraber bir uygulama ortaya çıkarmış oluyoruz. Neticede fazla uzatmadan biz Reverse Engineering aşamasına geçelim.​


Reverse Engineering Süreci

Şimdi burada dediğim gibi çok büyük bir şey yapmayacağız, sadece mantığını anlamak için ufak birkaç kod yazıp analiz yapacağız, yani amaç farkındalık yaratmak.

Arkadaşlar bu süreci biz, benim yazdığım küçük birkaç satır kod içeren uygulama üzerinden işleyeceğiz, ama gerçek hayatta siz bu testi yapmak istediğinizde, yapacağınız uygulamaları telefonun içinden veya internette bir yerden alarak onun üzerinde test yapacaksınız. Yani burada biz uygulama yazdık diye burada yapacağımız işlemler sadece bizim yazdığımız kodlara özel değil. Biz sadece başkasının uygulaması ile uğraşmayalım diye kendimiz bir uygulama oluşturduk. Şimdi fazla uzatmadan terminal açarak gelelim tersine mühendislik işlemlerine. Arkadaşlar android reverse engineering aşamasında pek çok bize yardımcı olacak araç vardır. Bu araçların gidişata göre yani karşımızdaki uygulamaya göre sayıları ve kullanımları artmaktadır. Ben büyük çoğunluğuna değinmeden size sadece apktool ve jadx’i göstereceğim. Apktool’u indirmek için apt-get install apktool -y kodunu kullanabilirisiniz. Arkadaşlar şimdi ilk işimiz apktool kullanarak uygulamamızı debug edelim. Bunun için, apktool d <apk.apk> kodunu kullanıyoruz.
2.png


Bu işlemden sonra ls dedikten sonra bir klasör olarak çıktı almayı başardığımızı görüyoruz. Bu klasöre girdiğimizde bakın şimdiden bir şeyler elde ettik.

3.png


“Manifest” dosyasını burada görüyoruz. Manifest neydi; bizim uygulamamızın kullandığı izinleri verdiğimiz dosyaydı. Bu dosya içerisinde çalışan activity'ler versiyonlar filan gibi şeyleri görebiliyorduk. Mesela en basitinden burada uygulamada kaç tane activity var görebiliriz, dediğim gibi fazla detaya inmeden anlatmaya çalışıyorum.

4.png


Peki bunu kapatalım tekrar klasörümüze girelim. Buradaki "res" klasörüne girelim.

6.png


Res klasöründe gördüğünüz gibi bir sürü dosya gelmektedir. Bu dosyalar aslında uygulamalardaki resimler, sesler, activity tasarımları gibi, renkler, yazı tipleri gibi birçok dosyaları içeren klasörlerdir. Values klasörleri dil çevirileri için kullanılan klasörlerdir. Yani siz uygulamanızı başka bir dil için de ayarlamak isterseniz o ülkenin kodu ile başlayan values klasörlerine gerekli çevirileri yapmanız gerekmektedir. Bu şekilde android bu sorunu çözmüştür. Nitekim şimdi de gelelim "smali" denilen klasöre. Aslında smali çok önemlidir. Çünkü “dalvik byte code” dosyaları aslında buradadır. Şimdi biz Smali klasörü içinden biz androidx olan klasöre girelim. Androidx klasöründe daha çok android’in ihtiyaç duyduğu dosyalar bulunur. Burada core içinde ilerleyerek “MainActivity.smali” dosyasını sublime ile açalım. Bu konum değişken olabilmektedir, kısaca MainActivity.smali diye bir dosyayı, bu klasörde bulmanız gerekmektedir.
7.png


Nitekim bu dosyayı açtığımıda karşımızda dalvik kodları gelmektedir. Dalvik koduna çok fazla detaya inmeden bahsetmek gerekirse; şimdi başlarda Android uygulamaları android runtime üzerinde çalışmaktaydı. Yani Masaüstünde Java Virtual Machine ne ise android içerisinde de Android Runtime o dur. Fakat Android Runtime (ART), Android 5 öncesinde kullanılırdı. Artık Android 5 sonrasından itibaren daha çok uygulamalar Dalvik VM ortamında çalışmaya başladı. Yani kısaca bir sanal katman diyebiliriz. Nitekim biz bunları anlamaya çalışarak manipüle etmeye çalışacağız.
8.png



Manipülasyon

Evet arkadaşlar sonunda dalvik byte code'a ulaştık. Şimdi bakalım neler yapabileceğiz. Şimdi en baştan incelemeye başlayalım. İlk başta “Class public” diye başlayan yerde paket adımızı görmekteyiz. .

.class public Lcom/ogulcankacar/hackapplication/MainActivity;

bu dosyanın da bir java dosyası olduğunu görmekteyiz. Burada “java” yerine “kt” olsaydı bu bir Kotlin kodu olacaktı.

.source "MainActivity.java"

Yani amacımız dalvik vm kodunu inceleyerek ipuçları elde etmektir, mesela az biraz aşağıya indiğimizde başka stringlerin oluştuğunu görebiliriz.

9.png


Yani gördüğünüz gibi oldukça basit bir kod bile dalvik byte code'da ne kadar zor bir şekilde yazılmış. İşte bu yüzden tersine mühendislik aşaması bu gibi dalvik kodlarını okumak yüzünden oldukça zordur. İşte böyle bir süreçte ya dalvik byte code'u çalışarak tüm detaylarına kadar öğreneceksiniz ki bu ne kadar bu işin içerisinde olacağınıza göre değişir. Gerçekten mobil güvenlik alanında ilerlemek isteyenler bunu elbette oturup öğrenebilir. Tabi dalvik kimse oturup da dalvik kodu yazsın diye geliştirilmiş bir dil olmadığı için yani sadece ara bir dil olduğu için çok fazla dokümantasyon bulmak da zordur. Birkaç sitede bu dalvik kodlarını öğreten dokümantasyonlar bulunabilir. Mesela bu sitede: , bir arkadaş oturup tüm bu dalvik kodlarını özetlemiş. Ya bunları ezberleyeceğiz ya da çalışırken devamlı bu tabloya bakacağız. Bu işte başka kaçar yol malesef şuan kaçınılmazdır. Şimdi biz bu tersine mühendislik aşamasında ne yapıyoruz yani amacımız ne? bizim uygulama basit olduğu için biz sadece uygulamamızda mesela burada string olarak tanımlanan flag değerini değiştirebilir veya login_status:I değeriyle birşeyler yapabiliriz.​

.line 8
invoke-direct {p0}, Landroidx/appcompat/app/AppCompatActivity;-><init>()V
.line 11
const-string v0, "t\u00fcrkhackteam"
iput-object v0, p0, Lcom/ogulcankacar/hackapplication/MainActivity;->flag:Ljava/lang/String;
.line 12
const/4 v0, 0x0
iput v0, p0, Lcom/ogulcankacar/hackapplication/MainActivity;->login_status:I
Tabi bu basit bariz zaten cons-string içindeki metni değiştirdiğimizde uygulamayı kendimize göre uyarlamış oluruz. Fakat biz burada örneğin değişkenleri değiştirmek istersek işte burada bizim bu tabloya ihtiyacımız olacak. Bu yüzden bu tablo bu iş için çok önemli bir statüdedir. Nitekim mesela ctflerde sizden sadece bu gibi bir text içine kendi adınızı yazmanız isteniyorsa bu şekilde basitçe textVİew içindeki yazıya kendi isminizi verebilirsiniz. Bunu yapmak için de ne yaptık, apktool ile debug edip içindeki MainActivity koduna ulaşarak yaptık. Yaptıktan sonra bu işlemi kaydediyoruz. Şimdi bunu tekrar bir apk haline getirmemiz gerekecek. Bunu da yeniden apktool kullanarak yapacağız.​

Apk Çevirme

Arkadaşlar şimdi tersine mühendisliği yaptık ve adımızı bir uygulama içerisine ekledik. Şimdi bundan sonra bu editlenmiş uygulamayı tekrar bir paket yani bir apk haline getirerek çalıştırmamız gerek. Bunu yapmak için apktool kullanacağız. apktool'da decomple yapıldığı gibi build'da yapılmaktadır. Şimdi bu klasörümüzün olduğunu konuma gidelim ve ardından,

apktool b -o <newapk.apk>

yaparak “newapk” adını verdiğimiz editlenmiş apk dosyamızı oluşturalım. Arkadaşlar kali de bu build sorun yaşarsanız windows'a apktool yükleyerek build işlemini yapabilirsiniz. Ayrıca yeni apk'yı yüklediğimizde eğer uygulama yüklenmez ise imzalama işlemi yapmamız gerekecek. Çünkü içeriğinde herhangi bir değişiklik yapıldığı anlaşılmaktadır. Bunu biz manuel olarak imzalamamız gerekmektedir. İmzalama işlemini yapmak için “keytool” denilen bir araç kullanmanız gerekmektedir. Ben yazıyı daha da uzun tutmak için bunu göstermiyorum. Yani bu süreçte hiç kaynak kodu bilmediğimiz bir uygulama içindeki bazı değişkenleri değiştirmeyi başarmış olduk. Tabi çok basit bir aşamaydı. Gerçekte kodlar bu kadar kısa olmayacaktır. Ama mantık bu şekildedir. Bu yapılan işlemlerin daha uzun süren hali olacaktır. Fakat tersine mühendislik bu kadar kolay değildir. Gerçekte daha zor olacaktır. Biz sadece temelleri ve mantığı anlamaya çalışıyoruz. Bu süreçte sadece apktool tabi ki yetmeyecektir. Jadx gibi uygulamalar da kullanmanız gerekebilir. Şimdi bir de bu işlemi jadx aracını katarak görelim.

Jadx
Arkadaşlar şimdi “jadx” kullanarak direk olarak Dalvik kodu yerine kaynak kodlarına ulaşmaya çalışacağız. Jadx’i apk-get install jadx -y yaparak kurabilirisiniz. Biz Jadx ile kaynak kodları alabilir miyiz alamaz mıyız, alırsak hangi koşullarda alabiliyoruz, alınca ne yapacağız gibi işlemler üzerinde duracağız. O halde başlayalım. Şimdi biz az önce oluşturduğumuz apk üzerinden tekrar ilerleyelim. Şimdi terminal açalım ve,

jadx -d (decomple) /root/Destkop/(çıktı klasörü) /root/Desktop/uygulama_adı.apk

kodu ile apk'mızı verdiğimiz klasör adı içine debug etmiş oluyoruz.​
10.png


Debug işlemi bittikten sonra oluşan klasöre gittiğimizde bizi kaynaklar klasörü karşılayacaktır. Resources klasöründe yine Manifest dosyamızı görmekteyiz. Zaten bunu apktool ile de almıştık. Buradan yine işimize yarayacak bilgileri alabiliriz. Diğer klasörlerde de yine apktool ile bulduğumuz şeyleri görebiliyoruz. Bizim asıl işimiz “sources” içerisinde. Buraya girdiğimizde bizim apktool ile dalvik kodu olarak aldığımız yerlerde burada direk “java” kodu olarak gelmektedir.

11.png


Bu java dosyasını sublimetext ile açtığımızda bakın az önce karmaşık dalvik vm kodları burada apaçık gözükmektedir.

12.png


Bakın bu sefer uzun uzun Dalvik kodu araştırması yapmadık direk java koduna ulaştık. Artık işimiz oldukça kolay sadece istediğimiz yerleri değiştirmemiz yetecektir. Tabi bu değiştirme işlemini buradan bakacağız ama yine değiştireceğimiz işlemi dalvik kodu yazarak işleyeceğiz. Ayrıca tabi bu işlerden biraz anlayanız varsa artık çoğu geliştirici kodlarını apk haline getirirken şifreleyerek yapmaktadır. Yani kodları apk yapmadan önce şifrelemektedir. Kodlar şifrelenince bunun gibi kolay okunmayacaktır. Bu nedenle bizim yine tersine mühendislik süreci epey zaman alacaktır…

Nitekim buraya kadar anlatılanlar başta da dediğim gibi çok yüzeysel şeylerdi, amacım sadece farkındalık oluşturmaktı, umarım bunu başarabilmişimdir. Burada değindiğim basit şeylerin ilerisi olduğunu unutmayın. Umarım bir başka yazıda bunlara da değinebiliriz. Buraya kadar okuyanlara teşekkür ederim, bir sonraki yazıda görüşmek üzere…​




Kaynakça
Google
Android Developer
Kendi bilgim
 

'Lase

Üye
13 Eyl 2022
209
176
Tanrı Dağı

Akıllı Telefonlar ve Android Reverse Engineering
myLogo.png



Giriş

Arkadaşlar merhaba bu yazımızda kısaca akıllı telefonlar hakkında birkaç şeye değinip ardından basit düzeyde bir android uygulamasının yani apk’nın (ki şuan apk yerine abb kullanılmaya başlandı) nasıl manipüle edildiğine bakacağız.

Akıllı Telefonlar
Şimdi öncelikle bildiğini gibi akıllı telefon dünyası bildiğiniz üzere çok hızlı gelişen bir süreç olmuştur. Hani daha dün tuşlu telefonlar kullanıyorduk. Şimdi parmaklarımızla hayatımızı kaydırıyoruz. Tabi bu hem olumlu yönde hem de olumsuz yönde kıvrılıp gitmektedir. Nitekim akıllı telefonlar deyince neredeyse herkesin aklına android ve IOS işletim sistemi olan telefonlar gelmektedir. Tabi bunların dışında olanlar da vardır illaki ama en yaygın olanları bunlardır diyebiliriz. İnsanlar akıllı telefon alırken genel de android ve IOS işletim sistemi tercih ediyorlar. Aslında bunun birkaç temel sebebi vardır; örneğin andorid işletim sistemine baktığımızda, android Google tarafından geliştirilmiş açık kaynaklı bir işletim sistemidir. Açık kaynak olmasının yararları da işte herkes bunu alarak derleyip istediği gibi kullanabilir. Derlemekten kastımız işte bir tane telefon üretirseniz kendinize işlemci, ana kart gibi donanımları bir ara getirip üstüne bir de android işletim sistemi yüklerseniz kendinize bir telefon üretebilirsiniz. Çünkü kaynak kodu zaten hazır olarak internet üzerinde bulunuyor. Android’in çekirdeğini de Linux oluşturmaktadır. Bu yüzden çok geniş yetenekleri vardır. Aslında temel olarak dokunmatik ekranlar için tasarlanmıştır, bu yüzden de düşük maliyetli ve kişiselleştirilebilen işletim sistemine muhtaç tüm cihazlar için bir nimettir diyebiliriz. Başlarda bu sadece tablet ve akıllı telefonları kapsamakta olsa da, günümüzde televizyonlar, arabalar, oyun konsolları, dijital kameralar ve saatler gibi cihazlarda da kullanılmaya başlamıştır. Diğer işletim sistemi olan IOS işletim sisteminin tutması neden derseniz ise, burada apple markasının güzel teknoloji pazarlama yolları insanlar üzerinde çok etkili olmuştur. Tabi bunun yanında apple güvenliğe çok odaklanmıştır. Bildiğiniz kapalı kutu bir cihazı güzel pazarlama yöntemleriyle ilginç hale getirip satın alınmasını sağlamıştır.​

Android Uygulama Geliştirme
Şimdi bir android uygulaması yazılma süreci genelde Android Studio ile başlamaktadır.
1.png

Android Stuido’ya fazla değinmek istemiyorum ama şimdi birazdan buradan yapılan bir uygulamanın kaynak kodlarına ulaşarak bir takım işlemler yapacağımız için üstün körü değinmekte de fayda var diye düşünüyorum. Bu sebeple birkaç şeyden bahsedebiliriz; şimdi öncelikle Android Stuido genelde Java veya Kotlin yazılım dilleri ile uygulamanızın kodlarını, XML düzeniyle de uygulamanızın tasarımını yapabilirsiniz. Android Stuido’da görselde de görüldüğü üzere bazı klasörler/paketler kullanılarak sınıflandırmalar yapılmıştır. Bu klasörlere değinmekte fayda var ki zaten amaçta bu klasörlerin hangileri işimize yarayabilir bunu az biraz öğrenmek;​
  • Manifest klasöründe, bu aslında çok önemli bir dosyadır üzerinde baya konuşulabilinir ama kısaca biz burada uygulamamızda kullanacağımız izinleri istediğimiz bölümdür diyelim. Bu dosya içerisinde çalışan activity'ler versiyonlar filan gibi şeyleri görebiliyoruz.​
  • Java klasörü ise aslında, Java veya Kotlin programlama diliyle uygulamamızın programlama kısmının yazıldığı bölümdür diyebiliriz.​
  • Res klasörü içerisinde de, burada uygulamamızda kullanacağımız; görseller, ses dosyaları, tasarımlar, renkler, yazı tipleri vb. unsurların tasarlandığı/eklendiği bölümdür.​
  • Gradle Scripts bölümü ise uygulamamızın versiyon bilgilerinin ayarlandığı, dış kütüphaneler filan eklendiği bölümdür diyebiliriz.​
Bu anlattıklarım çok üstünkörü ama zaten amacım Android Studio’yu tanıtmak değil, Android Stuido kullanılarak oluşturulan bir uygulamanın kaynak kodlarına ulaştığımızda nereye, hangi klasörlere göz atsak birşeyler elde edebiliriz bunu anlamaktır. Neticede İşte burada bir uygulama yazıldıktan sonra apk olarak uygulama oluşturup bu apk’yı Google play’e aktarabiliyorsunuz. Derleme sırasında da bir DEX dosyası oluşmaktadır. DEX dosyası yani bir asembly dosyasıdır. İşte bu DEX koduyla beraber bizim kütüphanelerimiz apk paketimize eklenmektedir. Bu dosyalarımız apk paketimize eklendikten sonra biz artık geliştirici sahibi olduğumuzu belirten kendi imzamızla beraber bir uygulama ortaya çıkarmış oluyoruz. Neticede fazla uzatmadan biz Reverse Engineering aşamasına geçelim.​


Reverse Engineering Süreci

Şimdi burada dediğim gibi çok büyük bir şey yapmayacağız, sadece mantığını anlamak için ufak birkaç kod yazıp analiz yapacağız, yani amaç farkındalık yaratmak.

Arkadaşlar bu süreci biz, benim yazdığım küçük birkaç satır kod içeren uygulama üzerinden işleyeceğiz, ama gerçek hayatta siz bu testi yapmak istediğinizde, yapacağınız uygulamaları telefonun içinden veya internette bir yerden alarak onun üzerinde test yapacaksınız. Yani burada biz uygulama yazdık diye burada yapacağımız işlemler sadece bizim yazdığımız kodlara özel değil. Biz sadece başkasının uygulaması ile uğraşmayalım diye kendimiz bir uygulama oluşturduk. Şimdi fazla uzatmadan terminal açarak gelelim tersine mühendislik işlemlerine. Arkadaşlar android reverse engineering aşamasında pek çok bize yardımcı olacak araç vardır. Bu araçların gidişata göre yani karşımızdaki uygulamaya göre sayıları ve kullanımları artmaktadır. Ben büyük çoğunluğuna değinmeden size sadece apktool ve jadx’i göstereceğim. Apktool’u indirmek için apt-get install apktool -y kodunu kullanabilirisiniz. Arkadaşlar şimdi ilk işimiz apktool kullanarak uygulamamızı debug edelim. Bunun için, apktool d <apk.apk> kodunu kullanıyoruz.
2.png


Bu işlemden sonra ls dedikten sonra bir klasör olarak çıktı almayı başardığımızı görüyoruz. Bu klasöre girdiğimizde bakın şimdiden bir şeyler elde ettik.

3.png


“Manifest” dosyasını burada görüyoruz. Manifest neydi; bizim uygulamamızın kullandığı izinleri verdiğimiz dosyaydı. Bu dosya içerisinde çalışan activity'ler versiyonlar filan gibi şeyleri görebiliyorduk. Mesela en basitinden burada uygulamada kaç tane activity var görebiliriz, dediğim gibi fazla detaya inmeden anlatmaya çalışıyorum.

4.png


Peki bunu kapatalım tekrar klasörümüze girelim. Buradaki "res" klasörüne girelim.

6.png


Res klasöründe gördüğünüz gibi bir sürü dosya gelmektedir. Bu dosyalar aslında uygulamalardaki resimler, sesler, activity tasarımları gibi, renkler, yazı tipleri gibi birçok dosyaları içeren klasörlerdir. Values klasörleri dil çevirileri için kullanılan klasörlerdir. Yani siz uygulamanızı başka bir dil için de ayarlamak isterseniz o ülkenin kodu ile başlayan values klasörlerine gerekli çevirileri yapmanız gerekmektedir. Bu şekilde android bu sorunu çözmüştür. Nitekim şimdi de gelelim "smali" denilen klasöre. Aslında smali çok önemlidir. Çünkü “dalvik byte code” dosyaları aslında buradadır. Şimdi biz Smali klasörü içinden biz androidx olan klasöre girelim. Androidx klasöründe daha çok android’in ihtiyaç duyduğu dosyalar bulunur. Burada core içinde ilerleyerek “MainActivity.smali” dosyasını sublime ile açalım. Bu konum değişken olabilmektedir, kısaca MainActivity.smali diye bir dosyayı, bu klasörde bulmanız gerekmektedir.
7.png


Nitekim bu dosyayı açtığımıda karşımızda dalvik kodları gelmektedir. Dalvik koduna çok fazla detaya inmeden bahsetmek gerekirse; şimdi başlarda Android uygulamaları android runtime üzerinde çalışmaktaydı. Yani Masaüstünde Java Virtual Machine ne ise android içerisinde de Android Runtime o dur. Fakat Android Runtime (ART), Android 5 öncesinde kullanılırdı. Artık Android 5 sonrasından itibaren daha çok uygulamalar Dalvik VM ortamında çalışmaya başladı. Yani kısaca bir sanal katman diyebiliriz. Nitekim biz bunları anlamaya çalışarak manipüle etmeye çalışacağız.
8.png



Manipülasyon

Evet arkadaşlar sonunda dalvik byte code'a ulaştık. Şimdi bakalım neler yapabileceğiz. Şimdi en baştan incelemeye başlayalım. İlk başta “Class public” diye başlayan yerde paket adımızı görmekteyiz. .

.class public Lcom/ogulcankacar/hackapplication/MainActivity;

bu dosyanın da bir java dosyası olduğunu görmekteyiz. Burada “java” yerine “kt” olsaydı bu bir Kotlin kodu olacaktı.

.source "MainActivity.java"

Yani amacımız dalvik vm kodunu inceleyerek ipuçları elde etmektir, mesela az biraz aşağıya indiğimizde başka stringlerin oluştuğunu görebiliriz.

9.png


Yani gördüğünüz gibi oldukça basit bir kod bile dalvik byte code'da ne kadar zor bir şekilde yazılmış. İşte bu yüzden tersine mühendislik aşaması bu gibi dalvik kodlarını okumak yüzünden oldukça zordur. İşte böyle bir süreçte ya dalvik byte code'u çalışarak tüm detaylarına kadar öğreneceksiniz ki bu ne kadar bu işin içerisinde olacağınıza göre değişir. Gerçekten mobil güvenlik alanında ilerlemek isteyenler bunu elbette oturup öğrenebilir. Tabi dalvik kimse oturup da dalvik kodu yazsın diye geliştirilmiş bir dil olmadığı için yani sadece ara bir dil olduğu için çok fazla dokümantasyon bulmak da zordur. Birkaç sitede bu dalvik kodlarını öğreten dokümantasyonlar bulunabilir. Mesela bu sitede: , bir arkadaş oturup tüm bu dalvik kodlarını özetlemiş. Ya bunları ezberleyeceğiz ya da çalışırken devamlı bu tabloya bakacağız. Bu işte başka kaçar yol malesef şuan kaçınılmazdır. Şimdi biz bu tersine mühendislik aşamasında ne yapıyoruz yani amacımız ne? bizim uygulama basit olduğu için biz sadece uygulamamızda mesela burada string olarak tanımlanan flag değerini değiştirebilir veya login_status:I değeriyle birşeyler yapabiliriz.​

.line 8
invoke-direct {p0}, Landroidx/appcompat/app/AppCompatActivity;-><init>()V
.line 11
const-string v0, "t\u00fcrkhackteam"
iput-object v0, p0, Lcom/ogulcankacar/hackapplication/MainActivity;->flag:Ljava/lang/String;
.line 12
const/4 v0, 0x0
iput v0, p0, Lcom/ogulcankacar/hackapplication/MainActivity;->login_status:I
Tabi bu basit bariz zaten cons-string içindeki metni değiştirdiğimizde uygulamayı kendimize göre uyarlamış oluruz. Fakat biz burada örneğin değişkenleri değiştirmek istersek işte burada bizim bu tabloya ihtiyacımız olacak. Bu yüzden bu tablo bu iş için çok önemli bir statüdedir. Nitekim mesela ctflerde sizden sadece bu gibi bir text içine kendi adınızı yazmanız isteniyorsa bu şekilde basitçe textVİew içindeki yazıya kendi isminizi verebilirsiniz. Bunu yapmak için de ne yaptık, apktool ile debug edip içindeki MainActivity koduna ulaşarak yaptık. Yaptıktan sonra bu işlemi kaydediyoruz. Şimdi bunu tekrar bir apk haline getirmemiz gerekecek. Bunu da yeniden apktool kullanarak yapacağız.​

Apk Çevirme

Arkadaşlar şimdi tersine mühendisliği yaptık ve adımızı bir uygulama içerisine ekledik. Şimdi bundan sonra bu editlenmiş uygulamayı tekrar bir paket yani bir apk haline getirerek çalıştırmamız gerek. Bunu yapmak için apktool kullanacağız. apktool'da decomple yapıldığı gibi build'da yapılmaktadır. Şimdi bu klasörümüzün olduğunu konuma gidelim ve ardından,

apktool b -o <newapk.apk>

yaparak “newapk” adını verdiğimiz editlenmiş apk dosyamızı oluşturalım. Arkadaşlar kali de bu build sorun yaşarsanız windows'a apktool yükleyerek build işlemini yapabilirsiniz. Ayrıca yeni apk'yı yüklediğimizde eğer uygulama yüklenmez ise imzalama işlemi yapmamız gerekecek. Çünkü içeriğinde herhangi bir değişiklik yapıldığı anlaşılmaktadır. Bunu biz manuel olarak imzalamamız gerekmektedir. İmzalama işlemini yapmak için “keytool” denilen bir araç kullanmanız gerekmektedir. Ben yazıyı daha da uzun tutmak için bunu göstermiyorum. Yani bu süreçte hiç kaynak kodu bilmediğimiz bir uygulama içindeki bazı değişkenleri değiştirmeyi başarmış olduk. Tabi çok basit bir aşamaydı. Gerçekte kodlar bu kadar kısa olmayacaktır. Ama mantık bu şekildedir. Bu yapılan işlemlerin daha uzun süren hali olacaktır. Fakat tersine mühendislik bu kadar kolay değildir. Gerçekte daha zor olacaktır. Biz sadece temelleri ve mantığı anlamaya çalışıyoruz. Bu süreçte sadece apktool tabi ki yetmeyecektir. Jadx gibi uygulamalar da kullanmanız gerekebilir. Şimdi bir de bu işlemi jadx aracını katarak görelim.

Jadx
Arkadaşlar şimdi “jadx” kullanarak direk olarak Dalvik kodu yerine kaynak kodlarına ulaşmaya çalışacağız. Jadx’i apk-get install jadx -y yaparak kurabilirisiniz. Biz Jadx ile kaynak kodları alabilir miyiz alamaz mıyız, alırsak hangi koşullarda alabiliyoruz, alınca ne yapacağız gibi işlemler üzerinde duracağız. O halde başlayalım. Şimdi biz az önce oluşturduğumuz apk üzerinden tekrar ilerleyelim. Şimdi terminal açalım ve,

jadx -d (decomple) /root/Destkop/(çıktı klasörü) /root/Desktop/uygulama_adı.apk

kodu ile apk'mızı verdiğimiz klasör adı içine debug etmiş oluyoruz.​
10.png


Debug işlemi bittikten sonra oluşan klasöre gittiğimizde bizi kaynaklar klasörü karşılayacaktır. Resources klasöründe yine Manifest dosyamızı görmekteyiz. Zaten bunu apktool ile de almıştık. Buradan yine işimize yarayacak bilgileri alabiliriz. Diğer klasörlerde de yine apktool ile bulduğumuz şeyleri görebiliyoruz. Bizim asıl işimiz “sources” içerisinde. Buraya girdiğimizde bizim apktool ile dalvik kodu olarak aldığımız yerlerde burada direk “java” kodu olarak gelmektedir.

11.png


Bu java dosyasını sublimetext ile açtığımızda bakın az önce karmaşık dalvik vm kodları burada apaçık gözükmektedir.

12.png


Bakın bu sefer uzun uzun Dalvik kodu araştırması yapmadık direk java koduna ulaştık. Artık işimiz oldukça kolay sadece istediğimiz yerleri değiştirmemiz yetecektir. Tabi bu değiştirme işlemini buradan bakacağız ama yine değiştireceğimiz işlemi dalvik kodu yazarak işleyeceğiz. Ayrıca tabi bu işlerden biraz anlayanız varsa artık çoğu geliştirici kodlarını apk haline getirirken şifreleyerek yapmaktadır. Yani kodları apk yapmadan önce şifrelemektedir. Kodlar şifrelenince bunun gibi kolay okunmayacaktır. Bu nedenle bizim yine tersine mühendislik süreci epey zaman alacaktır…

Nitekim buraya kadar anlatılanlar başta da dediğim gibi çok yüzeysel şeylerdi, amacım sadece farkındalık oluşturmaktı, umarım bunu başarabilmişimdir. Burada değindiğim basit şeylerin ilerisi olduğunu unutmayın. Umarım bir başka yazıda bunlara da değinebiliriz. Buraya kadar okuyanlara teşekkür ederim, bir sonraki yazıda görüşmek üzere…​




Kaynakça
Google
Android Developer
Kendi bilgim
Ellerine saglık dostum.
 

icehead

Uzman üye
19 Şub 2022
1,137
833
eline sağlık fakat şunu da ekleyim winrar gibi programları kullanıp apk classlarına ulaşabilirsiniz ama tekrar apk yapmak için imzalamanız lazım.
 

THE zoRRo

Uzman üye
26 Tem 2022
1,673
1,608
19
Türk Deniz Kuvvetleri

Akıllı Telefonlar ve Android Reverse Engineering
myLogo.png



Giriş

Arkadaşlar merhaba bu yazımızda kısaca akıllı telefonlar hakkında birkaç şeye değinip ardından basit düzeyde bir android uygulamasının yani apk’nın (ki şuan apk yerine abb kullanılmaya başlandı) nasıl manipüle edildiğine bakacağız.

Akıllı Telefonlar
Şimdi öncelikle bildiğini gibi akıllı telefon dünyası bildiğiniz üzere çok hızlı gelişen bir süreç olmuştur. Hani daha dün tuşlu telefonlar kullanıyorduk. Şimdi parmaklarımızla hayatımızı kaydırıyoruz. Tabi bu hem olumlu yönde hem de olumsuz yönde kıvrılıp gitmektedir. Nitekim akıllı telefonlar deyince neredeyse herkesin aklına android ve IOS işletim sistemi olan telefonlar gelmektedir. Tabi bunların dışında olanlar da vardır illaki ama en yaygın olanları bunlardır diyebiliriz. İnsanlar akıllı telefon alırken genel de android ve IOS işletim sistemi tercih ediyorlar. Aslında bunun birkaç temel sebebi vardır; örneğin andorid işletim sistemine baktığımızda, android Google tarafından geliştirilmiş açık kaynaklı bir işletim sistemidir. Açık kaynak olmasının yararları da işte herkes bunu alarak derleyip istediği gibi kullanabilir. Derlemekten kastımız işte bir tane telefon üretirseniz kendinize işlemci, ana kart gibi donanımları bir ara getirip üstüne bir de android işletim sistemi yüklerseniz kendinize bir telefon üretebilirsiniz. Çünkü kaynak kodu zaten hazır olarak internet üzerinde bulunuyor. Android’in çekirdeğini de Linux oluşturmaktadır. Bu yüzden çok geniş yetenekleri vardır. Aslında temel olarak dokunmatik ekranlar için tasarlanmıştır, bu yüzden de düşük maliyetli ve kişiselleştirilebilen işletim sistemine muhtaç tüm cihazlar için bir nimettir diyebiliriz. Başlarda bu sadece tablet ve akıllı telefonları kapsamakta olsa da, günümüzde televizyonlar, arabalar, oyun konsolları, dijital kameralar ve saatler gibi cihazlarda da kullanılmaya başlamıştır. Diğer işletim sistemi olan IOS işletim sisteminin tutması neden derseniz ise, burada apple markasının güzel teknoloji pazarlama yolları insanlar üzerinde çok etkili olmuştur. Tabi bunun yanında apple güvenliğe çok odaklanmıştır. Bildiğiniz kapalı kutu bir cihazı güzel pazarlama yöntemleriyle ilginç hale getirip satın alınmasını sağlamıştır.​

Android Uygulama Geliştirme
Şimdi bir android uygulaması yazılma süreci genelde Android Studio ile başlamaktadır.
1.png

Android Stuido’ya fazla değinmek istemiyorum ama şimdi birazdan buradan yapılan bir uygulamanın kaynak kodlarına ulaşarak bir takım işlemler yapacağımız için üstün körü değinmekte de fayda var diye düşünüyorum. Bu sebeple birkaç şeyden bahsedebiliriz; şimdi öncelikle Android Stuido genelde Java veya Kotlin yazılım dilleri ile uygulamanızın kodlarını, XML düzeniyle de uygulamanızın tasarımını yapabilirsiniz. Android Stuido’da görselde de görüldüğü üzere bazı klasörler/paketler kullanılarak sınıflandırmalar yapılmıştır. Bu klasörlere değinmekte fayda var ki zaten amaçta bu klasörlerin hangileri işimize yarayabilir bunu az biraz öğrenmek;​
  • Manifest klasöründe, bu aslında çok önemli bir dosyadır üzerinde baya konuşulabilinir ama kısaca biz burada uygulamamızda kullanacağımız izinleri istediğimiz bölümdür diyelim. Bu dosya içerisinde çalışan activity'ler versiyonlar filan gibi şeyleri görebiliyoruz.​
  • Java klasörü ise aslında, Java veya Kotlin programlama diliyle uygulamamızın programlama kısmının yazıldığı bölümdür diyebiliriz.​
  • Res klasörü içerisinde de, burada uygulamamızda kullanacağımız; görseller, ses dosyaları, tasarımlar, renkler, yazı tipleri vb. unsurların tasarlandığı/eklendiği bölümdür.​
  • Gradle Scripts bölümü ise uygulamamızın versiyon bilgilerinin ayarlandığı, dış kütüphaneler filan eklendiği bölümdür diyebiliriz.​
Bu anlattıklarım çok üstünkörü ama zaten amacım Android Studio’yu tanıtmak değil, Android Stuido kullanılarak oluşturulan bir uygulamanın kaynak kodlarına ulaştığımızda nereye, hangi klasörlere göz atsak birşeyler elde edebiliriz bunu anlamaktır. Neticede İşte burada bir uygulama yazıldıktan sonra apk olarak uygulama oluşturup bu apk’yı Google play’e aktarabiliyorsunuz. Derleme sırasında da bir DEX dosyası oluşmaktadır. DEX dosyası yani bir asembly dosyasıdır. İşte bu DEX koduyla beraber bizim kütüphanelerimiz apk paketimize eklenmektedir. Bu dosyalarımız apk paketimize eklendikten sonra biz artık geliştirici sahibi olduğumuzu belirten kendi imzamızla beraber bir uygulama ortaya çıkarmış oluyoruz. Neticede fazla uzatmadan biz Reverse Engineering aşamasına geçelim.​


Reverse Engineering Süreci

Şimdi burada dediğim gibi çok büyük bir şey yapmayacağız, sadece mantığını anlamak için ufak birkaç kod yazıp analiz yapacağız, yani amaç farkındalık yaratmak.

Arkadaşlar bu süreci biz, benim yazdığım küçük birkaç satır kod içeren uygulama üzerinden işleyeceğiz, ama gerçek hayatta siz bu testi yapmak istediğinizde, yapacağınız uygulamaları telefonun içinden veya internette bir yerden alarak onun üzerinde test yapacaksınız. Yani burada biz uygulama yazdık diye burada yapacağımız işlemler sadece bizim yazdığımız kodlara özel değil. Biz sadece başkasının uygulaması ile uğraşmayalım diye kendimiz bir uygulama oluşturduk. Şimdi fazla uzatmadan terminal açarak gelelim tersine mühendislik işlemlerine. Arkadaşlar android reverse engineering aşamasında pek çok bize yardımcı olacak araç vardır. Bu araçların gidişata göre yani karşımızdaki uygulamaya göre sayıları ve kullanımları artmaktadır. Ben büyük çoğunluğuna değinmeden size sadece apktool ve jadx’i göstereceğim. Apktool’u indirmek için apt-get install apktool -y kodunu kullanabilirisiniz. Arkadaşlar şimdi ilk işimiz apktool kullanarak uygulamamızı debug edelim. Bunun için, apktool d <apk.apk> kodunu kullanıyoruz.
2.png


Bu işlemden sonra ls dedikten sonra bir klasör olarak çıktı almayı başardığımızı görüyoruz. Bu klasöre girdiğimizde bakın şimdiden bir şeyler elde ettik.

3.png


“Manifest” dosyasını burada görüyoruz. Manifest neydi; bizim uygulamamızın kullandığı izinleri verdiğimiz dosyaydı. Bu dosya içerisinde çalışan activity'ler versiyonlar filan gibi şeyleri görebiliyorduk. Mesela en basitinden burada uygulamada kaç tane activity var görebiliriz, dediğim gibi fazla detaya inmeden anlatmaya çalışıyorum.

4.png


Peki bunu kapatalım tekrar klasörümüze girelim. Buradaki "res" klasörüne girelim.

6.png


Res klasöründe gördüğünüz gibi bir sürü dosya gelmektedir. Bu dosyalar aslında uygulamalardaki resimler, sesler, activity tasarımları gibi, renkler, yazı tipleri gibi birçok dosyaları içeren klasörlerdir. Values klasörleri dil çevirileri için kullanılan klasörlerdir. Yani siz uygulamanızı başka bir dil için de ayarlamak isterseniz o ülkenin kodu ile başlayan values klasörlerine gerekli çevirileri yapmanız gerekmektedir. Bu şekilde android bu sorunu çözmüştür. Nitekim şimdi de gelelim "smali" denilen klasöre. Aslında smali çok önemlidir. Çünkü “dalvik byte code” dosyaları aslında buradadır. Şimdi biz Smali klasörü içinden biz androidx olan klasöre girelim. Androidx klasöründe daha çok android’in ihtiyaç duyduğu dosyalar bulunur. Burada core içinde ilerleyerek “MainActivity.smali” dosyasını sublime ile açalım. Bu konum değişken olabilmektedir, kısaca MainActivity.smali diye bir dosyayı, bu klasörde bulmanız gerekmektedir.
7.png


Nitekim bu dosyayı açtığımıda karşımızda dalvik kodları gelmektedir. Dalvik koduna çok fazla detaya inmeden bahsetmek gerekirse; şimdi başlarda Android uygulamaları android runtime üzerinde çalışmaktaydı. Yani Masaüstünde Java Virtual Machine ne ise android içerisinde de Android Runtime o dur. Fakat Android Runtime (ART), Android 5 öncesinde kullanılırdı. Artık Android 5 sonrasından itibaren daha çok uygulamalar Dalvik VM ortamında çalışmaya başladı. Yani kısaca bir sanal katman diyebiliriz. Nitekim biz bunları anlamaya çalışarak manipüle etmeye çalışacağız.
8.png



Manipülasyon

Evet arkadaşlar sonunda dalvik byte code'a ulaştık. Şimdi bakalım neler yapabileceğiz. Şimdi en baştan incelemeye başlayalım. İlk başta “Class public” diye başlayan yerde paket adımızı görmekteyiz. .

.class public Lcom/ogulcankacar/hackapplication/MainActivity;

bu dosyanın da bir java dosyası olduğunu görmekteyiz. Burada “java” yerine “kt” olsaydı bu bir Kotlin kodu olacaktı.

.source "MainActivity.java"

Yani amacımız dalvik vm kodunu inceleyerek ipuçları elde etmektir, mesela az biraz aşağıya indiğimizde başka stringlerin oluştuğunu görebiliriz.

9.png


Yani gördüğünüz gibi oldukça basit bir kod bile dalvik byte code'da ne kadar zor bir şekilde yazılmış. İşte bu yüzden tersine mühendislik aşaması bu gibi dalvik kodlarını okumak yüzünden oldukça zordur. İşte böyle bir süreçte ya dalvik byte code'u çalışarak tüm detaylarına kadar öğreneceksiniz ki bu ne kadar bu işin içerisinde olacağınıza göre değişir. Gerçekten mobil güvenlik alanında ilerlemek isteyenler bunu elbette oturup öğrenebilir. Tabi dalvik kimse oturup da dalvik kodu yazsın diye geliştirilmiş bir dil olmadığı için yani sadece ara bir dil olduğu için çok fazla dokümantasyon bulmak da zordur. Birkaç sitede bu dalvik kodlarını öğreten dokümantasyonlar bulunabilir. Mesela bu sitede: , bir arkadaş oturup tüm bu dalvik kodlarını özetlemiş. Ya bunları ezberleyeceğiz ya da çalışırken devamlı bu tabloya bakacağız. Bu işte başka kaçar yol malesef şuan kaçınılmazdır. Şimdi biz bu tersine mühendislik aşamasında ne yapıyoruz yani amacımız ne? bizim uygulama basit olduğu için biz sadece uygulamamızda mesela burada string olarak tanımlanan flag değerini değiştirebilir veya login_status:I değeriyle birşeyler yapabiliriz.​

.line 8
invoke-direct {p0}, Landroidx/appcompat/app/AppCompatActivity;-><init>()V
.line 11
const-string v0, "t\u00fcrkhackteam"
iput-object v0, p0, Lcom/ogulcankacar/hackapplication/MainActivity;->flag:Ljava/lang/String;
.line 12
const/4 v0, 0x0
iput v0, p0, Lcom/ogulcankacar/hackapplication/MainActivity;->login_status:I
Tabi bu basit bariz zaten cons-string içindeki metni değiştirdiğimizde uygulamayı kendimize göre uyarlamış oluruz. Fakat biz burada örneğin değişkenleri değiştirmek istersek işte burada bizim bu tabloya ihtiyacımız olacak. Bu yüzden bu tablo bu iş için çok önemli bir statüdedir. Nitekim mesela ctflerde sizden sadece bu gibi bir text içine kendi adınızı yazmanız isteniyorsa bu şekilde basitçe textVİew içindeki yazıya kendi isminizi verebilirsiniz. Bunu yapmak için de ne yaptık, apktool ile debug edip içindeki MainActivity koduna ulaşarak yaptık. Yaptıktan sonra bu işlemi kaydediyoruz. Şimdi bunu tekrar bir apk haline getirmemiz gerekecek. Bunu da yeniden apktool kullanarak yapacağız.​

Apk Çevirme

Arkadaşlar şimdi tersine mühendisliği yaptık ve adımızı bir uygulama içerisine ekledik. Şimdi bundan sonra bu editlenmiş uygulamayı tekrar bir paket yani bir apk haline getirerek çalıştırmamız gerek. Bunu yapmak için apktool kullanacağız. apktool'da decomple yapıldığı gibi build'da yapılmaktadır. Şimdi bu klasörümüzün olduğunu konuma gidelim ve ardından,

apktool b -o <newapk.apk>

yaparak “newapk” adını verdiğimiz editlenmiş apk dosyamızı oluşturalım. Arkadaşlar kali de bu build sorun yaşarsanız windows'a apktool yükleyerek build işlemini yapabilirsiniz. Ayrıca yeni apk'yı yüklediğimizde eğer uygulama yüklenmez ise imzalama işlemi yapmamız gerekecek. Çünkü içeriğinde herhangi bir değişiklik yapıldığı anlaşılmaktadır. Bunu biz manuel olarak imzalamamız gerekmektedir. İmzalama işlemini yapmak için “keytool” denilen bir araç kullanmanız gerekmektedir. Ben yazıyı daha da uzun tutmak için bunu göstermiyorum. Yani bu süreçte hiç kaynak kodu bilmediğimiz bir uygulama içindeki bazı değişkenleri değiştirmeyi başarmış olduk. Tabi çok basit bir aşamaydı. Gerçekte kodlar bu kadar kısa olmayacaktır. Ama mantık bu şekildedir. Bu yapılan işlemlerin daha uzun süren hali olacaktır. Fakat tersine mühendislik bu kadar kolay değildir. Gerçekte daha zor olacaktır. Biz sadece temelleri ve mantığı anlamaya çalışıyoruz. Bu süreçte sadece apktool tabi ki yetmeyecektir. Jadx gibi uygulamalar da kullanmanız gerekebilir. Şimdi bir de bu işlemi jadx aracını katarak görelim.

Jadx
Arkadaşlar şimdi “jadx” kullanarak direk olarak Dalvik kodu yerine kaynak kodlarına ulaşmaya çalışacağız. Jadx’i apk-get install jadx -y yaparak kurabilirisiniz. Biz Jadx ile kaynak kodları alabilir miyiz alamaz mıyız, alırsak hangi koşullarda alabiliyoruz, alınca ne yapacağız gibi işlemler üzerinde duracağız. O halde başlayalım. Şimdi biz az önce oluşturduğumuz apk üzerinden tekrar ilerleyelim. Şimdi terminal açalım ve,

jadx -d (decomple) /root/Destkop/(çıktı klasörü) /root/Desktop/uygulama_adı.apk

kodu ile apk'mızı verdiğimiz klasör adı içine debug etmiş oluyoruz.​
10.png


Debug işlemi bittikten sonra oluşan klasöre gittiğimizde bizi kaynaklar klasörü karşılayacaktır. Resources klasöründe yine Manifest dosyamızı görmekteyiz. Zaten bunu apktool ile de almıştık. Buradan yine işimize yarayacak bilgileri alabiliriz. Diğer klasörlerde de yine apktool ile bulduğumuz şeyleri görebiliyoruz. Bizim asıl işimiz “sources” içerisinde. Buraya girdiğimizde bizim apktool ile dalvik kodu olarak aldığımız yerlerde burada direk “java” kodu olarak gelmektedir.

11.png


Bu java dosyasını sublimetext ile açtığımızda bakın az önce karmaşık dalvik vm kodları burada apaçık gözükmektedir.

12.png


Bakın bu sefer uzun uzun Dalvik kodu araştırması yapmadık direk java koduna ulaştık. Artık işimiz oldukça kolay sadece istediğimiz yerleri değiştirmemiz yetecektir. Tabi bu değiştirme işlemini buradan bakacağız ama yine değiştireceğimiz işlemi dalvik kodu yazarak işleyeceğiz. Ayrıca tabi bu işlerden biraz anlayanız varsa artık çoğu geliştirici kodlarını apk haline getirirken şifreleyerek yapmaktadır. Yani kodları apk yapmadan önce şifrelemektedir. Kodlar şifrelenince bunun gibi kolay okunmayacaktır. Bu nedenle bizim yine tersine mühendislik süreci epey zaman alacaktır…

Nitekim buraya kadar anlatılanlar başta da dediğim gibi çok yüzeysel şeylerdi, amacım sadece farkındalık oluşturmaktı, umarım bunu başarabilmişimdir. Burada değindiğim basit şeylerin ilerisi olduğunu unutmayın. Umarım bir başka yazıda bunlara da değinebiliriz. Buraya kadar okuyanlara teşekkür ederim, bir sonraki yazıda görüşmek üzere…​




Kaynakça
Google
Android Developer
Kendi bilgim
Ellerine sağlık dostum,güzel konu olmuş
 

Napcaz

Anka Team Senior
28 Nis 2019
767
764
Cudi
Güzel yazın için teşekkür ederiz. Android Tersine mühendisliği, tüm tersine mühendislikler arasında en nefret ettiğim dallardan biri olabilir hiç sevmem bulaşmaktan hoşlanmam tiksinti duyarım java yı da OOP yi de sevmiyorum. Ama bu konuyu olabilecek en basit haliyle anlatmanız... Bu türkçe anlatım kesinlikle çok faydalı olucaktır. Son olarak, konu ile alakalı merak ettiğim ve yazıda düzeltmek istediğim iki husus var onları söylemek isterim:

*apk dosyalarını zaten rar gibi açabiliyoruz peki apktool u niçin kullanıyoruz bunu merak ediyorum.
*Yazıda disassembly (geri montaj) işlemi yaptığınız yerlerde hep "debug yaptım" tabirini kullanmızsınız yanıltıcı olabilir çünkü debug daha farklı bir kavram muhtemelen büyük parçaya odaklanırken yanlışlıkla yazdınız diğer okuyucular için kafa karışıklığı olmasın diye düzeltmek istedim. (apktool ile yapılan işlemler disassembly, jadx ile yapılan ise decompile işlemi olmalı)
 

JohnWick51

Uzman üye
20 Mar 2022
1,867
770
28

Akıllı Telefonlar ve Android Reverse Engineering
myLogo.png



Giriş

Arkadaşlar merhaba bu yazımızda kısaca akıllı telefonlar hakkında birkaç şeye değinip ardından basit düzeyde bir android uygulamasının yani apk’nın (ki şuan apk yerine abb kullanılmaya başlandı) nasıl manipüle edildiğine bakacağız.

Akıllı Telefonlar
Şimdi öncelikle bildiğini gibi akıllı telefon dünyası bildiğiniz üzere çok hızlı gelişen bir süreç olmuştur. Hani daha dün tuşlu telefonlar kullanıyorduk. Şimdi parmaklarımızla hayatımızı kaydırıyoruz. Tabi bu hem olumlu yönde hem de olumsuz yönde kıvrılıp gitmektedir. Nitekim akıllı telefonlar deyince neredeyse herkesin aklına android ve IOS işletim sistemi olan telefonlar gelmektedir. Tabi bunların dışında olanlar da vardır illaki ama en yaygın olanları bunlardır diyebiliriz. İnsanlar akıllı telefon alırken genel de android ve IOS işletim sistemi tercih ediyorlar. Aslında bunun birkaç temel sebebi vardır; örneğin andorid işletim sistemine baktığımızda, android Google tarafından geliştirilmiş açık kaynaklı bir işletim sistemidir. Açık kaynak olmasının yararları da işte herkes bunu alarak derleyip istediği gibi kullanabilir. Derlemekten kastımız işte bir tane telefon üretirseniz kendinize işlemci, ana kart gibi donanımları bir ara getirip üstüne bir de android işletim sistemi yüklerseniz kendinize bir telefon üretebilirsiniz. Çünkü kaynak kodu zaten hazır olarak internet üzerinde bulunuyor. Android’in çekirdeğini de Linux oluşturmaktadır. Bu yüzden çok geniş yetenekleri vardır. Aslında temel olarak dokunmatik ekranlar için tasarlanmıştır, bu yüzden de düşük maliyetli ve kişiselleştirilebilen işletim sistemine muhtaç tüm cihazlar için bir nimettir diyebiliriz. Başlarda bu sadece tablet ve akıllı telefonları kapsamakta olsa da, günümüzde televizyonlar, arabalar, oyun konsolları, dijital kameralar ve saatler gibi cihazlarda da kullanılmaya başlamıştır. Diğer işletim sistemi olan IOS işletim sisteminin tutması neden derseniz ise, burada apple markasının güzel teknoloji pazarlama yolları insanlar üzerinde çok etkili olmuştur. Tabi bunun yanında apple güvenliğe çok odaklanmıştır. Bildiğiniz kapalı kutu bir cihazı güzel pazarlama yöntemleriyle ilginç hale getirip satın alınmasını sağlamıştır.​

Android Uygulama Geliştirme
Şimdi bir android uygulaması yazılma süreci genelde Android Studio ile başlamaktadır.
1.png

Android Stuido’ya fazla değinmek istemiyorum ama şimdi birazdan buradan yapılan bir uygulamanın kaynak kodlarına ulaşarak bir takım işlemler yapacağımız için üstün körü değinmekte de fayda var diye düşünüyorum. Bu sebeple birkaç şeyden bahsedebiliriz; şimdi öncelikle Android Stuido genelde Java veya Kotlin yazılım dilleri ile uygulamanızın kodlarını, XML düzeniyle de uygulamanızın tasarımını yapabilirsiniz. Android Stuido’da görselde de görüldüğü üzere bazı klasörler/paketler kullanılarak sınıflandırmalar yapılmıştır. Bu klasörlere değinmekte fayda var ki zaten amaçta bu klasörlerin hangileri işimize yarayabilir bunu az biraz öğrenmek;​
  • Manifest klasöründe, bu aslında çok önemli bir dosyadır üzerinde baya konuşulabilinir ama kısaca biz burada uygulamamızda kullanacağımız izinleri istediğimiz bölümdür diyelim. Bu dosya içerisinde çalışan activity'ler versiyonlar filan gibi şeyleri görebiliyoruz.​
  • Java klasörü ise aslında, Java veya Kotlin programlama diliyle uygulamamızın programlama kısmının yazıldığı bölümdür diyebiliriz.​
  • Res klasörü içerisinde de, burada uygulamamızda kullanacağımız; görseller, ses dosyaları, tasarımlar, renkler, yazı tipleri vb. unsurların tasarlandığı/eklendiği bölümdür.​
  • Gradle Scripts bölümü ise uygulamamızın versiyon bilgilerinin ayarlandığı, dış kütüphaneler filan eklendiği bölümdür diyebiliriz.​
Bu anlattıklarım çok üstünkörü ama zaten amacım Android Studio’yu tanıtmak değil, Android Stuido kullanılarak oluşturulan bir uygulamanın kaynak kodlarına ulaştığımızda nereye, hangi klasörlere göz atsak birşeyler elde edebiliriz bunu anlamaktır. Neticede İşte burada bir uygulama yazıldıktan sonra apk olarak uygulama oluşturup bu apk’yı Google play’e aktarabiliyorsunuz. Derleme sırasında da bir DEX dosyası oluşmaktadır. DEX dosyası yani bir asembly dosyasıdır. İşte bu DEX koduyla beraber bizim kütüphanelerimiz apk paketimize eklenmektedir. Bu dosyalarımız apk paketimize eklendikten sonra biz artık geliştirici sahibi olduğumuzu belirten kendi imzamızla beraber bir uygulama ortaya çıkarmış oluyoruz. Neticede fazla uzatmadan biz Reverse Engineering aşamasına geçelim.​


Reverse Engineering Süreci

Şimdi burada dediğim gibi çok büyük bir şey yapmayacağız, sadece mantığını anlamak için ufak birkaç kod yazıp analiz yapacağız, yani amaç farkındalık yaratmak.

Arkadaşlar bu süreci biz, benim yazdığım küçük birkaç satır kod içeren uygulama üzerinden işleyeceğiz, ama gerçek hayatta siz bu testi yapmak istediğinizde, yapacağınız uygulamaları telefonun içinden veya internette bir yerden alarak onun üzerinde test yapacaksınız. Yani burada biz uygulama yazdık diye burada yapacağımız işlemler sadece bizim yazdığımız kodlara özel değil. Biz sadece başkasının uygulaması ile uğraşmayalım diye kendimiz bir uygulama oluşturduk. Şimdi fazla uzatmadan terminal açarak gelelim tersine mühendislik işlemlerine. Arkadaşlar android reverse engineering aşamasında pek çok bize yardımcı olacak araç vardır. Bu araçların gidişata göre yani karşımızdaki uygulamaya göre sayıları ve kullanımları artmaktadır. Ben büyük çoğunluğuna değinmeden size sadece apktool ve jadx’i göstereceğim. Apktool’u indirmek için apt-get install apktool -y kodunu kullanabilirisiniz. Arkadaşlar şimdi ilk işimiz apktool kullanarak uygulamamızı debug edelim. Bunun için, apktool d <apk.apk> kodunu kullanıyoruz.
2.png


Bu işlemden sonra ls dedikten sonra bir klasör olarak çıktı almayı başardığımızı görüyoruz. Bu klasöre girdiğimizde bakın şimdiden bir şeyler elde ettik.

3.png


“Manifest” dosyasını burada görüyoruz. Manifest neydi; bizim uygulamamızın kullandığı izinleri verdiğimiz dosyaydı. Bu dosya içerisinde çalışan activity'ler versiyonlar filan gibi şeyleri görebiliyorduk. Mesela en basitinden burada uygulamada kaç tane activity var görebiliriz, dediğim gibi fazla detaya inmeden anlatmaya çalışıyorum.

4.png


Peki bunu kapatalım tekrar klasörümüze girelim. Buradaki "res" klasörüne girelim.

6.png


Res klasöründe gördüğünüz gibi bir sürü dosya gelmektedir. Bu dosyalar aslında uygulamalardaki resimler, sesler, activity tasarımları gibi, renkler, yazı tipleri gibi birçok dosyaları içeren klasörlerdir. Values klasörleri dil çevirileri için kullanılan klasörlerdir. Yani siz uygulamanızı başka bir dil için de ayarlamak isterseniz o ülkenin kodu ile başlayan values klasörlerine gerekli çevirileri yapmanız gerekmektedir. Bu şekilde android bu sorunu çözmüştür. Nitekim şimdi de gelelim "smali" denilen klasöre. Aslında smali çok önemlidir. Çünkü “dalvik byte code” dosyaları aslında buradadır. Şimdi biz Smali klasörü içinden biz androidx olan klasöre girelim. Androidx klasöründe daha çok android’in ihtiyaç duyduğu dosyalar bulunur. Burada core içinde ilerleyerek “MainActivity.smali” dosyasını sublime ile açalım. Bu konum değişken olabilmektedir, kısaca MainActivity.smali diye bir dosyayı, bu klasörde bulmanız gerekmektedir.
7.png


Nitekim bu dosyayı açtığımıda karşımızda dalvik kodları gelmektedir. Dalvik koduna çok fazla detaya inmeden bahsetmek gerekirse; şimdi başlarda Android uygulamaları android runtime üzerinde çalışmaktaydı. Yani Masaüstünde Java Virtual Machine ne ise android içerisinde de Android Runtime o dur. Fakat Android Runtime (ART), Android 5 öncesinde kullanılırdı. Artık Android 5 sonrasından itibaren daha çok uygulamalar Dalvik VM ortamında çalışmaya başladı. Yani kısaca bir sanal katman diyebiliriz. Nitekim biz bunları anlamaya çalışarak manipüle etmeye çalışacağız.
8.png



Manipülasyon

Evet arkadaşlar sonunda dalvik byte code'a ulaştık. Şimdi bakalım neler yapabileceğiz. Şimdi en baştan incelemeye başlayalım. İlk başta “Class public” diye başlayan yerde paket adımızı görmekteyiz. .

.class public Lcom/ogulcankacar/hackapplication/MainActivity;

bu dosyanın da bir java dosyası olduğunu görmekteyiz. Burada “java” yerine “kt” olsaydı bu bir Kotlin kodu olacaktı.

.source "MainActivity.java"

Yani amacımız dalvik vm kodunu inceleyerek ipuçları elde etmektir, mesela az biraz aşağıya indiğimizde başka stringlerin oluştuğunu görebiliriz.

9.png


Yani gördüğünüz gibi oldukça basit bir kod bile dalvik byte code'da ne kadar zor bir şekilde yazılmış. İşte bu yüzden tersine mühendislik aşaması bu gibi dalvik kodlarını okumak yüzünden oldukça zordur. İşte böyle bir süreçte ya dalvik byte code'u çalışarak tüm detaylarına kadar öğreneceksiniz ki bu ne kadar bu işin içerisinde olacağınıza göre değişir. Gerçekten mobil güvenlik alanında ilerlemek isteyenler bunu elbette oturup öğrenebilir. Tabi dalvik kimse oturup da dalvik kodu yazsın diye geliştirilmiş bir dil olmadığı için yani sadece ara bir dil olduğu için çok fazla dokümantasyon bulmak da zordur. Birkaç sitede bu dalvik kodlarını öğreten dokümantasyonlar bulunabilir. Mesela bu sitede: , bir arkadaş oturup tüm bu dalvik kodlarını özetlemiş. Ya bunları ezberleyeceğiz ya da çalışırken devamlı bu tabloya bakacağız. Bu işte başka kaçar yol malesef şuan kaçınılmazdır. Şimdi biz bu tersine mühendislik aşamasında ne yapıyoruz yani amacımız ne? bizim uygulama basit olduğu için biz sadece uygulamamızda mesela burada string olarak tanımlanan flag değerini değiştirebilir veya login_status:I değeriyle birşeyler yapabiliriz.​

.line 8
invoke-direct {p0}, Landroidx/appcompat/app/AppCompatActivity;-><init>()V
.line 11
const-string v0, "t\u00fcrkhackteam"
iput-object v0, p0, Lcom/ogulcankacar/hackapplication/MainActivity;->flag:Ljava/lang/String;
.line 12
const/4 v0, 0x0
iput v0, p0, Lcom/ogulcankacar/hackapplication/MainActivity;->login_status:I
Tabi bu basit bariz zaten cons-string içindeki metni değiştirdiğimizde uygulamayı kendimize göre uyarlamış oluruz. Fakat biz burada örneğin değişkenleri değiştirmek istersek işte burada bizim bu tabloya ihtiyacımız olacak. Bu yüzden bu tablo bu iş için çok önemli bir statüdedir. Nitekim mesela ctflerde sizden sadece bu gibi bir text içine kendi adınızı yazmanız isteniyorsa bu şekilde basitçe textVİew içindeki yazıya kendi isminizi verebilirsiniz. Bunu yapmak için de ne yaptık, apktool ile debug edip içindeki MainActivity koduna ulaşarak yaptık. Yaptıktan sonra bu işlemi kaydediyoruz. Şimdi bunu tekrar bir apk haline getirmemiz gerekecek. Bunu da yeniden apktool kullanarak yapacağız.​

Apk Çevirme

Arkadaşlar şimdi tersine mühendisliği yaptık ve adımızı bir uygulama içerisine ekledik. Şimdi bundan sonra bu editlenmiş uygulamayı tekrar bir paket yani bir apk haline getirerek çalıştırmamız gerek. Bunu yapmak için apktool kullanacağız. apktool'da decomple yapıldığı gibi build'da yapılmaktadır. Şimdi bu klasörümüzün olduğunu konuma gidelim ve ardından,

apktool b -o <newapk.apk>

yaparak “newapk” adını verdiğimiz editlenmiş apk dosyamızı oluşturalım. Arkadaşlar kali de bu build sorun yaşarsanız windows'a apktool yükleyerek build işlemini yapabilirsiniz. Ayrıca yeni apk'yı yüklediğimizde eğer uygulama yüklenmez ise imzalama işlemi yapmamız gerekecek. Çünkü içeriğinde herhangi bir değişiklik yapıldığı anlaşılmaktadır. Bunu biz manuel olarak imzalamamız gerekmektedir. İmzalama işlemini yapmak için “keytool” denilen bir araç kullanmanız gerekmektedir. Ben yazıyı daha da uzun tutmak için bunu göstermiyorum. Yani bu süreçte hiç kaynak kodu bilmediğimiz bir uygulama içindeki bazı değişkenleri değiştirmeyi başarmış olduk. Tabi çok basit bir aşamaydı. Gerçekte kodlar bu kadar kısa olmayacaktır. Ama mantık bu şekildedir. Bu yapılan işlemlerin daha uzun süren hali olacaktır. Fakat tersine mühendislik bu kadar kolay değildir. Gerçekte daha zor olacaktır. Biz sadece temelleri ve mantığı anlamaya çalışıyoruz. Bu süreçte sadece apktool tabi ki yetmeyecektir. Jadx gibi uygulamalar da kullanmanız gerekebilir. Şimdi bir de bu işlemi jadx aracını katarak görelim.

Jadx
Arkadaşlar şimdi “jadx” kullanarak direk olarak Dalvik kodu yerine kaynak kodlarına ulaşmaya çalışacağız. Jadx’i apk-get install jadx -y yaparak kurabilirisiniz. Biz Jadx ile kaynak kodları alabilir miyiz alamaz mıyız, alırsak hangi koşullarda alabiliyoruz, alınca ne yapacağız gibi işlemler üzerinde duracağız. O halde başlayalım. Şimdi biz az önce oluşturduğumuz apk üzerinden tekrar ilerleyelim. Şimdi terminal açalım ve,

jadx -d (decomple) /root/Destkop/(çıktı klasörü) /root/Desktop/uygulama_adı.apk

kodu ile apk'mızı verdiğimiz klasör adı içine debug etmiş oluyoruz.​
10.png


Debug işlemi bittikten sonra oluşan klasöre gittiğimizde bizi kaynaklar klasörü karşılayacaktır. Resources klasöründe yine Manifest dosyamızı görmekteyiz. Zaten bunu apktool ile de almıştık. Buradan yine işimize yarayacak bilgileri alabiliriz. Diğer klasörlerde de yine apktool ile bulduğumuz şeyleri görebiliyoruz. Bizim asıl işimiz “sources” içerisinde. Buraya girdiğimizde bizim apktool ile dalvik kodu olarak aldığımız yerlerde burada direk “java” kodu olarak gelmektedir.

11.png


Bu java dosyasını sublimetext ile açtığımızda bakın az önce karmaşık dalvik vm kodları burada apaçık gözükmektedir.

12.png


Bakın bu sefer uzun uzun Dalvik kodu araştırması yapmadık direk java koduna ulaştık. Artık işimiz oldukça kolay sadece istediğimiz yerleri değiştirmemiz yetecektir. Tabi bu değiştirme işlemini buradan bakacağız ama yine değiştireceğimiz işlemi dalvik kodu yazarak işleyeceğiz. Ayrıca tabi bu işlerden biraz anlayanız varsa artık çoğu geliştirici kodlarını apk haline getirirken şifreleyerek yapmaktadır. Yani kodları apk yapmadan önce şifrelemektedir. Kodlar şifrelenince bunun gibi kolay okunmayacaktır. Bu nedenle bizim yine tersine mühendislik süreci epey zaman alacaktır…

Nitekim buraya kadar anlatılanlar başta da dediğim gibi çok yüzeysel şeylerdi, amacım sadece farkındalık oluşturmaktı, umarım bunu başarabilmişimdir. Burada değindiğim basit şeylerin ilerisi olduğunu unutmayın. Umarım bir başka yazıda bunlara da değinebiliriz. Buraya kadar okuyanlara teşekkür ederim, bir sonraki yazıda görüşmek üzere…​




Kaynakça
Google
Android Developer
Kendi bilgim
Ellerine saglik
 

ogulcankacar

Yeni üye
29 Ağu 2022
42
42
Güzel yazın için teşekkür ederiz. Android Tersine mühendisliği, tüm tersine mühendislikler arasında en nefret ettiğim dallardan biri olabilir hiç sevmem bulaşmaktan hoşlanmam tiksinti duyarım java yı da OOP yi de sevmiyorum. Ama bu konuyu olabilecek en basit haliyle anlatmanız... Bu türkçe anlatım kesinlikle çok faydalı olucaktır. Son olarak, konu ile alakalı merak ettiğim ve yazıda düzeltmek istediğim iki husus var onları söylemek isterim:

*apk dosyalarını zaten rar gibi açabiliyoruz peki apktool u niçin kullanıyoruz bunu merak ediyorum.
*Yazıda disassembly (geri montaj) işlemi yaptığınız yerlerde hep "debug yaptım" tabirini kullanmızsınız yanıltıcı olabilir çünkü debug daha farklı bir kavram muhtemelen büyük parçaya odaklanırken yanlışlıkla yazdınız diğer okuyucular için kafa karışıklığı olmasın diye düzeltmek istedim. (apktool ile yapılan işlemler disassembly, jadx ile yapılan ise decompile işlemi olmalı)
Merhaba, öncelikle birkaç sınava yönelik çalışmalarımdan kaynaklı geç cevap için üzgünüm, android tersine mühendislik gerçekten çok yorucu ama bir o kadar da en azından bana zevkli gelmektedir, elbette proguardlı apk'larda smali okumak yoruyor, fakat belki de zevkli yönü budur; samanlıkta iğne aramak :) ve evet bazı yerlerde hem kavramsal hem de bazı yazım yanlışları olabiliyor, bunun sebebi başta da belirttiğim gibi bazı sınav çalışmaları nedeniyle yazıları geceleri yazmamdan kaynaklı.
rar konusuna gelirsek de; apktool bu süreç için özel yazılmış bir araç, yani şey gibi paint'te de kesme, biçme işlemleri yapılır, fakat cs6'da daha kapsamlı. Aynısını bahsetttiğimiz konu içinde geçerli. Mesela, jadx'de --deobf diye bir parametre var, proguard uygulanmış kodları çözmede biraz daha yardımcı oluyor, yani kullanım kolaylığı diyebiliriz. Ayrıca apktool ile apk'ları decompile edebildiğimiz gibi, recompile da edebiliriz. Yani gittik kaynak kodu değiştirdik, fakat yaptığımız değişikliklerde bir sonuç elde edebildik mi?, birşeyi bozduk mu filan bunu öğrenmemiz için bunu, tekrar apk haline getirmemiz gerek. Bunun gibi sebeplerle genelde apktool gibi araçlar kullanılıyor.

Elinize sağlık. Başarılı bir yazı olmuş.
Teşekkür ederim :)

Ellerinize sağlık
Teşekkürler :)

Teşekkürler :)
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.