Android Applications Pentesting

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Android Uygulamaları Temelleri

Bu sayfayı okumaya başlamanız şiddetle tavsiye edilir; Android güvenliğiyle ilgili en önemli bölümleri ve bir Android uygulamasındaki en tehlikeli bileşenleri öğrenmek için:

Android Applications Basics

ADB (Android Debug Bridge)

Bu, bir Android cihaza (emüle edilmiş veya fiziksel) bağlanmak için gereken ana araçtır.
ADB, bir bilgisayardan cihazları USB veya Network üzerinden kontrol etmeye olanak tanır. Bu yardımcı program, dosyaların her iki yönde kopyalanmasını, uygulamaların yüklenmesini ve kaldırılmasını, shell komutlarının çalıştırılmasını, verilerin yedeklenmesini, logların okunmasını ve diğer fonksiyonları sağlar.

adb kullanmayı öğrenmek için aşağıdaki ADB Commands listesine göz atın.

Smali

Bazen uygulama kodunu değiştirmek, gizli bilgilere (örneğin iyi obfuske edilmiş parolalar veya flag’ler) erişmek için ilginç olabilir. Bu durumda, apk’yi decompile edip kodu değiştirip yeniden derlemek ilginç olabilir.
In this tutorial you can learn how to decompile and APK, modify Smali code and recompile the APK with the new functionality. Bu, sunulacak dinamik analiz sırasında yapılacak birkaç test için bir alternatif olarak çok faydalı olabilir. Bu olasılığı her zaman aklınızda tutun.

Diğer ilginç teknikler

Otomatik çok kaynaklı APK edinimi (justapk)

pip install justapk (Python 3.11+). CLI, çıktıyı JSON olarak stdout’a ve ilerlemeyi stderr’e yazdırır (pipe-dostu). Belirli bir fallback zinciri üzerinden denemeler yapar: APK20 → F-Droid → APKPure (mobile API) → APKMirror (HTML scrape) → Uptodown (mobile API) → APKCombo (HTML scrape). Cloudflare korumalı kaynaklar, gerçek istemcileri taklit etmek ve bot-tespit bloklarını azaltmak için TLS fingerprint impersonation ile curl_cffi kullanır.

justapk download <package>              # auto fallback
justapk download <package> -s apkpure   # pin a source / version / output dir
justapk search telegram
justapk info org.telegram.messenger
justapk convert app.xapk -o output/      # merges splits, re-signs with debug key

convert XAPK/split APK’leri birleştirir ve bunları bir debug key ile imzalar, böylece ortaya çıkan APK imzası/kaynak bilgisi orijinalden farklı olur (test/analiz için kullanın, üretim kurulumları için değil).

  • Cihazdan APK çıkar:
adb shell pm list packages
com.android.insecurebankv2

adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk

adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
  • Tüm splits ve base apks’i APKEditor ile birleştir:
mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
java -jar ../APKEditor.jar m -i splits/ -o merged.apk

# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed

Android malware tradecraft (loaders, fileless DEX, persistence)

Native staging + fileless DEX loaders

Some Android droppers embed a native library (lib*.so) that decrypts and writes a second ELF (e.g., l.so) to a temp path, loads it via JNI, and then loads the real logic as DEX only in memory using dalvik.system.InMemoryDexClassLoader. This reduces static visibility of the payload and avoids writing classes*.dex to disk.

Practical triage points:

  • Çok erken dlopen yapan veya System.loadLibrary çağıran native lib’leri arayın; ardından Java methodlarını obfuscated stack strings aracılığıyla çözebilirler (ör. yığında XOR ile decode edilmiş).
  • Loglarda/strings veya hook’larda InMemoryDexClassLoader’ı izleyin; bu fileless DEX yürütmesini gösterir.

Quick Frida hook to dump the in‑memory DEX buffer:

Java.perform(() => {
const IM = Java.use('dalvik.system.InMemoryDexClassLoader');
IM.$init.overload('java.nio.ByteBuffer','java.lang.ClassLoader').implementation = function(buf, parent){
const arr = Java.array('byte', buf.array());
const fos = Java.use('java.io.FileOutputStream').$new("/sdcard/memdex.dex");
fos.write(arr); fos.close();
return this.$init(buf, parent);
};
});

Anti-analysis kill-switch

Packed loaders genellikle emülatör veya analiz kontrolleri başarısız olduğunda (ör. CPU_ABI doğrulaması) self-terminate olmak için şu çağrıyı yaparlar:

android.os.Process.killProcess(android.os.Process.myPid());

Foreground service + MediaPlayer döngüsü ile kalıcılık

Hafif bir persistence deseni, bir foreground service’i pinned notification ile canlı tutmak ve MediaPlayer aracılığıyla neredeyse duyulmaz bir ses döngüsünü sürekli çalmaktır. Bu, işlemi “aktif” tutar ve OS’nin inaktiflik nedeniyle öldürmelerini azaltır. Küçük bir varlığı (genellikle birkaç saniye uzunluğunda) döndüren ForegroundService + MediaPlayer kullanımına bakın.

Accessibility overlay + ACTION_SET_TEXT hijacking

Kullanıcı Accessibility’yi verdiğinde, banking trojans foreground app’i izleyebilir, gerçekçi bir overlay render edebilir (genellikle Base64 olarak saklanan WebView HTML) ve işlem alanlarını AccessibilityNodeInfo.ACTION_SET_TEXT kullanarak değiştirebilir. Bu, kurban muhtemel bir UI görürken alıcı adresinin sessizce değiştirilmesine olanak tanır.

Minimal text replacement example:

Bundle args = new Bundle();
args.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE,
"ATTACKER_USDT_ADDRESS");
node.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, args);

Meşru push altyapısı olarak C2 gating

Özel soketler yerine, bazı malware’ler C2 kanalı olarak Firebase Cloud Messaging (FCM) kullanır. FCM mesajları telemetri kontrollerini tetikleyebilir (şarj durumu, pil %, sıcaklık, kullanıcı hareketsizliği) ve gizlenme için mining veya fraud gibi eylemleri gate edebilir.

Dosya adından türetilen anahtarlarla şifrelenmiş native payload hazırlama

Native payload’lar şifrelenmiş ELF blob’ları olarak teslim edilebilir ve CipherInputStream() ile decrypt edilir; indirilmiş dosya adının SHA‑1’inden türetilmiş bir anahtar kullanılır. Her dosya adı/sürüm farklı bir anahtar üretir, bu da statik IOC yeniden kullanımını zorlaştırır.

Jezail rooted Android pentesting toolkit (REST API + web UI)

  • rooted device (Magisk/rootAVD) üzerinde çalışır ve HTTP server on tcp/8080 başlatır; bir Flutter web UI ve REST API sağlar.
  • Sürüm APK’sını izinlerle yükleyin: adb install -g -r jezail.apk, sonra uygulamayı başlatın (server otomatik başlar).
  • Uç noktalar: http://<device-ip>:8080/ (UI), http://<device-ip>:8080/api/json (API listing), http://<device-ip>:8080/api/swagger (Swagger).
  • Host’tan UI/API’ye erişmek için emulator port-forward: adb forward tcp:8080 tcp:8080 sonra http://localhost:8080 adresini tarayın.

Android Enterprise & Work Profile Attacks

Android Enterprise Work Profile Bypass

Case Studies & Vulnerabilities

Air Keyboard Remote Input Injection

Android Rooting Frameworks Manager Auth Bypass Syscall Hook

Abusing Android Media Pipelines Image Parsers

Firmware Level Zygote Backdoor Libandroid Runtime

Statik Analiz

Öncelikle, bir APK’yı analiz ederken bir decompiler kullanarak Java koduna bakmalısınız.
Lütfen, farklı kullanılabilir decompiler’lar hakkında bilgi bulmak için burayı okuyun.

İlginç Bilgiler Arama

APK’nin strings’ine bakarak passwords, URLs (https://github.com/ndelphit/apkurlgrep), api anahtarları, encryption, bluetooth uuids, tokens ve diğer ilginç şeyleri arayabilirsiniz… ayrıca kod yürütme backdoors veya kimlik doğrulama backdoor’larına (uygulamaya gömülü admin kimlik bilgileri) bakın.

Firebase

Özellikle firebase URLs’e dikkat edin ve kötü yapılandırılıp yapılandırılmadığını kontrol edin. Firebase’in ne olduğu ve nasıl istismar edileceği hakkında daha fazla bilgi için buraya bakın.

Uygulamayı temel olarak anlama - Manifest.xml, strings.xml

Bir uygulamanın Manifest.xml ve strings.xml dosyalarının incelenmesi potansiyel güvenlik açıklarını ortaya çıkarabilir. Bu dosyalara decompiler kullanarak veya APK dosya uzantısını .zip olarak değiştirip açarak erişilebilir.

Manifest.xml’den tespit edilebilen zayıflıklar şunlardır:

  • Debuggable Applications: Manifest.xml içinde debuggable (debuggable="true") olarak ayarlanmış uygulamalar risk taşır; bu, bağlantılara izin vererek istismara yol açabilir. Debuggable uygulamaların nasıl istismar edileceğini öğrenmek için ilgili bir rehbere bakın.
  • Backup Settings: Hassas bilgilerle çalışan uygulamalar için android:allowBackup="false" özniteliğinin açıkça ayarlanması gerekir; aksi takdirde adb ile yetkisiz yedekleme yapılabilir, özellikle usb debugging etkinse.
  • Network Security: android:networkSecurityConfig="@xml/network_security_config" gibi özel network security konfigürasyonları res/xml/ içinde sertifika pinleri ve HTTP trafiği ayarları gibi güvenlik detaylarını belirtebilir. Örneğin belirli domainler için HTTP trafiğine izin vermek gibi.
  • Exported Activities and Services: Manifest’te dışa açık (exported) aktiviteler ve servislerin belirlenmesi, kötüye kullanılabilecek bileşenleri ortaya çıkarabilir. Dinamik testler sırasında daha ileri analiz, bu bileşenlerin nasıl istismar edilebileceğini gösterebilir.
  • Content Providers and FileProviders: Açıkta bırakılmış content provider’lar yetkisiz erişime veya veri değiştirmeye izin verebilir. FileProvider konfigürasyonu da dikkatle incelenmelidir.
  • Broadcast Receivers and URL Schemes: Bu bileşenler input ile ilgili zayıflıklar açısından istismar edilebilir; URL scheme’lerin nasıl yönetildiğine özellikle dikkat edilmelidir.
  • SDK Versions: minSdkVersion, targetSDKVersion, ve maxSdkVersion öznitelikleri desteklenen Android sürümlerini gösterir; güvenlik açısından eski ve zafiyetli Android sürümlerini desteklememek önemlidir.

strings.xml dosyasından API anahtarları, custom schema’lar ve diğer geliştirici notları gibi hassas bilgiler bulunabilir; bu kaynakların dikkatle incelenmesi gerektiğini vurgular.

Tapjacking

Tapjacking, kötü amaçlı bir uygulamanın başlatılıp mağdur uygulamanın üstüne konumlandırıldığı bir saldırıdır. Mağdur uygulamayı görünür şekilde örttüğünde, kötü amaçlı uygulamanın kullanıcı arayüzü kullanıcıyı kandıracak şekilde tasarlanır; etkileşimleri mağdur uygulamaya iletmeye devam eder.
Sonuç olarak, kullanıcı aslında mağdur uygulama üzerinde işlem yaptığı gerçeğinden gözleri kamaştırılarak uzak tutulur.

Daha fazla bilgi için bakın:

Tapjacking

Task Hijacking

launchMode’u singleTask olarak ayarlanmış ve herhangi bir taskAffinity tanımlanmamış bir activity, task Hijacking’e karşı savunmasızdır. Bu, kötü amaçlı bir uygulamanın kurulup gerçek uygulamadan önce başlatılması durumunda gerçek uygulamanın task’ını ele geçirebileceği anlamına gelir (yani kullanıcı gerçek uygulamayı kullandığını düşünerek kötü amaçlı uygulama ile etkileşimde bulunacaktır).

Daha fazla bilgi:

Android Task Hijacking

Güvensiz veri depolama

Internal Storage

Android’de dahili depolamada saklanan dosyalar, onları oluşturan uygulama tarafından erişilebilir olacak şekilde tasarlanmıştır. Bu güvenlik önlemi Android işletim sistemi tarafından uygulanır ve çoğu uygulamanın güvenlik ihtiyaçları için yeterlidir. Ancak geliştiriciler bazen dosyaların farklı uygulamalar arasında paylaşılıp erişilmesine izin veren MODE_WORLD_READABLE ve MODE_WORLD_WRITABLE gibi modları kullanır. Bu modlar bu dosyalara diğer uygulamalar (potansiyel olarak kötü amaçlı olanlar da dahil) tarafından erişimi kısıtlamaz.

  1. Static Analysis:
  • MODE_WORLD_READABLE ve MODE_WORLD_WRITABLE kullanımı dikkatle incelenmelidir. Bu modlar dosyaların istenmeyen veya yetkisiz erişime açılmasına neden olabilir.
  1. Dynamic Analysis:
  • Uygulama tarafından oluşturulan dosyaların izinlerini doğrulayın. Özellikle herhangi bir dosyanın dünya tarafından okunabilir veya yazılabilir olarak ayarlanıp ayarlanmadığını kontrol edin. Bu, cihazda yüklü herhangi bir uygulamanın bu dosyaları okuyup değiştirmesine izin verebileceği için ciddi bir güvenlik riski oluşturur.

External Storage

SD Kart gibi external storage üzerindeki dosyalar için alınması gereken önlemler:

  1. Erişilebilirlik:
  • External storage üzerindeki dosyalar global olarak okunabilir ve yazılabilir. Yani herhangi bir uygulama veya kullanıcı bu dosyalara erişebilir.
  1. Güvenlik Endişeleri:
  • Erişimin kolay olması nedeniyle hassas bilgileri external storage’da saklamamak tavsiye edilir.
  • External storage çıkarılabilir veya herhangi bir uygulama tarafından erişilebilir olduğundan daha az güvenlidir.
  1. External Storage’dan Veri İşleme:
  • External storage’dan alınan veriler üzerinde her zaman giriş doğrulaması yapın. Çünkü bu veriler güvenilmeyen bir kaynaktan gelmektedir.
  • External storage’da yürütülebilir veya sınıf dosyalarının dinamik yüklenmesi için saklanması şiddetle tavsiye edilmez.
  • Uygulamanız external storage’dan yürütülebilir dosyalar almak zorundaysa, bu dosyaların dinamik olarak yüklenmeden önce imzalı ve kriptografik olarak doğrulanmış olmasını sağlayın. Bu adım uygulamanızın güvenlik bütünlüğü için hayati önem taşır.

External storage şu konumlardan erişilebilir: /storage/emulated/0 , /sdcard , /mnt/sdcard

Tip

Android 4.4 (API 17) ile başlayarak, SD kartın bir dizin yapısı vardır ve bu yapı bir uygulamanın yalnızca o uygulamaya özel dizine erişimini sınırlar. Bu, kötü amaçlı bir uygulamanın başka bir uygulamanın dosyalarına okuma veya yazma erişimi kazanmasını engeller.

Açık metin olarak saklanan hassas veriler

  • Shared preferences: Android her uygulamanın /data/data/<packagename>/shared_prefs/ yolunda kolayca xml dosyaları kaydetmesine izin verir ve bazen bu klasörde açık metin olarak hassas bilgiler bulunabilir.
  • Databases: Android her uygulamanın /data/data/<packagename>/databases/ yolunda sqlite veritabanları kaydetmesine izin verir ve bazen bu klasörde açık metin olarak hassas bilgiler bulunabilir.

Bozuk TLS

Accept All Certificates

Bazı nedenlerden dolayı geliştiriciler bazen hostname eşleşmesi gibi kontroller sağlanmasa bile tüm sertifikaları kabul ederler; örneğin aşağıdaki gibi kod satırlarıyla:

SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

Bunu test etmenin iyi bir yolu, cihaz içinde Burp CA’yı yetkilendirmeden Burp gibi bir proxy kullanarak trafiği yakalamayı denemektir. Ayrıca, Burp ile farklı bir hostname için bir sertifika üretebilir ve bunu kullanabilirsiniz.

Kırık Kriptografi

Zayıf Anahtar Yönetimi Süreçleri

Bazı geliştiriciler hassas verileri local storage’da saklar ve kod içinde hardcoded/tahmin edilebilir bir anahtar ile şifreler. Bu yapılmamalıdır çünkü bazı reversing işlemleri saldırganların gizli bilgileri çıkarmasına izin verebilir.

Güvensiz ve/veya Kullanımdan Kalmış Algoritmaların Kullanımı

Geliştiriciler yetkilendirme kontrolleri, veri saklama veya veri gönderme işlemleri için kullanımdan kalmış algoritmaları kullanmamalıdır. Bu algoritmalardan bazıları: RC4, MD4, MD5, SHA1… Örneğin parolaları saklamak için hashes kullanılıyorsa, salt ile birlikte brute-force’a karşı dirençli hashes kullanılmalıdır.

Diğer kontroller

  • Saldırganların reverse engineer işini zorlaştırmak için APK’yi obfuscate etmek önerilir.
  • Uygulama hassassa (ör. bankacılık uygulamaları) cihazın root olup olmadığını kendi içinde kontrol etmeli ve duruma göre davranmalıdır.
  • Uygulama hassassa (ör. bankacılık uygulamaları) bir emulator kullanılıp kullanılmadığını kontrol etmelidir.
  • Uygulama hassassa (ör. bankacılık uygulamaları) çalıştırmadan önce kendi bütünlüğünü kontrol etmeli ve değiştirilip değiştirilmediğini doğrulamalıdır.
  • Hangi compiler/packer/obfuscator ile APK’nin derlendiğini kontrol etmek için APKiD kullanın

React Native Application

React uygulamalarının javascript koduna kolayca nasıl erişileceğini öğrenmek için aşağıdaki sayfayı okuyun:

React Native Application

Xamarin Applications

Bir xamarin uygulamasının C# koduna kolayca nasıl erişileceğini öğrenmek için aşağıdaki sayfayı okuyun:

Xamarin Apps

Superpacked Applications

Bu blog post’a göre superpacked, bir uygulamanın içeriğini tek bir dosyaya sıkıştıran bir Meta algoritmasıdır. Blog, bu tür uygulamaları açan bir uygulama oluşturma olasılığından bahsediyor… ve daha hızlı bir yol olarak uygulamayı çalıştırıp filesystem’den açılmış dosyaları toplamak yönteminden söz ediyor.

Automated Static Code Analysis

mariana-trench aracı, uygulamanın codeunu scanning yaparak vulnerabilities bulabilir. Bu araç, arka planda known sources (aracın input’un kullanıcı tarafından kontrol edildiği yerleri belirttiği), sinks (zararlı kullanıcı girdisinin zarar verebileceği dangerous places) ve rules içeren bir dizi tanıma sahiptir. Bu kurallar, bir zafiyeti gösteren sources-sinks kombinasyonlarını belirtir.

Bu bilgilerle, mariana-trench kodu inceleyip olası vulnerabilities bulacaktır.

Secrets leaked

Bir uygulama içinde keşfedebileceğiniz secrets (API keys, passwords, hidden urls, subdomains…) bulunabilir. Bunun için https://github.com/dwisiswant0/apkleaks gibi bir araç kullanabilirsiniz.

Bypass Biometric Authentication

Bypass Biometric Authentication (Android)

Diğer ilginç fonksiyonlar

  • Code execution: Runtime.exec(), ProcessBuilder(), native code:system()
  • Send SMSs: sendTextMessage, sendMultipartTestMessage
  • Native functions declared as native: public native, System.loadLibrary, System.load
  • Read this to learn how to reverse native functions
  • In-memory native code execution via JNI (downloaded shellcode → mmap/mprotect → call):

In Memory Jni Shellcode Execution

Other tricks

content:// protocol



Dinamik Analiz

Öncelikle, uygulamayı ve tüm ortamı (Burp CA cert, Drozer ve Frida başta olmak üzere) kurabileceğiniz bir çevreye ihtiyacınız var. Bu nedenle, rooted bir cihaz (emüle edilmiş ya da değil) şiddetle tavsiye edilir.

Online Dinamik analiz

Şurada ücretsiz bir hesap oluşturabilirsiniz: https://appetize.io/. Bu platform APK’leri upload edip execute etmenize izin verir; bu yüzden bir APK’nin nasıl davrandığını görmek için faydalıdır.

Web üzerinden uygulamanızın loglarını görebilir ve adb ile bağlanabilirsiniz.

ADB bağlantısı sayesinde emülatörlerin içinde Drozer ve Frida kullanabilirsiniz.

Yerel Dinamik Analiz

Bir emulator kullanmak

  • Android Studio (x86 ve arm cihazlar oluşturabilirsiniz; ve this gezisinde belirtildiği üzere güncel x86 sürümleri yavaş arm emulator’a ihtiyaç duymadan ARM kütüphanelerini destekler).
  • Kurulumunu bu sayfada öğrenin:

AVD - Android Virtual Device

  • Genymotion (Free version: Personal Edition, bir hesap oluşturmanız gerekiyor. Hataları önlemek için VirtualBox ile GELEN sürümü download etmeniz önerilir._)
  • Nox (Ücretsiz, ancak Frida veya Drozer’ı desteklemiyor).

Tip

Yeni bir emulator oluştururken ekran ne kadar büyükse emulator o kadar yavaş çalışır. Mümkünse küçük ekranlar seçin.

Genymotion’da google servislerini (ör. AppStore) install etmek için aşağıdaki görüntüde kırmızı ile işaretlenmiş düğmeye tıklamanız gerekir:

Ayrıca, Genymotion’daki Android VM konfigürasyonunda Bridge Network mode seçebileceğinizi unutmayın (bu, Android VM’ye farklı bir VM’den araçlarla bağlanacaksanız faydalı olacaktır).

Fiziksel bir cihaz kullanmak

debugging seçeneklerini aktifleştirmeniz gerekir ve mümkünse cihazı root yapmanız faydalı olacaktır:

  1. Settings.
  2. (Android 8.0 ve sonrası) System seçin.
  3. About phone seçin.
  4. Build number üzerine 7 kez basın.
  5. Geri dönün ve Developer options’ı göreceksiniz.

Uygulamayı yükledikten sonra yapmanız gereken ilk şey uygulamayı çalıştırıp ne yaptığını, nasıl çalıştığını incelemek ve uygulamaya alışmaktır.
İlk dinamik analiz için MobSF dynamic analysis + pidcat kullanmanızı öneririm; böylece uygulamanın nasıl çalıştığını öğrenirken MobSF birçok ilginç veriyi yakalayacak ve daha sonra inceleyebileceksiniz.

Magisk/Zygisk hızlı notlar (Pixel cihazlarda önerilir)

  • systemless root elde etmek için Magisk uygulaması ile boot.img’i patchleyip fastboot ile flash edin
  • Root gizlemek için Zygisk + DenyList’i etkinleştirin; daha güçlü gizleme gerektiğinde LSPosed/Shamiko’yu düşünün
  • OTA güncellemelerinden geri dönebilmek için orijinal boot.img’i saklayın; her OTA’dan sonra yeniden patchleyin
  • Ekran aynalama için host üzerinde scrcpy kullanın

İstenmeyen Veri Sızıntısı

Logging

Geliştiriciler debugging information’ı kamuya açarken dikkatli olmalıdır, çünkü bu hassas veri sızıntılarına yol açabilir. Uygulama loglarını izlemek ve hassas bilgilerin açığa çıkıp çıkmadığını tespit etmek için pidcat ve adb logcat araçları önerilir. Pidcat kolay kullanımı ve okunabilirliği nedeniyle tercih edilir.

Warning

Android 4.0’dan daha yeni sürümlerde uygulamaların sadece kendi log’larına erişebildiğini unutmayın. Yani uygulamalar diğer uygulamaların log’larına erişemez.
Yine de hassas bilgileri loglamamaya dikkat etmek tavsiye edilir.

Copy/Paste Buffer Caching

Android’in clipboard-based framework’ü uygulamalarda kopyala-yapıştır işlevselliğini mümkün kılar, ancak diğer uygulamaların panoya erişebilmesi nedeniyle hassas verilerin açığa çıkma riski vardır. Kredi kartı bilgileri gibi hassas bölümler için kopyala/yapıştır fonksiyonlarını devre dışı bırakmak önemlidir.

Crash Logs

Bir uygulama çöküp logları kaydederse, bu loglar özellikle uygulama tersine mühendislik yapılamıyorsa saldırganlara yardımcı olabilir. Bu riski azaltmak için çökmelerde log tutmamaya çalışın; eğer loglar ağ üzerinden gönderilecekse SSL kanalı üzerinden gönderildiğinden emin olun.

Pentester olarak, bu loglara bakmaya çalışın.

Analytics Data Sent To 3rd Parties

Uygulamalar genellikle Google Adsense gibi hizmetleri entegre eder; geliştiricinin hatalı uygulaması nedeniyle bu tür hizmetlere hassas veri sızdırılabilir. Potansiyel veri sızıntılarını tespit etmek için uygulamanın trafiğini intercept edip üçüncü taraflara gönderilen hassas bilgileri kontrol etmek önerilir.

SQLite DBs

Çoğu uygulama bilgi saklamak için internal SQLite databases kullanır. Pentest sırasında oluşturulan databases’lere, tables ve columns isimlerine ve kaydedilen tüm verilere bakın; çünkü burada hassas bilgi bulabilirsiniz (bu bir vulnerability olur).
Databases genellikle /data/data/the.package.name/databases gibi bir konumda olmalıdır; örneğin /data/data/com.mwr.example.sieve/databases

Eğer veritabanı gizli bilgi saklıyor ve encrypted ise fakat uygulama içinde password’u bulabiliyorsanız bu yine bir vulnerability’dir.

Tabloları .tables ile listeleyin ve tabloların sütunlarını .schema <table_name> ile inceleyin.

Drozer (Exploit Activities, Content Providers and Services)

Drozer Docs’a göre (https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): Drozer, kendinizi bir Android uygulaması gibi varsaymanızı ve diğer uygulamalarla etkileşimde bulunmanızı sağlar. Yüklü bir uygulamanın yapabileceği her şeyi yapabilir; Android’in Inter-Process Communication (IPC) mekanizmasını kullanabilir ve alt işletim sistemi ile etkileşime girebilir.
Drozer, exported activities, exported services ve Content Providers’ı exploit etmek için kullanışlı bir araçtır; bunu aşağıdaki bölümlerde öğreneceksiniz.

Exported Activities’ı İstismar Etme

Read this if you want to refresh what is an Android Activity.
Ayrıca bir activity’nin kodunun onCreate metodunda başladığını unutmayın.

Yetkilendirme atlatma

Bir Activity exported ise dışarıdan bir uygulama tarafından ekranı invoke edilebilir. Bu nedenle, eğer hassas bilgi içeren bir activity exported ise yetkilendirme mekanizmalarını bypass edip ona erişebilirsiniz.

Learn how to exploit exported activities with Drozer.

Ayrıca adb üzerinden exported bir activity başlatabilirsiniz:

  • PackageName is com.example.demo
  • Exported ActivityName is com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity

NOT: MobSF, bir activity’de android:launchMode olarak singleTask/singleInstance kullanımını kötü amaçlı olarak algılar, ancak this, görünüşe göre bu yalnızca eski sürümlerde (API sürümleri < 21) tehlikelidir.

Tip

Bir authorisation bypass her zaman bir zafiyet değildir; bunun nasıl çalıştığına ve hangi bilgilerin açığa çıktığına bağlıdır.

Sensitive information leakage

Activity’ler aynı zamanda sonuç döndürebilir. Eğer exported ve korunmasız bir activity bulup setResult metodunu çağırdığını ve hassas bilgi döndürdüğünü tespit ederseniz, hassas bilgi sızıntısı meydana gelebilir.

Tapjacking

Eğer tapjacking engellenmemişse, exported activity’yi kötüye kullanarak kullanıcının beklenmeyen işlemler yapmasını sağlayabilirsiniz. Tapjacking hakkında daha fazla bilgi için what is Tapjacking follow the link’e bakın.

Exploiting Content Providers - Accessing and manipulating sensitive information

Read this if you want to refresh what is a Content Provider.
Content providers esasen veri paylaşmak için kullanılır. Bir uygulamanın erişilebilir content provider’ları varsa, bunlardan hassas verileri çıkarabiliyor olabilirsiniz. Ayrıca potansiyel SQL injections ve Path Traversals için test yapmak ilginçtir, çünkü bunlar zafiyetli olabilir.

Learn how to exploit Content Providers with Drozer.

Exploiting Services

Read this if you want to refresh what is a Service.
Unutmayın ki bir Service’in eylemleri onStartCommand metodunda başlar.

Service esasen veri alabilen, onu işleyebilen ve (veya) bir yanıt döndürebilen bir bileşendir. Bu nedenle, bir uygulama bazı service’leri export ediyorsa, ne yaptığını anlamak için kodu incelemeli ve gizli bilgileri çıkarmak, yetkilendirme önlemlerini bypass etmek vb. için dinamik olarak test etmelisiniz.
Learn how to exploit Services with Drozer.

Exploiting Broadcast Receivers

Read this if you want to refresh what is a Broadcast Receiver.
Unutmayın ki bir Broadcast Receiver’ın eylemleri onReceive metodunda başlar.

Bir broadcast receiver belirli bir türde mesajı bekler. Alıcının mesajı nasıl işlediğine bağlı olarak zafiyetli olabilir.
Learn how to exploit Broadcast Receivers with Drozer.

Deep link’leri elle arayabilirsiniz; MobSF gibi araçları veya this one gibi script’leri kullanabilirsiniz.
İlan edilmiş bir scheme’i adb veya bir browser ile açabilirsiniz:

adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]

Unutmayın ki paket adını atlayabilirsiniz ve mobil cihaz, o bağlantıyı açması gereken uygulamayı otomatik olarak çağıracaktır.

<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>

Code executed

Uygulamada çalıştırılacak kodu bulmak için, deeplink tarafından çağrılan activity’ye gidin ve onNewIntent fonksiyonunu arayın.

Hassas bilgiler

Her bulduğunuz deep link’te URL parametreleriyle hassas veri (ör. şifreler) almadığını kontrol edin, çünkü başka bir uygulama deep link’i taklit edip bu veriyi çalabilir!

Parameters in path

Her deep link’in URL path’inde bir parametre kullanıp kullanmadığını da kontrol etmelisiniz; örneğin: https://api.example.com/v1/users/{username} . Bu durumda şu şekilde bir path traversal zorlayabilirsiniz: example://app/users?username=../../unwanted-endpoint%3fparam=value .
Uygulama içinde doğru endpoint’leri bulursanız, path’in bir bölümü domain adı olarak kullanılıyorsa Open Redirect (eğer path’in bir kısmı domain olarak kullanılıyorsa), account takeover (CSRF token olmadan kullanıcı detaylarını değiştirebiliyorsanız ve zafiyetli endpoint doğru HTTP metodunu kullandıysa) ve diğer çeşitli vuln’lara neden olabilirsiniz. Daha fazla bilgi için buraya bakın.

More examples

Bağlantılarla ilgili ilginç bir bug bounty raporu (/.well-known/assetlinks.json).

Taşıma Katmanı İncelemesi ve Doğrulama Hataları

  • Sertifikalar her zaman düzgün şekilde incelenmez Android uygulamaları tarafından. Bu uygulamaların uyarıları göz ardı edip self-signed sertifikaları kabul etmesi veya bazı durumlarda HTTP’ye dönmesi yaygındır.
  • SSL/TLS el sıkışması sırasında yapılan müzakereler bazen zayıftır, güvenli olmayan cipher suite’ler kullanılabilir. Bu zafiyet bağlantıyı man-in-the-middle (MITM) saldırılarına karşı savunmasız bırakır ve saldırganların verileri deşifre etmesine olanak sağlar.
  • Leakage of private information; uygulamalar güvenli kanallarla kimlik doğrulaması yapıp diğer işlemler için güvenli olmayan kanallar üzerinden iletişim kurduğunda bir risktir. Bu yaklaşım session cookies veya kullanıcı bilgileri gibi hassas verileri kötü niyetli tarafların ele geçirmesine karşı korumaz.

Certificate Verification

Biz certificate verification üzerine odaklanacağız. Sunucunun sertifikasının bütünlüğü güvenliği artırmak için doğrulanmalıdır. Bu önemlidir çünkü güvensiz TLS yapılandırmaları ve hassas verilerin şifrelenmemiş kanallarda iletilmesi ciddi riskler doğurabilir. Sunucu sertifikalarının doğrulanması ve zafiyetlerin giderilmesiyle ilgili ayrıntılı adımlar için, bu kaynak kapsamlı rehberlik sağlar.

SSL Pinning

SSL Pinning, uygulamanın sunucunun sertifikasını uygulama içinde saklanan bilinen bir kopyayla doğruladığı bir güvenlik önlemidir. Bu yöntem MITM saldırılarını önlemek için önemlidir. Hassas bilgilerle uğraşan uygulamalar için SSL Pinning uygulamak şiddetle tavsiye edilir.

Traffic Inspection

HTTP trafiğini incelemek için, proxy aracının sertifikasını yüklemeniz gerekir (ör. Burp). Bu sertifika yüklenmeden, şifreli trafik proxy üzerinden görünmeyebilir. Özel bir CA sertifikasının nasıl yükleneceğine dair rehber için, buraya tıklayın.

API Level 24 and above hedefleyen uygulamalar, proxy’nin CA sertifikasını kabul etmek için Network Security Config’te değişiklik yapmayı gerektirir. Bu adım şifreli trafiği incelemek için kritiktir. Network Security Config’i değiştirmekle ilgili talimatlar için, bu eğitime bakın.

Eğer Flutter kullanılıyorsa, bu sayfadaki talimatları izlemeniz gerekir. Çünkü sadece sertifikayı store’a eklemek işe yaramaz; Flutter’ın kendi geçerli CA listesi vardır.

Static detection of SSL/TLS pinning

Runtime bypass’lara çalışmadan önce, pinning’in APK’da nerede uygulandığını hızlıca haritalayın. Statik keşif, hook’lar/patch’leri planlamanıza ve doğru kod yollarına odaklanmanıza yardımcı olur.

Tool: SSLPinDetect

  • Açık kaynaklı, APK’yı Smali’ye (apktool aracılığıyla) decompile eden ve SSL/TLS pinning uygulamalarına ait küratörlü regex desenlerini tarayan bir statik analiz aracıdır.
  • Her eşleşme için tam dosya yolu, satır numarası ve bir kod snippet’i raporlar.
  • Yaygın framework’leri ve özel kod yollarını kapsar: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers ve Network Security Config XML pinleri.

Install

  • Gereksinimler: Python >= 3.8, Java on PATH, apktool
git clone https://github.com/aancw/SSLPinDetect
cd SSLPinDetect
pip install -r requirements.txt

Kullanım

# Basic
python sslpindetect.py -f app.apk -a apktool.jar

# Verbose (timings + per-match path:line + snippet)
python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v

Örnek pattern kuralları (JSON)

Signatures kullanarak veya genişleterek proprietary/custom pinning stillerini tespit edin. Kendi JSON’unuzu yükleyip geniş ölçekte scan yapabilirsiniz.

{
"OkHttp Certificate Pinning": [
"Lcom/squareup/okhttp/CertificatePinner;",
"Lokhttp3/CertificatePinner;",
"setCertificatePinner"
],
"TrustManager Override": [
"Ljavax/net/ssl/X509TrustManager;",
"checkServerTrusted"
]
}

Notlar ve ipuçları

  • Büyük uygulamalarda çoklu iş parçacığı ve bellek-eşlemeli I/O ile hızlı tarama; önceden derlenmiş regex aşırı yükü/yanlış pozitifleri azaltır.
  • Pattern collection: https://github.com/aancw/smali-sslpin-patterns
  • Sonraki önceliklendirme için tipik tespit hedefleri:
  • OkHttp: CertificatePinner kullanımı, setCertificatePinner, okhttp3/okhttp paket referansları
  • Özel TrustManager’lar: javax.net.ssl.X509TrustManager, checkServerTrusted override’ları
  • Özel SSL context’leri: SSLContext.getInstance + SSLContext.init ile özel manager’lar
  • res/xml network security config içindeki deklaratif pinler ve manifest referansları
  • Eşleşen konumları dinamik testten önce Frida hook’ları, statik yamalar veya konfigürasyon incelemeleri planlamak için kullanın.

SSL Pinning’i Atlatma

SSL Pinning uygulandığında, HTTPS trafiğini incelemek için atlatılması gerekir. Bu amaçla çeşitli yöntemler mevcuttur:

  • Automatically modify the apk to bypass SSLPinning with apk-mitm. Bu seçeneğin en büyük avantajı, SSL Pinning’i atlatmak için root’a ihtiyaç duymamanızdır; ancak uygulamayı silip yeni sürümünü yeniden yüklemeniz gerekir ve bu her zaman işe yaramayabilir.
  • You could use Frida (discussed below) to bypass this protection. Burp+Frida+Genymotion kullanımı için bir rehber: https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/
  • Ayrıca otomatik olarak SSL Pinning’i atlatmayı objection: objection --gadget com.package.app explore --startup-command "android sslpinning disable"
  • Ayrıca otomatik olarak SSL Pinning’i atlatmayı MobSF dynamic analysis kullanarak deneyebilirsiniz (aşağıda açıklanmıştır)
  • Hâlâ yakalayamadığınız trafik olduğunu düşünüyorsanız, trafiği iptables kullanarak Burp’a yönlendirmeyi deneyebilirsiniz. Bu blogu okuyun: https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62

Yaygın Web Zafiyetlerini Arama

Uygulama içinde yaygın web zafiyetlerini aramak da önemlidir. Bu zafiyetleri tanımlama ve hafifletme ile ilgili ayrıntılar bu özetin kapsamı dışında olmakla birlikte başka kaynaklarda geniş olarak ele alınmıştır.

Frida

Frida geliştiriciler, reverse-engineer’lar ve güvenlik araştırmacıları için dinamik enstrümantasyon araç takımıdır.
Çalışan uygulamaya erişip çalışma zamanında metodları hook’layarak davranışı değiştirebilir, değerleri değiştirebilir, değerleri çıkarabilir, farklı kod çalıştırabilirsiniz…
Android uygulamalarını pentest etmek istiyorsanız Frida’yı nasıl kullanacağınızı bilmelisiniz.

Anti-instrumentation & SSL pinning atlatma iş akışı

Android Anti Instrumentation And Ssl Pinning Bypass

Belleği dökme - Fridump

Uygulamanın şifreler veya mnemonic’ler gibi bellekte saklamaması gereken hassas bilgileri saklayıp saklamadığını kontrol edin.

Fridump3 kullanarak uygulamanın belleğini şu şekilde dökebilirsiniz:

# With PID
python3 fridump3.py -u <PID>

# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"

Bu, belleği ./dump klasörüne dökecek ve orada şu gibi bir şeyle grep yapabilirsiniz:

strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"

Keystore’daki hassas veriler

Android’de Keystore hassas verileri saklamak için en iyi yerdir; ancak yeterli ayrıcalıkla yine de erişmek mümkün. Uygulamalar genelde burada hassas verileri clear text olarak saklama eğiliminde olduğundan, pentests bunu root user olarak kontrol etmelidir; aksi takdirde cihaza fiziksel erişimi olan biri bu verileri çalabilir.

Bir uygulama keystore’da veri saklamış olsa bile, veriler şifrelenmiş olmalıdır.

Keystore içindeki verilere erişmek için bu Frida script’ini kullanabilirsiniz: https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js

frida -U -f com.example.app -l frida-scripts/tracer-cipher.js

Fingerprint/Biometrics Bypass

Aşağıdaki Frida script’ini kullanarak, Android uygulamalarının belirli hassas alanları korumak için uygulayabileceği bypass fingerprint authentication mümkün olabilir:

frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>

Arka Plan Görüntüleri

Bir uygulamayı arka plana attığınızda, Android bir snapshot of the application depolar; uygulama tekrar ön plana getirildiğinde, uygulamadan önce bu görüntüyü yükleyerek uygulamanın daha hızlı açılmış gibi görünmesini sağlar.

Ancak bu snapshot hassas bilgiler içeriyorsa, snapshot’a erişimi olan biri bu bilgileri çalabilir (erişim için root gerektiğini unutmayın).

Snapshot’lar genellikle şu konumda saklanır: /data/system_ce/0/snapshots

Android, layout parametresi olarak FLAG_SECURE ayarlayarak ekran görüntüsü alınmasını önleme imkanı sağlar. Bu flag kullanıldığında, pencere içeriği güvenli kabul edilir; böylece ekran görüntülerinde görünmesi veya güvenli olmayan ekranlarda görüntülenmesi engellenir.

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

Android Application Analyzer

Bu araç, dinamik analiz sırasında farklı araçları yönetmenize yardımcı olabilir: https://github.com/NotSoSecure/android_application_analyzer

Intent Injection

Geliştiriciler sıklıkla bu Intents’leri işleyen ve startActivity(...) veya sendBroadcast(...) gibi metodlara ileten activities, services ve broadcast receivers gibi proxy bileşenleri oluştururlar; bu riskli olabilir.

Tehlike, bu Intents’leri yanlış yönlendirerek saldırganların non-exported uygulama bileşenlerini tetiklemesine veya hassas content providers’lara erişmesine izin verilmesinde yatar. Önemli bir örnek, WebView bileşeninin URL’leri Intent.parseUri(...) aracılığıyla Intent nesnelerine dönüştürmesi ve ardından bunları çalıştırmasıdır; bu durum potansiyel olarak kötü amaçlı Intent enjeksiyonlarına yol açabilir.

Önemli Noktalar

  • Intent Injection web’deki Open Redirect sorununa benzerdir.
  • Exploitler, ekstra olarak Intent nesneleri geçirilmesini ve bunların tehlikeli işlemleri çalıştırmak için yönlendirilebilmesini içerir.
  • Bu, non-exported bileşenleri ve content providers’ı saldırganların erişimine açabilir.
  • WebView’in URL’den Intent’e dönüşümü istenmeyen işlemleri kolaylaştırabilir.

Android İstemci Tarafı Enjeksiyonları ve diğerleri

Muhtemelen bu tür zafiyetleri Web’den biliyorsunuzdur. Bir Android uygulamasında bu zafiyetlere özellikle dikkat etmelisiniz:

  • SQL Injection: Dinamik sorgular veya Content-Providers ile uğraşırken parametreli sorgular kullanmaya özen gösterin.
  • JavaScript Injection (XSS): Herhangi bir WebView için JavaScript ve Plugin desteğinin devre dışı olduğundan emin olun (varsayılan olarak devre dışıdır). More info here.
  • Local File Inclusion: WebView’lerin dosya sistemine erişimi devre dışı bırakılmalıdır (varsayılan olarak etkin) - (webview.getSettings().setAllowFileAccess(false);). More info here.
  • Eternal cookies: Birçok durumda, android uygulama oturumu sonlandırıldığında çerez iptal edilmez ya da diske kaydedilmiş olabilir.
  • Secure Flag in cookies

Otomatik Analiz

MobSF

Statik analiz

Uygulamanın zafiyet değerlendirmesini kullanışlı bir web tabanlı ön yüz aracılığıyla yapar. Dinamik analiz de gerçekleştirebilirsiniz (ancak ortamı hazırlamanız gerekir).

docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

Notice that MobSF can analyse Android(apk), IOS(ipa) and Windows(apx) applications (Windows applications must be analyzed from a MobSF installed in a Windows host).
Also, if you create a ZIP file with the source code if an Android or an IOS app (go to the root folder of the application, select everything and create a ZIPfile), it will be able to analyse it also.

MobSF also allows you to diff/Compare analysis and to integrate VirusTotal (you will need to set your API key in MobSF/settings.py and enable it: VT_ENABLED = TRUE VT_API_KEY = <Your API key> VT_UPLOAD = TRUE). You can also set VT_UPLOAD to False, then the hash will be upload instead of the file.

Assisted Dynamic analysis with MobSF

MobSF Android için dynamic analysis sırasında da çok yardımcı olabilir, ancak bu durumda hostunuza MobSF ve genymotion kurmanız gerekir (VM veya Docker çalışmaz). Not: Önce genymotion’da bir VM başlatmanız ve sonra MobSF’yi başlatmanız gerekir.
The MobSF dynamic analyser şunları yapabilir:

  • Dump application data (URLs, logs, clipboard, screenshots made by you, screenshots made by “Exported Activity Tester”, emails, SQLite databases, XML files, and other created files). All of this is done automatically except for the screenshots, you need to press when you want a screenshot or you need to press “Exported Activity Tester” to obtain screenshots of all the exported activities.
  • Capture HTTPS traffic
  • Use Frida to obtain runtime information

From android versions > 5, it will automatically start Frida and will set global proxy settings to capture traffic. It will only capture traffic from the tested application.

Frida

By default, it will also use some Frida Scripts to bypass SSL pinning, root detection and debugger detection and to monitor interesting APIs.
MobSF can also invoke exported activities, grab screenshots of them and save them for the report.

To start the dynamic testing press the green bottom: “Start Instrumentation”. Press the “Frida Live Logs” to see the logs generated by the Frida scripts and “Live API Monitor” to see all the invocation to hooked methods, arguments passed and returned values (this will appear after pressing “Start Instrumentation”).
MobSF also allows you to load your own Frida scripts (to send the results of your Friday scripts to MobSF use the function send()). It also has several pre-written scripts you can load (you can add more in MobSF/DynamicAnalyzer/tools/frida_scripts/others/), just select them, press “Load” and press “Start Instrumentation” (you will be able to see the logs of that scripts inside “Frida Live Logs”).

Moreover, you have some Auxiliary Frida functionalities:

  • Enumerate Loaded Classes: It will print all the loaded classes
  • Capture Strings: It will print all the capture strings while using the application (super noisy)
  • Capture String Comparisons: Could be very useful. It will show the 2 strings being compared and if the result was True or False.
  • Enumerate Class Methods: Put the class name (like “java.io.File”) and it will print all the methods of the class.
  • Search Class Pattern: Search classes by pattern
  • Trace Class Methods: Trace a whole class (see inputs and outputs of all methods of th class). Remember that by default MobSF traces several interesting Android Api methods.

Once you have selected the auxiliary module you want to use you need to press “Start Intrumentation” and you will see all the outputs in “Frida Live Logs”.

Shell

Mobsf ayrıca dynamic analysis sayfasının altında bazı adb komutları, MobSF commands ve yaygın shell commands içeren bir shell sağlar. Bazı ilginç komutlar:

help
shell ls
activities
exported_activities
services
receivers

HTTP araçları

HTTP trafiği yakalandığında, yakalanan trafiğin çirkin bir görünümünü “HTTP(S) Traffic” alt kısmında veya daha hoş bir görünümü “Start HTTPTools” yeşil butonunda görebilirsiniz. İkinci seçenekten, yakalanan istekleri Burp veya Owasp ZAP gibi proxies’e gönderebilirsiniz.
Bunu yapmak için, power on Burp –> turn off Intercept –> in MobSB HTTPTools select the request –> press “Send to Fuzzer” –> select the proxy address (http://127.0.0.1:8080\).

Once you finish the dynamic analysis with MobSF you can press on “Start Web API Fuzzer” to fuzz http requests an look for vulnerabilities.

Tip

MobSF ile dinamik analiz yaptıktan sonra proxy ayarları yanlış yapılandırılmış olabilir ve GUI’den düzeltemeyebilirsiniz. Proxy ayarlarını düzeltmek için şu komutu çalıştırabilirsiniz:

adb shell settings put global http_proxy :0

Assisted Dynamic Analysis with Inspeckage

Aracı Inspeckage üzerinden edinebilirsiniz.
Bu araç, dinamik analiz yaparken uygulamada nelerin olduğunu size bildirmek için bazı Hooks kullanır.

Yaazhini

Bu, GUI ile statik analiz yapmak için harika bir araçtır

Qark

This tool is designed to look for several security related Android application vulnerabilities, either in source code or packaged APKs. The tool is also capable of creating a “Proof-of-Concept” deployable APK and ADB commands, to exploit some of the found vulnerabilities (Exposed activities, intents, tapjacking…). As with Drozer, there is no need to root the test device.

pip3 install --user qark  # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java

ReverseAPK

  • Tüm çıkarılan dosyaları kolay inceleme için gösterir
  • APK dosyalarını otomatik olarak Java ve Smali formatına decompile eder
  • AndroidManifest.xml’i yaygın zafiyetler ve davranış açısından analiz eder
  • Yaygın zafiyetler ve davranışlar için statik kaynak kodu analizi
  • Cihaz bilgileri
  • ve daha fazlası
reverse-apk relative/path/to/APP.apk

SUPER Android Analyzer

SUPER, Windows, MacOS X ve Linux’ta kullanılabilen bir komut satırı uygulamasıdır; .apk dosyalarını güvenlik açıkları aramak için analiz eder. Bunu APK’leri dekomprese ederek ve bu güvenlik açıklarını tespit etmek için bir dizi kural uygulayarak yapar.

Tüm kurallar rules.json dosyasında toplanmıştır ve her şirket veya test uzmanı ihtiyaçlarına göre kendi kurallarını oluşturabilir.

En son ikili dosyaları download page adresinden indirin

super-analyzer {apk_file}

StaCoAn

StaCoAn, geliştiricilere, bugbounty hunters ve ethical hackers’a mobil uygulamalar üzerinde static code analysis yapmalarında yardımcı olan bir crossplatform araçtır.

Kavram şudur: mobil uygulama dosyanızı (.apk veya .ipa dosyası) StaCoAn uygulamasına sürükleyip bıraktığınızda sizin için görsel ve taşınabilir bir rapor oluşturur. Özelleştirilmiş bir deneyim için ayarları ve wordlists’i değiştirebilirsiniz.

İndir latest release:

./stacoan

AndroBugs

AndroBugs Framework, geliştiricilerin veya hackers’ın Android uygulamalarındaki potansiyel güvenlik açıklarını bulmasına yardımcı olan bir güvenlik açığı analiz sistemidir.
Windows releases

python androbugs.py -f [APK file]
androbugs.exe -f [APK file]

Androwarn

Androwarn Android bir uygulamanın oluşturabileceği potansiyel kötü amaçlı davranışları tespit etmek ve kullanıcıyı uyarmak amacıyla geliştirilmiş bir araçtır.

Tespit, uygulamanın Dalvik bytecode’u, Smali olarak temsil edilen kodun androguard kütüphanesi ile yapılan static analysis ile gerçekleştirilir.

Bu araç “kötü” uygulamaların ortak davranışları gibi şunları arar: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution…

python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3

MARA Framework

MARA, bir Mobil Uygulama Tersine Mühendislik ve Analiz Çerçevesidir. Bu araç, yaygın olarak kullanılan mobil uygulama tersine mühendislik ve analiz araçlarını bir araya getirir ve OWASP mobil güvenlik tehditlerine karşı mobil uygulamaları test etmede yardımcı olur. Amacı, bu görevi mobil uygulama geliştiricileri ve güvenlik profesyonelleri için daha kolay ve kullanıcı dostu hâle getirmektir.

Şunları yapabilir:

  • Farklı araçlar kullanarak Java ve Smali kodu çıkarmak
  • APK’leri şu araçlarla analiz etmek: smalisca, ClassyShark, androbugs, androwarn, APKiD
  • APK’den regex’ler kullanarak özel bilgileri çıkarmak.
  • Manifest’i analiz etmek.
  • Bulunan domainleri şu araçlarla analiz etmek: pyssltest, testssl ve whatweb
  • APK’yi [apk-deguard.com] üzerinden Deobfuscate etmek

Koodous

Malware tespiti için kullanışlı: https://koodous.com/

Obfuscating/Deobfuscating code

Kodu obfuscate etmek için kullandığınız servis ve yapılandırmaya bağlı olarak, secrets obfuscated olabilir veya olmayabilir.

ProGuard

Wikipedia’dan (https://en.wikipedia.org/wiki/ProGuard_(software)): ProGuard, Java kodunu küçülten, optimize eden ve obfuscate eden açık kaynaklı bir komut satırı aracıdır. Bytecode’u optimize edebilir ve kullanılmayan talimatları tespit edip kaldırabilir. ProGuard ücretsiz yazılımdır ve GNU General Public License, version 2 altında dağıtılır.

ProGuard, Android SDK’nin bir parçası olarak dağıtılır ve uygulama release modunda build edilirken çalıştırılır.

DexGuard

APK’yi deobfuscate etmek için adım adım kılavuzu şu adreste bulabilirsiniz: https://blog.lexfo.fr/dexguard.html

(O kılavuzdan) En son kontrol ettiğimizde, Dexguard’ın çalışma modu şuydu:

  • Bir kaynağı InputStream olarak yükler;
  • Sonucu decrypt etmek için FilterInputStream’ten türeyen bir sınıfa verir;
  • Bir reverser’ın birkaç dakikasını çalmak için bazı gereksiz obfuscation işlemleri yapar;
  • Decrypted sonucu ZipInputStream’e vererek bir DEX dosyası elde eder;
  • Son olarak oluşan DEX’i bir Resource olarak loadDex methodu kullanarak yükler.

DeGuard

DeGuard, Android obfuscation araçları tarafından gerçekleştirilen obfuscation sürecini tersine çevirir. Bu, kod incelemesi ve kütüphane tahmini dahil olmak üzere birçok güvenlik analizine olanak tanır.

Obfuscated bir APK’yi platformlarına yükleyebilirsiniz.

[Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app

Bu, android uygulamalardaki potansiyel güvenlik açıklarını bulmak ve android uygulama kodunu deobfuscate etmek için bir LLM aracıdır. Google’s Gemini public API’sini kullanır.

Simplify

Bu, generic bir android deobfuscator’dır. Simplify, bir uygulamayı virtually executes ederek davranışını anlar ve ardından kodu optimize etmeye çalışır; böylece davranış aynı kalır ama insan tarafından anlaşılması daha kolay olur. Her optimizasyon türü basit ve genel olduğundan, kullanılan spesifik obfuscation türü önemli değildir.

APKiD

APKiD, bir APK’nin nasıl yapıldığı hakkında bilgi verir. Birçok compiler, packer, obfuscator ve diğer tuhaf şeyleri tespit eder. Android için [PEiD] gibidir.

Manual

Bu eğitimi okuyarak custom obfuscation’ı nasıl tersine çevireceğinizi öğrenin

Labs

Androl4b

AndroL4b, ubuntu-mate tabanlı bir Android güvenlik sanal makinesidir; reverse engineering ve malware analizi için farklı güvenlik meraklıları ve araştırmacılardan en güncel framework, eğitim ve lab’lerin bir koleksiyonunu içerir.

References

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin