Translated ['', 'src/mobile-pentesting/android-app-pentesting/frida-tuto

This commit is contained in:
Translator 2025-09-08 01:56:02 +00:00
parent 147ca42cea
commit ee44d6d3ff
5 changed files with 594 additions and 386 deletions

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 şiddetle tavsiye edilir; Android güvenliğiyle ilgili **en önemli bölümler ve bir Android uygulamasındaki en tehlikeli bileşenler** hakkında bilgi edinmek için:
{{#ref}}
@ -13,17 +13,17 @@ 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**, bilgisayardan **USB** veya **Network** üzerinden cihazları kontrol etmeye olanak tanır. Bu yardımcı program, 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 sağlar.
Bu, bir Android cihaza (emüle edilmiş veya fiziksel) bağlanmak için ihtiyacınız olan ana araçtır.\
**ADB**, bilgisayardan cihazları ya **USB** ya da **Network** üzerinden kontrol etmeye imkân verir. Bu yardımcı program; 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şlevlerin yanı sıra diğer işler için de kullanılabilir.
ADB'nin nasıl kullanılacağını öğrenmek için aşağıdaki [**ADB Commands**](adb-commands.md) listesine göz atın.
adb'nin nasıl kullanılacağını öğrenmek için aşağıdaki [**ADB Commands**](adb-commands.md) listesine göz atın.
## Smali
Bazen gizli bilgilere erişmek (ör. iyi obfuskelenmiş parolalar veya flags) için uygulama kodunu **değiştirmek** ilginç olabilir. Bu durumda, apk'yi decompile edip, kodu değiştirip tekrar 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 gerçekleştirilecek birkaç test için çok kullanışlı bir **alternatif** olabilir. Bu olasılığı her zaman aklınızda bulundurun.
Bazen **uygulama kodunu değiştirmek**, **gizli bilgilere** (ör. iyi şekilde obfuscate edilmiş şifreler veya flag'ler) erişmek için ilginç olabilir. Bu yüzden, apk'yi decompile etmek, kodu değiştirmek ve 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, dinamik analiz sırasında yapılacak çeşitli testler için çok yararlı bir **alternatif** olabilir. Bu olasılığı her zaman aklınızda bulundurun.
## Other interesting tricks
## Diğer ilginç hileler
- [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)
@ -40,7 +40,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 split'leri ve base apk'ları [APKEditor](https://github.com/REAndroid/APKEditor) ile birleştir:
- Tüm splits ve base apks'i [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
@ -49,7 +49,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 ve Güvenlik Açıkları
## Vaka Çalışmaları ve Güvenlik Açıkları
{{#ref}}
@ -63,39 +63,39 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
## Statik Analiz
Her şeyden önce bir APK'yı analiz etmek için bir decompiler kullanarak **Java koduna bakmalısınız**.\
Lütfen, [**farklı mevcut decompiler'lar hakkında bilgi almak için burayı okuyun**](apk-decompilers.md).
Öncelikle, bir APK'yı analiz etmek için 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).
### İlginç Bilgiler Arama
Sadece APK'nın **strings**'ine bakarak **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** ve ilginç olabilecek her şeyi arayabilirsiniz... hatta kod çalıştırma için **backdoors** veya kimlik doğrulama backdoor'ları (uygulamaya gömülü admin kimlik bilgileri) arayın.
APK'nın **strings**'lerine bakarak **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** ve ilginç olabilecek her şeyi arayabilirsiniz... hatta kod yürütme **backdoors** veya kimlik doğrulama backdoor'ları (uygulamaya gömülü admin credentials) arayın.
**Firebase**
**firebase URLs**'e özellikle dikkat edin ve kötü yapılandırılmış olup olmadığını kontrol edin. [More information about whats is FIrebase and how to exploit it here.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
Özellikle **firebase URLs**'lerine dikkat edin ve kötü yapılandırılıp yapılandırılmadığını kontrol edin. [Firebase'in ne olduğu ve nasıl istismar edileceği hakkında daha fazla bilgi için burayı okuyun.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
### Uygulamanın Temel Anlaşılması - Manifest.xml, strings.xml
### Uygulamayı Temel Düzeyde Anlama - Manifest.xml, strings.xml
Bir uygulamanın _Manifest.xml_ ve _strings.xml_ dosyalarının **incelenmesi potansiyel güvenlik ıklarını ortaya çıkarabilir**. Bu dosyalara decompiler'lar kullanılarak veya APK dosyasının 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 zafiyetlerini ortaya çıkarabilir**. Bu dosyalara decompiler'lar ile erişilebileceği gibi APK dosya uzantısını .zip olarak değiştirip açarak da ulaşabilirsiniz.
**Manifest.xml** dosyasından tespit edilebilecek **güvenlik açıkları** şunlardır:
Manifest.xml'den tespit edilebilecek **zafiyetler** şunlardır:
- **Debuggable Applications**: _Manifest.xml_ dosyasında `debuggable="true"` olarak ayarlanmış uygulamalar risklidir çünkü istismara yol açabilecek bağlantılara izin verirler. Hata ayıklanabilir uygulamaların nasıl bulunup istismar edileceğini öğrenmek için ilgili eğitime bakın.
- **Backup Settings**: Hassas bilgilerle uğraşan uygulamalar için `android:allowBackup="false"` özniteliği açıkça ayarlanmalıdır; özellikle usb debugging etkinse adb üzerinden yetkisiz veri yedeklemelerini önlemek için.
- **Network Security**: _res/xml/_ içindeki özel network security konfigürasyonları (`android:networkSecurityConfig="@xml/network_security_config"`) sertifika pinleri ve HTTP trafiği ayarları gibi güvenlik ayrıntılarını belirtebilir. Örneğin belirli domain'ler için HTTP trafiğine izin verme.
- **Exported Activities and Services**: Manifest'te dışa açık (exported) activity ve service'lerin tespit edilmesi, kötüye kullanılabilecek bileşenleri ortaya çıkarabilir. Dinamik testler sırasında daha fazla analiz, bu bileşenlerin nasıl istismar edilebileceğini gösterebilir.
- **Content Providers and FileProviders**: Açıkta bırakılmış content provider'lar yetkisiz erişime veya veri değişikliğine izin verebilir. FileProvider konfigürasyonu da dikkatle incelenmelidir.
- **Broadcast Receivers and URL Schemes**: Bu bileşenler istismar için kullanılabilir; özellikle URL scheme yönetimindeki giriş doğrulama zafiyetlerine dikkat edilmelidir.
- **SDK Versions**: `minSdkVersion`, `targetSDKVersion` ve `maxSdkVersion` öznitelikleri desteklenen Android sürümlerini gösterir; güvenlik açısından eski ve zayıf Android sürümlerini desteklememenin önemi vurgulanır.
- **Debuggable Uygulamalar**: _Manifest.xml_ dosyasında `debuggable="true"` olarak ayarlanmış uygulamalar, bağlantılara izin verdikleri için istismar riski taşır. Debuggable uygulamaların nasıl bulunup istismar edileceği konusunda bir eğitim materyaline bakın.
- **Backup Ayarları**: Hassas bilgi işleyen uygulamalar için `android:allowBackup="false"` özniteliğinin açıkça ayarlanması gerekir; aksi halde, özellikle usb debugging etkinse adb üzerinden yetkisiz veri yedeklemeleri yapılabilir.
- **Network Güvenliği**: _res/xml/_ içindeki özel network security konfigürasyonları (`android:networkSecurityConfig="@xml/network_security_config"`) sertifika pinleri ve HTTP trafiği ayarları gibi güvenlik detaylarını belirtebilir. Örneğin belirli domain'ler için HTTP trafiğine izin verilebilir.
- **Export Edilmiş Activities ve Services**: Manifest'te export edilmiş activity ve service'leri belirlemek, 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ı olarak analiz edilmelidir.
- **Content Providers ve FileProviders**: Açıkta kalan content provider'lar yetkisiz erişime veya veri değişikliğine izin verebilir. FileProvider konfigürasyonları da dikkatle incelenmelidir.
- **Broadcast Receiver'lar ve URL Şemaları**: Bu bileşenler istismar için kullanılabilir; özellikle URL şemalarının input açısından nasıl yönetildiğine dikkat edilmelidir.
- **SDK Versiyonları**: `minSdkVersion`, `targetSDKVersion` ve `maxSdkVersion` öznitelikleri desteklenen Android sürümlerini gösterir; eski ve zafiyetli Android sürümlerini desteklemenin güvenlik riskleri olduğu unutulmamalıdır.
**strings.xml** dosyasından API keys, custom schemas ve diğer geliştirici notları gibi hassas bilgiler keşfedilebilir; bu da bu kaynakların dikkatle incelenmesi gerektiğini gösterir.
**strings.xml** dosyasından API keys, custom schemas ve diğer geliştirici notları gibi hassas bilgiler bulunabilir; bu nedenle bu kaynakların dikkatli incelenmesi önemlidir.
### Tapjacking
**Tapjacking**, bir **kötü amaçlı** **uygulamanın** başlatıldığı ve **hedef uygulamanın** üstüne konumlandığı bir saldırıdır. Görsel olarak hedef uygulamayı örttüğünde, kullanıcıyı kandırıp onunla etkileşimde bulunmasını sağlayacak şekilde tasarlanmıştır; bu etkileşimler aynı zamanda hedef uygulamaya iletilir.\
Sonuç olarak, kullanıcıya aslında hedef uygulama üzerinde işlem yaptığını fark ettirmeden onu kör eder.
**Tapjacking** bir saldırıdır; burada bir **kötü niyetli** **uygulama** başlatılır ve **hedef uygulamanın üzerine kendini konumlandırır**. Kurban uygulamayı görünür şekilde örttüğünde, kullanıcıyı yanıltacak şekilde bir kullanıcı arayüzü tasarlanır ve yapılan etkileşimler arka plandaki hedef uygulamaya iletilir.\
Böylece kullanıcı **gerçekte hedef uygulama üzerinde işlem yaptığını bilmeden** harekete geçirilmiş olur.
Find more information in:
Daha fazla bilgi için bakınız:
{{#ref}}
@ -104,55 +104,55 @@ tapjacking.md
### Task Hijacking
Bir **activity**'nin **`launchMode`**'u **`singleTask`** olarak ayarlanmış ve herhangi bir `taskAffinity` tanımlanmamışsa task Hijacking'e karşı savunmasızdır. Bu, bir **application** yüklenip gerçek uygulamadan önce başlatılırsa gerçek uygulamanın görevini **hijack edebileceği** anlamına gelir (yani kullanıcı, gerçek uygulamayı kullanıyor zannederek **kötü amaçlı uygulama** ile etkileşimde bulunacaktır).
`launchMode`'u `singleTask` olarak ayarlanmış ve herhangi bir `taskAffinity` tanımlanmamış bir **activity** task Hijacking'e karşı savunmasızdır. Bu durum, kötü amaçlı bir **uygulamanın** yüklendikten sonra gerçek uygulamadan önce başlatılması halinde **gerçek uygulamanın task'ını kaçırabilmesi** (kullanıcının gerçek uygulamayı kullandığını düşünürken kötü amaçlı uygulama ile etkileşimde bulunması) anlamına gelir.
More info in:
Daha fazla bilgi:
{{#ref}}
android-task-hijacking.md
{{#endref}}
### Güvensiz veri depolama
### Güvenli Olmayan Veri Depolama
**Dahili Depolama**
**Internal Storage**
Android'de dahili depolamada **saklanan** dosyalar, onları **oluşturan** **uygulama** tarafından erişilebilir olacak şekilde tasarlanmıştır. Bu güvenlik önlemi Android işletim sistemi tarafından uygulanan bir mekanizmadır ve çoğu uygulamanın güvenlik ihtiyaçları için genellikle yeterlidir. Ancak geliştiriciler bazen dosyaların farklı uygulamalar arasında paylaşılmasına izin veren `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 kısıtlamaz.
Android'de dahili depolamada **saklanan** dosyalar, **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 uygulamanın güvenlik gereksinimleri için genellikle 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ır. Bu modlar, söz konusu dosyalara diğer uygulamaların, kötü niyetli uygulamalar dahil olmak üzere, erişimini kısıtlamaz.
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 açabilir**.
- `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` kullanımının **dikkatle incelenmesini** sağlayın. Bu modlar dosyaların **istenmeyen veya yetkisiz erişime** maruz kalmasına yol açabilir.
2. **Dinamik Analiz:**
- Uygulama tarafından oluşturulan dosyalara atanmış **izinleri doğrulayın**. Özellikle herhangi bir dosyanın **tüm dünyaya okunabilir veya yazılabilir** olarak ayarlanıp ayarlanmadığını **kontrol edin**. Bu, cihazdaki herhangi bir uygulamanın, kaynağı veya amacı ne olursa olsun, bu dosyaları **okumasına veya değiştirmesine** izin verebileceği için büyük bir güvenlik riski oluşturur.
- Uygulama tarafından oluşturulan dosyalarda ayarlanan **izinleri doğrulayın**. Özellikle herhangi bir dosyanın **dünya tarafından okunabilir veya yazılabilir** olarak ayarlanıp ayarlanmadığını kontrol edin. Bu, cihazda yüklü herhangi bir uygulamanın, kaynağı veya amacı ne olursa olsun, bu dosyaları **okumasına veya değiştirmesine** izin verebilir ve ciddi bir güvenlik riski oluşturur.
**Harici Depolama**
**External Storage**
SD Kart gibi **harici depolama** ile uğraşırken bazı önlemler alınmalıdır:
SD kart gibi **harici depolama** ile çalışırken bazı önlemler alınmalıdır:
1. **Erişilebilirlik**:
- Harici depolamadaki dosyalar **genel olarak okunabilir ve yazılabilir**dir. Yani herhangi bir uygulama veya kullanıcı bu dosyalara erişebilir.
- Harici depolamadaki dosyalar **genel olarak okunabilir ve yazılabilir** durumdadır. Bu, herhangi bir uygulamanın veya kullanıcının bu dosyalara erişebileceği anlamına gelir.
2. **Güvenlik Endişeleri**:
- Kolay erişim nedeniyle hassas bilgilerin harici depolamada saklanmaması tavsiye edilir.
- Harici depolama çıkarılabilir veya herhangi bir uygulama tarafından erişilebilir, bu yüzden daha az güvenlidir.
3. **Harici Depolamadan Veri İşleme**:
- Harici depolamadan alınan veriler üzerinde her zaman **girdi doğrulaması** yapın. Bu çok önemlidir çünkü veriler güvenilmeyen bir kaynaktan gelmektedir.
- Harici depolamada saklanan yürütülebilir veya class dosyalarının dinamik yüklenmesi şiddetle önerilmez.
- Uygulamanızın harici depolamadan yürütülebilir dosyalar alması gerekiyorsa, bu dosyaların dinamik olarak yüklenmeden önce **imzalanmış ve kriptografik olarak doğrulanmış** olduğundan emin olun. Bu adım uygulamanızın güvenlik bütünlüğü için hayati önem taşır.
- Kolay erişim nedeniyle hassas bilgileri harici depolamada saklamamak önerilir.
- Harici depolama çıkarılabilir veya herhangi bir uygulama tarafından erişilebilir olduğundan daha az güvenlidir.
3. **Harici Depolamadan Veri Alma**:
- Harici depolamadan alınan veriler üzerinde her zaman **girdi doğrulaması** yapın. Bu, verinin güvenilmeyen bir kaynaktan geldiği için kritik önemdedir.
- Harici depolamada yürütülebilir veya sınıf dosyalarını dinamik yükleme amacıyla saklamak şiddetle tavsiye edilmez.
- Uygulamanız harici depolamadan yürütülebilir dosyalar almak zorundaysa, bu dosyaların dinamik olarak yüklenmeden önce **imzalanmış ve kriptografik olarak doğrulanmış** olduğundan emin olun. Bu adım uygulamanızın güvenlik bütünlüğünü korumak için hayati öneme sahiptir.
Harici depolamaya şu yollardan erişilebilir: /storage/emulated/0 , /sdcard , /mnt/sdcard
Harici depolamaya şu yollarla 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 kendine ayrılmış 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ı engeller.
**Düz metin olarak saklanan hassas veriler**
**ık metin olarak saklanan hassas veriler**
- **Shared preferences**: Android her uygulamanın `/data/data/<packagename>/shared_prefs/` yoluna xml dosyalarını kolayca kaydetmesine izin verir ve bazen bu klasörde hassas bilgilerin düz metin halinde bulunması mümkündür.
- **Databases**: Android her uygulamanın `/data/data/<packagename>/databases/` yoluna sqlite veritabanlarını kolayca kaydetmesine izin verir ve bazen bu klasörde hassas bilgilerin düz metin halinde bulunması mümkündür.
- **Shared preferences**: Android her uygulamanın kolayca xml dosyaları kaydetmesine izin verir; bu dosyalar genellikle `/data/data/<packagename>/shared_prefs/` yolunda bulunur ve bazen bu klasörde açık metin halinde hassas bilgiler bulunabilir.
- **Databases**: Android her uygulamanın sqlite veri tabanlarını kolayca kaydetmesine izin verir; bu dosyalar genellikle `/data/data/<packagename>/databases/` yolunda bulunur ve bazen bu klasörde açık metin halinde hassas bilgiler bulunabilir.
### Broken TLS
**Tüm Sertifikaları Kabul Etme**
**Accept All Certificates**
Bazı nedenlerle geliştiriciler bazen tüm sertifikaları kabul ederler; örneğin hostname eşleşmese bile aşağıdaki gibi kod satırlarıyla:
Nedeni her ne olursa olsun bazen geliştiriciler, örneğin hostname eşleşmesi olmasa bile tüm sertifikaları kabul ederler; bunu yapan kod satırlarına örnek olarak aşağıdaki gibi bir kullanım verilebilir:
```java
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
@ -161,25 +161,25 @@ A good way to test this is to try to capture the traffic using some proxy like B
### Broken Cryptography
**Poor Key Management Processes**
**Zayıf Anahtar Yönetimi Süreçleri**
Bazı geliştiriciler hassas verileri local storage içinde saklayıp, kodda hardcoded/öngörülebilir bir key ile şifreliyor. Bu yapılmamalıdır çünkü reversing ile saldırganlar gizli bilgileri çıkarabilirler.
Bazı geliştiriciler hassas verileri yerel depolamada saklar ve kod içinde hardcoded/predictable bir anahtar ile şifreler. Bu yapılmamalıdır çünkü bazı reversing işlemleri saldırganların gizli bilgileri çıkarmasına olanak sağlayabilir.
**Use of Insecure and/or Deprecated Algorithms**
Geliştiriciler yetkilendirme **checks**, **store** veya **send** işlemleri için **deprecated algorithms** kullanmamalıdır. Bunlardan bazıları: RC4, MD4, MD5, SHA1... Örneğin şifreleri saklamak için **hashes** kullanılıyorsa, salt ile birlikte brute-force **resistant** hash algoritmaları tercih edilmelidir.
Geliştiriciler yetkilendirme **checks** yapmak, verileri **store** veya **send** etmek için **deprecated algorithms** kullanmamalıdır. Bu algoritmalardan bazıları: RC4, MD4, MD5, SHA1... Örneğin şifreleri saklamak için **hashes** kullanılıyorsa, salt ile birlikte brute-force **resistant** hash'ler kullanılmalıdır.
### Other checks
### Diğer kontroller
- APK'yı **obfuscate** etmek, reverse engineer işini zorlaştırmak için önerilir.
- Uygulama hassassa (ör. banka uygulamaları), mobilin **rooted** olup olmadığını **kendi kontrollerini** yapmalı ve sonuca göre davranmalıdır.
- Uygulama hassassa (ör. banka uygulamaları), bir **emulator** kullanılıp kullanılmadığını kontrol etmelidir.
- Uygulama hassassa (ör. banka uygulamaları), çalıştırmadan önce **kendi integrity'sini kontrol etmeli** ve değiştirilip değiştirilmediğini doğrulamalıdır.
- APK'nın hangi compiler/packer/obfuscator ile derlendiğini kontrol etmek için [**APKiD**](https://github.com/rednaga/APKiD) kullanın
- It's recommended to **obfuscate the APK** to difficult the reverse engineer labour to attackers.
- Eğer uygulama hassassa (ör. bank apps), kendi kontrollerini yapmalı; mobil cihazın **rooted** olup olmadığını kontrol etmeli ve buna göre davranmalıdır.
- Eğer uygulama hassassa (ör. bank apps), bir **emulator** kullanılıp kullanılmadığını kontrol etmelidir.
- Eğer uygulama hassassa (ör. bank apps), çalıştırmadan önce **check it's own integrity before executing** yaparak değiştirip değiştirilmediğini doğrulamalıdır.
- Use [**APKiD**](https://github.com/rednaga/APKiD) to check which compiler/packer/obfuscator was used to build the APK
### React Native Application
Read the following page to learn how to easily access javascript code of React applications:
Aşağıdaki sayfayı okuyun; React uygulamalarının javascript kodlarına nasıl kolayca erişileceğini öğrenebilirsiniz:
{{#ref}}
@ -188,7 +188,7 @@ react-native-application.md
### Xamarin Applications
Read the following page to learn how to easily access C# code of a xamarin applications:
Aşağıdaki sayfayı okuyun; bir xamarin uygulamasının C# kodlarına nasıl kolayca erişileceğini öğrenebilirsiniz:
{{#ref}}
@ -203,11 +203,11 @@ According to this [**blog post**](https://clearbluejar.github.io/posts/desuperpa
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.
With this knowledge, **mariana-trench will review the code and find possible vulnerabilities on it**.
Bu bilgi ile **mariana-trench kodu inceleyip mümkün olan vulnerabilities'leri bulacaktır.**
### Secrets leaked
An application may contain secrets (API keys, passwords, hidden urls, subdomains...) inside of it that you might be able to discover. You could us a tool such as [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
Bir uygulama içinde keşfedebileceğiniz gizli bilgiler (API anahtarları, parolalar, gizli url'ler, subdomain'ler...) olabilir. Şunu kullanabilirsiniz: [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
### Bypass Biometric Authentication
@ -216,14 +216,14 @@ 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`
- **Kod yürütme**: `Runtime.exec(), ProcessBuilder(), native code:system()`
- **SMS Gönderme**: `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)
### **Other tricks**
### **Diğer tricks**
{{#ref}}
@ -253,7 +253,7 @@ Thanks to the ADB connection you can use **Drozer** and **Frida** inside the emu
#### Using an emulator
- [**Android Studio**](https://developer.android.com/studio) (You can create **x86** and **arm** devices, and according to [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**latest x86** versions **support ARM libraries** without needing an slow arm emulator).
- Learn to set it up in this page:
- Kurulumunu bu sayfada öğrenin:
{{#ref}}
@ -264,17 +264,17 @@ avd-android-virtual-device.md
- [**Nox**](https://es.bignox.com) (Free, but it doesn't support Frida or Drozer).
> [!TIP]
> When creating a new emulator on any platform remember that the bigger the screen is, the slower the emulator will run. So select small screens if possible.
> Yeni bir emulator oluştururken ekran ne kadar büyükse emulator o kadar yavaş çalışır. Mümkünse küçük ekranları seçin.
To **install google services** (like AppStore) in Genymotion you need to click on the red marked button of the following image:
Genymotion'da google servislerini (ör. AppStore) yüklemek için aşağıdaki görüntüde kırmızı ile işaretlenmiş butona tıklamanız gerekir:
![](<../../images/image (277).png>)
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).
Ayrıca, **Genymotion içindeki Android VM'in konfigürasyonunda** **Bridge Network mode** seçebileceğinizi unutmayın (bu, araçların bulunduğu farklı bir VM'den Android VM'e bağlanacaksanız faydalı olacaktır).
#### Use a physical device
You need to activate the **debugging** options and it will be cool if you can **root** it:
Geliştirici seçeneklerini aktifleştirmeniz gerekir ve cihazı **root** yapmanız iyi olur:
1. **Settings**.
2. (FromAndroid 8.0) Select **System**.
@ -282,41 +282,49 @@ You need to activate the **debugging** options and it will be cool if you can **
4. Press **Build number** 7 times.
5. Go back and you will find the **Developer options**.
> 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.
> Uygulamayı kurduktan sonra yapmanız gereken ilk şey onu denemek, ne yaptığını ve nasıl çalıştığını araştırmak ve alışmaktır.\
> İlk dinamik analizi MobSF dynamic analysis + pidcat kullanarak yapmanızı öneririm; böylece MobSF birçok ilginç veriyi **captures** ederken uygulamanın nasıl çalıştığını öğrenebileceksiniz.
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
**Logging**
Geliştiriciler **debugging information**'ı public olarak ifşa etmek konusunda dikkatli olmalıdır; aksi halde hassas veri leak'lerine yol açabilir. Uygulama loglarını izlemek ve hassas bilgileri tespit etmek için [**pidcat**](https://github.com/JakeWharton/pidcat) ve `adb logcat` önerilir. **Pidcat**, kullanım kolaylığı ve okunabilirliği nedeniyle tercih edilir.
Geliştiriciler hata ayıklama bilgilerini herkese açık olarak ifşa etme konusunda dikkatli olmalıdır; çünkü bu hassas veri leaks ile sonuçlanabilir. Uygulama loglarını izlemek ve hassas bilgileri tespit etmek için [**pidcat**](https://github.com/JakeWharton/pidcat) ve `adb logcat` araçları önerilir. **Pidcat** kullanışlılığı ve okunabilirliği nedeniyle tercih edilir.
> [!WARNING]
> Note that from **later newer than Android 4.0**, **applications are only able to access their own logs**. So applications cannot access other apps logs.\
> Anyway, it's still recommended to **not log sensitive information**.
> Android 4.0'dan **later newer than Android 4.0** itibaren **applications are only able to access their own logs**. Yani uygulamalar diğer uygulamaların loglarına erişemez.\
> Yine de hassas bilgileri loglamamaya dikkat edilmelidir.
**Copy/Paste Buffer Caching**
Android'in **clipboard-based** framework'ü uygulamalar arasında kopyala-yapıştır fonksiyonunu sağlar, fakat diğer uygulamaların clipboard'a erişebilmesi nedeniyle hassas verilerin ifşa olma riski vardır. Kredi kartı bilgileri gibi hassas bölümler için copy/paste fonksiyonlarını devre dışı bırakmak önemlidir.
Android'in **clipboard-based** çerçevesi uygulamalarda kopyala-yapıştır işlevselliği sağlar, ancak diğer uygulamaların clipboard'a erişebilmesi nedeniyle hassas verilerin açığa çıkma riski vardır. Kredi kartı bilgileri gibi hassas bölümler için copy/paste fonksiyonlarını devre dışı bırakmak önemlidir.
**Crash Logs**
Eğer bir uygulama **crash** olup log kaydederse, bu loglar özellikle uygulama reverse edilemiyorsa saldırganlara yardımcı olabilir. Bu riski azaltmak için crash durumunda log tutmaktan kaçının ve loglar ağ üzerinden gönderilecekse SSL kanalı üzerinden gönderildiğinden emin olun.
Bir uygulama **crash** yaparsa ve loglar kaydedilirse, bu loglar özellikle uygulama tersine mühendislik yapılamıyorsa saldırganlara yardımcı olabilir. Bu riski azaltmak için çökme durumlarında loglama yapmaktan kaçının ve logların ağ üzerinden gönderilmesi gerekiyorsa SSL kanalı üzerinden gönderildiğinden emin olun.
Bir pentester olarak, **bu loglara göz atmayı** deneyin.
As pentester, **try to take a look to these logs**.
**Analytics Data Sent To 3rd Parties**
Uygulamalar sıklıkla Google Adsense gibi servisleri entegre eder; geliştiricinin hatalı uygulaması nedeniyle hassas veriler istemeden üçüncü taraflara **leak** edilebilir. Olası veri leak'lerini tespit etmek için uygulamanın trafiğini intercept etmek ve üçüncü taraflara gönderilen hassas bilgileri kontrol etmek önerilir.
Uygulamalar genellikle Google Adsense gibi servisleri entegre eder; geliştiricinin yanlış uygulaması nedeniyle bu servisler istemeden hassas veri leaks oluşturabilir. Olası veri leaks'leri belirlemek için uygulamanın trafiğini intercept edip üçüncü taraflara gönderilen hassas bilgileri kontrol etmek önerilir.
### SQLite DBs
Çoğu uygulama bilgi saklamak için **internal SQLite databases** kullanır. Pentest sırasında oluşturulan **databaseları**, **tabloların** ve **sütunların** isimlerini ve saklanan tüm **verileri** inceleyin; hassas bilgi bulabilirsiniz (bu bir vulnerability olur).\
Databases 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 **internal SQLite databases** kullanacaktır. Pentest sırasında oluşturulan veritabanlarına, tablo isimlerine, sütunlara ve kaydedilen tüm verilere bakın; çünkü hassas bilgiler (bir zafiyet olacak şekilde) bulabilirsiniz.\
Veritabanları genellikle `/data/data/the.package.name/databases` altında bulunur, örneğin `/data/data/com.mwr.example.sieve/databases`
Eğer database gizli bilgileri saklıyor ve **encrypted** ise ama uygulama içinde **password**'u bulabiliyorsanız bu hâlâ bir **vulnerability**'dir.
Eğer veritabanı gizli bilgi saklıyorsa ve **encrypted** ise fakat uygulama içinde **password**'u bulabiliyorsanız, bu hâlâ bir **vulnerability**'dir.
Tabloları `.tables` ile, tablolardaki sütunları ise `.schema <table_name>` ile enumerate edin.
Tabloları listelemek için `.tables` kullanın ve tablonun sütunlarını görmek için `.schema <table_name>` çalıştırın.
### Drozer (Exploit Activities, Content Providers and Services)
@ -326,38 +334,38 @@ Drozer is s useful tool to **exploit exported activities, exported services and
### Exploiting exported Activities
[**Read this if you want to refresh what is an Android Activity.**](android-applications-basics.md#launcher-activity-and-other-activities)\
Also remember that the code of an activity starts in the **`onCreate`** method.
Ayrıca bir activity'nin kodunun **`onCreate`** metodunda başladığını unutmayın.
**Authorisation bypass**
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.**
Eğer bir Activity **exported** ise, ekranını dışarıdan bir uygulamadan çağırabilirsiniz. Bu nedenle, eğer hassas bilgi içeren bir activity exported ise, erişmek için authentication mekanizmalarını bypass edebilirsiniz.
[**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities)
You can also start an exported activity from adb:
Ayrıca adb'den bir exported activity başlatabilirsiniz:
- 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 activity'de `android:launchMode` olarak _**singleTask/singleInstance**_ kullanımını kötü amaçlı olarak tespit edecektir, ancak [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]
> Bir yetkilendirme bypass'ı her zaman bir zafiyet değildir; bu, bypass'ın nasıl çalıştığına ve hangi bilgilerin açığa çıktığına bağlıdır.
> Bu durumda, bir authorisation bypass her zaman bir zafiyet değildir; bypass'ın nasıl çalıştığına ve hangi bilgilerin açığa çıktığına bağlıdır.
**Hassas bilgi sızıntısı**
Activity'ler ayrıca sonuç döndürebilir. Eğer dışa açılmış (exported) ve korunmasız bir activity bulur, bunun **`setResult`** metodunu çağırdığını ve **hassas bilgi döndürdüğünü** tespit ederseniz, hassas bilgi sızıntısı vardır.
Activities ayrıca sonuç döndürebilir. Eğer export edilmiş ve korunmasız bir activity bulur, **`setResult`** metodunu çağırdığını ve **hassas bilgi döndürdüğünü** görürseniz, bir hassas bilgi sızıntısı vardır.
#### Tapjacking
Eğer tapjacking engellenmemişse, dışa açılmış activity'yi kötüye kullanarak **kullanıcının beklenmeyen işlemler yapmasını** sağlayabilirsiniz. For more info about [**what is Tapjacking follow the link**](#tapjacking).
Eğer Tapjacking engellenmemişse, export edilmiş activity'yi kötüye kullanarak **kullanıcının beklenmedik işlemler yapmasını** sağlayabilirsiniz. Tapjacking hakkında daha fazla bilgi için [**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 provider'lar temel olarak veri paylaşmak için kullanılır. Eğer bir uygulamada erişilebilir content provider'lar varsa, bunlardan hassas verileri çekebilmeniz mümkün olabilir. Ayrıca potansiyel SQL injections ve Path Traversals için test etmek önemlidir çünkü bunlar zafiyete açık olabilir.
Content providers temelde **veri paylaşımı** için kullanılır. Bir uygulamanın erişilebilir content provider'ları varsa, bunlardan **hassas** verileri çıkarabiliyor olabilirsiniz. Ayrıca muhtemel **SQL injections** ve **Path Traversals**'ı test etmek ilginçtir çünkü bunlar zafiyete açık olabilir.
[**Learn how to exploit Content Providers with Drozer.**](drozer-tutorial/index.html#content-providers)
@ -366,7 +374,7 @@ Content provider'lar temel olarak veri paylaşmak için kullanılır. Eğer bir
[**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.
Service temelde veri alabilen, işleyebilen ve (veya) bir yanıt döndürebilen bir bileşendir. 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 bypass etmek gibi amaçlarla dinamik olarak test etmelisiniz.\
Service temelde **veri alabilen**, **işleyebilen** ve **(isterse) bir cevap döndürebilen** bir yapıdır. Eğer bir uygulama bazı servisleri export ediyorsa, ne yaptığını anlamak için **kodu** incelemeli ve gizli bilgileri çıkarmak, yetkilendirme önlemlerini aşmak vb. için dinamik olarak **test** etmelisiniz.\
[**Learn how to exploit Services with Drozer.**](drozer-tutorial/index.html#services)
### **Exploiting Broadcast Receivers**
@ -374,37 +382,37 @@ Service temelde veri alabilen, işleyebilen ve (veya) bir yanıt döndürebilen
[**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 belirli bir mesaj türünü bekler. Alıcının mesajı nasıl işlediğine bağlı olarak zafiyete açık olabilir.\
Bir broadcast receiver belirli bir tür mesajı bekler. Alıcının mesajı nasıl işlemesine bağlı olarak zafiyet ortaya çıkabilir.\
[**Learn how to exploit Broadcast Receivers with Drozer.**](#exploiting-broadcast-receivers)
### **Exploiting Schemes / Deep links**
Deep link'leri manuel olarak, MobSF gibi araçlar veya [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) gibi script'ler kullanarak arayabilirsiniz.\
Bildirilen bir scheme'i adb veya bir browser kullanarak açabilirsiniz:
Deep link'leri elle arayabilirsiniz; MobSF gibi araçlar veya [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) gibi script'ler kullanabilirsiniz.\
Deklar edilmiş bir **scheme**'i **adb** veya bir **browser** ile **açabilirsiniz**:
```bash
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
```
_Paket adını **atlayabileceğinizi** unutmayın; mobil cihaz bu bağlantıyı açması gereken uygulamayı otomatik olarak çağıracaktır._
_Paket adını **omit the package name** bırakabileceğinizi unutmayın; mobil cihaz o linki açması gereken app'i otomatik olarak çağıracaktı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>
```
**Yürütülen kod**
**Code executed**
Uygulamada **yürütülecek kodu** bulmak için, deeplink tarafından çağrılan activity'ye 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 deeplink bulduğunuzda, **URL parametreleri aracılığıyla (ör. parolalar) hassas veri almadığından emin olun**, çünkü başka bir uygulama deeplink'i taklit ederek bu verileri çalabilir!
Her deeplink bulduğunuzda, **URL parametreleri aracılığıyla hassas veri (ör. şifreler) almadığından emin olun**, çünkü başka herhangi bir uygulama **deeplink'i taklit edip bu verileri çalabilir!**
**Parameters in path**
Ayrıca herhangi bir deeplink'in URL path'inin içinde parametre kullanıp kullanmadığını da kontrol etmelisiniz; örneğin: `https://api.example.com/v1/users/{username}`. Bu durumda şu şekilde bir path traversal zorlayabilirsiniz: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
Uygulama içinde doğru endpoint'leri bulursanız, path'in bir kısmı domain adı olarak kullanılıyorsa bir **Open Redirect** (yeniden yönlendirme) oluşturabilir, CSRF token olmadan kullanıcı detaylarını değiştirebiliyorsanız ve vuln endpoint doğru HTTP metodunu kullanıyorsa **account takeover** ve diğer zafiyetlere yol açabilirsiniz. More [info about this here](http://dphoeniixx.com/2020/12/13-2/).
Ayrıca **herhangi bir deeplink'in URL yolunun 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 erişim yapabilirsiniz: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
Doğru endpointleri uygulama içinde bulursanız, path'in bir kısmı domain adı olarak kullanılıyorsa **Open Redirect**, CSRF token olmadan kullanıcı bilgilerini değiştirip doğru HTTP metodunu kullanabiliyorsanız **account takeover** ve başka zafiyetlere yol açabilirsiniz. More [info about this here](http://dphoeniixx.com/2020/12/13-2/).
**More examples**
@ -412,34 +420,34 @@ An [interesting bug bounty report](https://hackerone.com/reports/855618) about l
### Transport Layer Inspection and Verification Failures
- **Certificates are not always inspected properly** by Android applications. Bu uygulamaların uyarıları göz ardı edip self-signed sertifikaları kabul etmesi veya bazı durumlarda HTTP bağlantılarına geri dönmesi yaygındır.
- **Negotiations during the SSL/TLS handshake are sometimes weak**, insecure cipher suite'ler kullanılabiliyor. Bu zayıflık bağlantıyı man-in-the-middle (MITM) saldırılarına açık hale getirir ve saldırganların veriyi çözmesine izin verebilir.
- **Leakage of private information** is a risk when applications authenticate using secure channels but then communicate over non-secure channels for other transactions. Bu yaklaşım, oturum çerezleri veya kullanıcı bilgileri gibi hassas verileri kötü niyetli kişilerin ele geçirmesine karşı koruyamaz.
- **Certificates are not always inspected properly** by Android applications. Bu uygulamaların uyarıları göz ardı edip self-signed sertifikaları kabul etmesi ya da bazı durumlarda HTTP'ye geri dönmesi yaygındır.
- **Negotiations during the SSL/TLS handshake are sometimes weak**, zayıf cipher suite'lerin kullanılması görülebilir. Bu zafiyet, bağlantıyı man-in-the-middle (MITM) saldırılarına açık hale getirir ve saldırganların veriyi deşifre etmesine izin verir.
- **Leakage of private information** uygulamalar güvenli kanallarla kimlik doğrulaması yapıp diğer işlemler için daha sonra güvenli olmayan kanallar üzerinden iletişim kurduğunda risk oluşur. Bu yöntem, oturum çerezleri veya kullanıcı bilgileri gibi hassas verilerin kötü niyetli kişilerce ele geçirilmesini önlemez.
#### Certificate Verification
Biz **certificate verification** üzerinde yoğunlaşacağız. Sunucunun sertifikasının bütünlüğünün doğrulanması güvenliği artırmak için kritik öneme sahiptir. Güvensiz TLS konfigürasyonları ve hassas verinin şifrelenmemiş kanallar üzerinden iletilmesi ciddi riskler oluşturabilir. Sunucu sertifikalarını doğrulama ve zafiyetleri ele alma adımları için [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) kapsamlı rehberlik sunar.
Biz **certificate verification** üzerinde yoğunlaşacağız. Sunucunun sertifika bütünlüğü güvenliği artırmak için doğrulanmalıdır. Bu önemlidir çünkü zayıf TLS yapılandırmaları ve hassas verilerin şifrelenmemiş kanallarda iletilmesi önemli riskler oluşturabilir. Sunucu sertifikalarının doğrulanması ve zafiyetlerin giderilmesi için adım adım rehberlik sağlayan daha fazla bilgi için [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) adresine bakın.
#### SSL Pinning
SSL Pinning, uygulamanın sunucunun 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.
SSL Pinning, uygulamanın sunucunun sertifikasını uygulama içinde saklanan bilinen bir kopyaya karşı 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.
#### Traffic Inspection
HTTP trafiğini incelemek için proxy aracının sertifikasını (örn. Burp) **yüklemeniz** gerekir. Bu sertifika yüklenmezse, şifrelenmiş trafik proxy üzerinden görünmeyebilir. Özel bir CA sertifikasının nasıl yükleneceğine dair rehber için [**click here**](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) **yüklemeniz** gerekir. Bu sertifika yüklenmeden şifreli trafik proxy üzerinden görünmeyebilir. Özel CA sertifikası yükleme rehberi için [**click here**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine) bakın.
API Level 24 ve üzerini hedefleyen uygulamalar, proxy'nin CA sertifikasını kabul etmek için Network Security Config üzerinde değişiklik gerektirir. Bu adım şifrelenmiş trafiği incelemek için kritiktir. Network Security Config'i değiştirme talimatları için [**refer to this tutorial**](make-apk-accept-ca-certificate.md).
Uygulamalar **API Level 24 and above** hedefliyorsa, proxy'nin CA sertifikasını kabul etmek için Network Security Config üzerinde değişiklik yapılması gerekir. Şifreli trafiği incelemek için Network Security Config'i nasıl değiştireceğinize dair talimatlar için [**refer to this tutorial**](make-apk-accept-ca-certificate.md).
Eğer **Flutter** kullanılıyorsa, [**this page**](flutter.md) içindeki talimatları takip etmelisiniz. Çünkü sadece sertifikayı store'a eklemek işe yaramaz; Flutter'ın kendi geçerli CA listesi vardır.
Eğer **Flutter** kullanılıyorsa, [**this page**](flutter.md) içindeki talimatları takip etmeniz gerekir. Sadece sertifikayı store'a eklemek işe yaramaz çünkü Flutter'ın kendi geçerli CA listesi vardır.
#### Static detection of SSL/TLS pinning
Runtime bypass denemelerine başlamadan önce, pinning'in APK içinde nerede uygulandığını hızlıca haritalayın. Statik keşif, hook/patch planlamanıza yardımcı olur ve doğru kod yollarına odaklanmanızı sağlar.
Runtime bypass denemeden önce, pinning'in APK içinde nerede uygulandığını hızlıca haritalandırın. Statik keşif, hook/patch planlamanıza ve doğru kod yollarına odaklanmanıza yardımcı olur.
Tool: SSLPinDetect
- Open-source static-analysis utility that decompiles the APK to Smali (via apktool) and scans for curated regex patterns of SSL/TLS pinning implementations.
- Eşleşen her öğe 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 ve custom kod yollarını kapsar.
- Reports exact file path, line number, and a code snippet for each match.
- Covers common frameworks and custom code paths: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, and Network Security Config XML pins.
Install
- Prereqs: Python >= 3.8, Java on PATH, apktool
@ -456,8 +464,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)
Özel/custom pinning stillerini tespit etmek için signatures'i kullanın veya genişletin. Kendi JSON'unuzu yükleyip ölçekli olarak tarama yapabilirsiniz.
Örnek desen kuralları (JSON)
Özel/özelleştirilmiş pinning stillerini tespit etmek için signatures kullanın veya genişletin. Kendi JSON'unuzu yükleyip büyük ölçekte tarama yapabilirsiniz.
```json
{
"OkHttp Certificate Pinning": [
@ -471,55 +479,55 @@ python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v
]
}
```
Notes and tips
- Büyük uygulamalarda çok iş parçacıklı ve memory-mapped I/O ile hızlı tarama; önceden derlenmiş regex aşırı yükü/yanlış pozitifleri azaltır.
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
- Sonraki önceliklendirme (triage) için tipik tespit hedefleri:
- OkHttp: CertificatePinner kullanım, setCertificatePinner, okhttp3/okhttp paket referansları
- Özel TrustManager'lar: javax.net.ssl.X509TrustManager, checkServerTrusted override'ları
- Özel SSL context'leri: SSLContext.getInstance + SSLContext.init ile özel manager'lar
- res/xml içindeki deklaratif pin'ler, network security config ve manifest referansları
- Eşleşen konumları, dinamik testlerden önce Frida hook'ları, statik yamalar veya konfigürasyon incelemelerini planlamak için kullanın.
- Sonraki triage için tipik tespit hedefleri:
- OkHttp: CertificatePinner usage, setCertificatePinner, okhttp3/okhttp package references
- Custom TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted overrides
- Custom SSL contexts: SSLContext.getInstance + SSLContext.init with custom managers
- Declarative pins in res/xml network security config and manifest references
- Eşleşen konumları Frida hook'ları, statik yamalar veya konfigürasyon incelemeleri planlamak için kullanın; dinamik testten önce bu adımları yapın.
#### SSL Pinning'i Atlatma
#### SSL Pinning'i Atlama
SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu atlatmak gerekebilir. Bu amaçla çeşitli yöntemler mevcuttur:
SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu atlamak gerekebilir. Bu amaçla çeşitli yöntemler mevcuttur:
- [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) ile **apk**'yi otomatik olarak **değiştirip** SSLPinning'i **atlatabilirsiniz**. Bu seçeneğin en büyük avantajı, SSL Pinning'i atlatmak için root'a ihtiyaç duymamanızdır; ancak uygulamayı silip yeniden yüklemeniz gerekir ve bu her zaman işe yaramayabilir.
- Bu korumayı atlatmak için aşağıda bahsedilen **Frida**'yı 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/)
- [**objection**](frida-tutorial/objection-tutorial.md) kullanarak SSL Pinning'i otomatik olarak atlatmayı da deneyebilirsiniz: `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
- Ayrıca **MobSF dynamic analysis** kullanarak SSL Pinning'i otomatik olarak atlatmayı deneyebilirsiniz (aşağıda açıklanmıştır)
- Hâlâ yakalayamadığınız trafik olduğunu düşünüyorsanız, trafiği iptables kullanarak burp'a yönlendirmeyi deneyebilirsiniz. Bu blogu okuyun: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
- [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) ile **apk**'yı otomatik olarak **değiştirip** SSLPinning'i **atlayabilirsiniz**. Bu seçeneğin en büyük artısı, SSL Pinning'i atlamak için root'a ihtiyacınız olmamasıdır; ancak uygulamayı silip yeni sürümünü yeniden yüklemeniz gerekir ve her zaman işe yaramayabilir.
- Bu korumayı atlamak için **Frida** (aşağıda tartışılıyor) 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/)
- [**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 atlamayı** da deneyebilirsiniz (aşağıda açıklanmıştır)
- Eğer hala yakalayamadığınız trafik olduğunu düşünüyorsanız, trafiği iptables ile 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)
#### Yaygın Web Zafiyetleri Arama
#### Yaygın Web Zafiyetlerini Arama
Uygulama içinde yaygın web zafiyetlerini aramak da önemlidir. Bu zafiyetlerin tespiti ve hafifletilmesiyle ilgili detaylar bu özetin kapsamı dışında olup başka kaynaklarda genişçe ele alınmıştır.
Uygulama içinde yaygın web zafiyetlerini de aramak önemlidir. Bu zafiyetleri tespit etme ve hafifletme konusundaki detaylı bilgiler bu özetin kapsamı dışında olup başka kaynaklarda ayrıntılı şekilde ele alınmıştır.
### Frida
[Frida](https://www.frida.re) geliştiriciler, reverse-engineer'lar ve güvenlik araştırmacıları için bir dynamic instrumentation toolkit'tir.\
**Çalışan uygulamaya erişip çalışma zamanında metodları hook'layarak davranışı değiştirebilir, değerleri değiştirebilir, değerleri çıkartabilir, farklı kod çalıştırabilirsiniz...**\
[Frida](https://www.frida.re) geliştiriciler, reverse-engineers ve güvenlik araştırmacıları için dinamik enstrümantasyon toolkit'idir.\
**Çalışan uygulamaya erişip çalışma zamanında yöntemleri hooklayarak davranışı değiştirebilir, değerleri değiştirebilir, değerleri çıkarabilir, farklı kod çalıştırabilirsiniz...**\
Android uygulamalarını pentest etmek istiyorsanız Frida'yı nasıl kullanacağınızı bilmeniz gerekir.
- Learn how to use Frida: [**Frida tutorial**](frida-tutorial/index.html)
- Some "GUI" for actions with Frida: [**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)
- You can find some Awesome Frida scripts here: [**https://codeshare.frida.re/**](https://codeshare.frida.re/)
- Anti-debugging / anti-frida mekanizmalarını atlatmaya çalışın; Frida'yı şu adreste gösterildiği şekilde yükleyerek: [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))
- Frida'yı nasıl kullanacağınızı öğrenin: [**Frida tutorial**](frida-tutorial/index.html)
- Frida ile yapılacak iş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)
- Bazı Awesome Frida script'lerini burada bulabilirsiniz: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
- Frida/anti-debugging mekanizmalarını atlatmaya çalışın; Frida'yı şu kaynakta gösterildiği gibi yükleyerek atlatmayı deneyin: [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 atlatma iş akışı
#### Anti-instrumentation & SSL pinning bypass workflow
{{#ref}}
android-anti-instrumentation-and-ssl-pinning-bypass.md
{{#endref}}
### **Bellek Dökümü - Fridump**
### **Belleği Dökme - Fridump**
Uygulamanın, parolalar veya mnemonikler gibi saklamaması gereken hassas bilgileri bellekte tutup tutmadığını kontrol edin.
Uygulamanın şifreler veya mnemonic'ler gibi saklamaması gereken hassas bilgileri bellekte tutup tutmadığını kontrol edin.
Using [**Fridump3**](https://github.com/rootbsd/fridump3) you can dump the memory of the app with:
[**Fridump3**](https://github.com/rootbsd/fridump3) kullanarak uygulamanın belleğini şu komutla dökebilirsiniz:
```bash
# With PID
python3 fridump3.py -u <PID>
@ -528,120 +536,120 @@ python3 fridump3.py -u <PID>
frida-ps -Uai
python3 fridump3.py -u "<Name>"
```
Bu, belleği ./dump klasörüne dökecek ve orada şöyle bir komutla grep yapabilirsiniz:
Bu, belleği ./dump klasörüne dump edecek; orada şu gibi bir komutla 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 içindeki hassas veriler**
### **Keystore'da hassas veriler**
Android'de Keystore hassas verileri saklamak için en iyi yerdir, ancak yeterli ayrıcalığa sahip olunursa yine de **erişmek mümkün**. Uygulamalar burada genellikle **hassas verileri düz metin olarak** depolama eğiliminde olduğundan, pentests bunu kontrol etmelidir; root kullanıcı veya cihaza fiziksel erişimi olan kişiler bu verileri çalabilir.
Android'de Keystore hassas verileri saklamak için en iyi yerdir, ancak yeterli ayrıcalıkla yine de **erişmek mümkün** olabilir. Uygulamalar genellikle burada **hassas verileri açık metin olarak** saklama eğiliminde olduğundan, pentests bunu kontrol etmelidir; kök kullanıcı veya cihaza fiziksel erişimi olan birisi bu verileri çalabilir.
Bir uygulama veriyi keystore'a depolamış olsa bile, veriler şifrelenmiş olmalıdır.
Bir uygulama keystore'a veri depolasa bile, veriler şifrelenmiş olmalıdır.
keystore içindeki verilere erişmek için bu Frida script'ini kullanabilirsiniz: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
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)
```bash
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
```
### **Fingerprint/Biometrics Bypass**
Aşağıdaki Frida script'ini kullanarak, Android uygulamalarının **belirli hassas alanları korumak için** uyguluyor olabileceği **bypass fingerprint authentication** işlemini atlamak mümkün olabilir:
Aşağıdaki Frida script'ini kullanarak, Android uygulamalarının **belirli hassas alanları korumak** amacıyla uyguluyor olabileceği **bypass fingerprint authentication** işlemi mümkün olabilir:
```bash
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
```
### **Arka Plan Görüntüleri**
Bir uygulamayı arka plana attığınızda, Android uygulamanın **anlık görüntüsünü** saklar; böylece uygulama öne getirildiğinde, uygulamanın kendisinden önce bu görüntüyü yüklemeye başlayarak uygulamanın daha hızlı yüklenmiş gibi görünmesini sağlar.
Bir uygulamayı arka plana attığınızda, Android uygulamanın bir **snapshot'ını** saklar; böylece uygulama tekrar ön plana geldiğinde, uygulama yüklenmeden önce görüntüyü yükleyerek uygulamanın daha hızlıılmış gibi görünmesini sağlar.
Ancak bu anlık görüntü **hassas bilgi** içeriyorsa, anlık görüntüye erişimi olan biri **o bilgiyi çalabilir** (erişim için root gerektiğini unutmayın).
Ancak, eğer bu snapshot içinde **hassas bilgiler** bulunuyorsa, snapshot'a erişimi olan biri bu bilgileri **çalabilir** (erişim için root gerektiğini unutmayın).
Anlık görüntüler genellikle şu dizinde saklanır: **`/data/system_ce/0/snapshots`**
Bu snapshot'lar genellikle şu konumda saklanır: **`/data/system_ce/0/snapshots`**
Android, layout parametresi olarak **FLAG_SECURE'i ayarlayarak ekran görüntüsü alınmasını engelleme** yolunu sağlar. Bu bayrağı kullanarak, pencere içeriği güvenli kabul edilir; böylece ekran görüntülerinde görünmesi veya güvenli olmayan ekranlarda görüntülenmesi engellenir.
Android, layout parametresi olarak **FLAG_SECURE'i ayarlayarak screenshot alınmasını engelleme** imkanı sağlar. Bu flag kullanıldığında, pencere içeriği güvenli olarak değerlendirilir; böylece içerik screenshot'larda 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**
### **Android Uygulama Analizörü**
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)
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 sıklıkla bu Intents ile ilgilenen ve `startActivity(...)` veya `sendBroadcast(...)` gibi yöntemlere ileten activities, services ve broadcast receivers gibi proxy bileşenler oluştururlar; bu durum riskli olabilir.
Geliştiriciler sıklıkla bu Intents'i işleyen ve `startActivity(...)` veya `sendBroadcast(...)` gibi metodlara ileten activity, service ve broadcast receiver gibi proxy bileşenleri oluştururlar; bu durum riskli olabilir.
Tehlike, saldırganların bu Intents'i yanlış yönlendirerek non-exported app components'i tetiklemesine veya hassas content providers'a erişmesine izin vermekte yatar. Örnek olarak `WebView` bileşeninin URL'leri `Intent.parseUri(...)` ile `Intent` nesnelerine dönüştürmesi ve sonra bunları çalıştırması, potansiyel olarak kötü amaçlı Intent enjeksiyonlarına yol açabilir.
Tehlike, saldırganların bu Intents'i yanlış yönlendirerek non-exported uygulama bileşenlerini tetiklemesine veya hassas content providers'a erişimine izin verilmesinde yatar. Örnek olarak, `WebView` bileşeninin URL'leri `Intent.parseUri(...)` ile `Intent` nesnelerine dönüştürmesi ve ardından bunları çalıştırması, kötü amaçlı Intent enjeksiyonlarına yol açabilir.
### Essential Takeaways
### Temel Çıkarımlar
- **Intent Injection** web'deki Open Redirect sorununa benzer.
- Sömürüler, `Intent` nesnelerinin extras olarak geçirilmesini ve bunların güvenli olmayan işlemleri yürütmek üzere yönlendirilmesini içerir.
- Bu, non-exported components ve content providers'ı saldırganlara açabilir.
- `WebView`ın URL'den `Intent` dönüşümü istenmeyen işlemleri kolaylaştırabilir.
- **Intent Injection** webdeki Open Redirect sorununa benzer.
- Sömürüler, `Intent` nesnelerinin extras olarak geçirilmesini ve bu şekilde tehlikeli işlemlere yönlendirilmesini içerir.
- Bu, non-exported bileşenleri ve content providers'ı saldırganlara maruz bırakabilir.
- `WebView`in URL'den `Intent`'e dönüşümü istenmeyen eylemleri kolaylaştırabilir.
### Android Client Side Injections and others
Muhtemelen bu tür zafiyetleri Web'den biliyorsunuzdur. Bir Android uygulamasında bu zafiyetlere özellikle dikkat etmelisiniz:
Muhtemelen bu tür ıklıkları Web'den biliyorsunuzdur. Android uygulamalarında bu tür açıklıklara karşı özellikle dikkatli olmanız gerekir:
- **SQL Injection:** Dynamic sorgularla veya Content-Providers ile uğraşı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ışı). [More info here](webview-attacks.md#javascript-enabled).
- **Local File Inclusion:** WebView'ların dosya sistemine erişiminin kapalı olması gerekir (varsayılan olarak açık) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled).
- **Eternal cookies**: Birçok durumda Android uygulama oturumu sonlandırdığında cookie iptal edilmez veya hatta diske kaydedilmiş olabilir.
- **SQL Injection:** Dinamik sorgular veya Content-Providers ile çalışırken parameterized queries 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ışı). [More info here](webview-attacks.md#javascript-enabled).
- **Local File Inclusion:** WebView'ların dosya sistemine erişimi kapalı olmalıdır (varsayılan olarak açık) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled).
- **Eternal cookies:** Birçok durumda Android uygulaması oturumu kapattığında cookie iptal edilmez veya diske kaydedilebilir.
- [**Secure Flag** in cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
---
## Automatic Analysis
## Otomatik Analiz
### [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)
**Static analysis**
**Statik analiz**
![](<../../images/image (866).png>)
**Vulnerability assessment of the application** hoş bir web tabanlı frontend kullanılarak yapılır. Ayrıca dinamik analiz de gerçekleştirebilirsiniz (ancak ortamı hazırlamanız gerekir).
Uygulamanın zafiyet değerlendirmesi hoş bir web tabanlı frontend üzerinden 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
```
MobSF'in **Android**(apk)**, IOS**(ipa) **and Windows**(apx) applications (_Windows applications must be analyzed from a MobSF installed in a Windows host_).\
Ayrıca, bir **Android** veya bir **IOS** uygulamasının kaynak koduyla bir **ZIP** dosyası oluşturursanız (uygulamanın kök klasörüne gidin, her şeyi seçin ve bir ZIPfile oluşturun), MobSF bunu da analiz edebilir.
Notice that MobSF can analyse **Android**(apk)**, IOS**(ipa) **and Windows**(apx) applications (_Windows applications must be analyzed from a MobSF installed in a Windows host_).\
Also, if you create a **ZIP** file with the source code if an **Android** or an **IOS** app (go to the root folder of the application, select everything and create a ZIPfile), it will be able to analyse it also.
MobSF ayrıca analizleri **diff/Compare** etmenize ve **VirusTotal** ile entegre olmanıza olanak tanır (API anahtarınızı _MobSF/settings.py_ içinde ayarlamanız ve etkinleştirmeniz gerekir: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). `VT_UPLOAD`'ı `False` yaparsanız, dosya yerine **hash** **upload** edilecektir.
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 Destekli Dinamik Analiz
### Assisted Dynamic analysis with MobSF
**MobSF** ayrıca **Android** için dinamik analiz konusunda çok faydalı olabilir, ancak bu durumda host'unuza MobSF ve **genymotion** kurmanız gerekir (VM veya Docker çalışmaz). _Note: You need to **start first a VM in genymotion** and **then MobSF.**_\
**MobSF dynamic analyser** şunları yapabilir:
**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:
- **Dump application data** (URLs, logs, clipboard, screenshots made by you, screenshots made by "**Exported Activity Tester**", emails, SQLite databases, XML files, and other created files). Tüm bunlar otomatik olarak yapılır; sadece ekran görüntüleri için, ekran görüntüsü almak istediğinizde butona basmanız veya tüm exported aktivitelerin ekran görüntülerini almak için "**Exported Activity Tester**"a basmanız gerekir.
- **Dump application data** (URLs, logs, clipboard, screenshots made by you, screenshots made by "**Exported Activity Tester**", emails, SQLite databases, XML files, and other created files). Bu öğelerin tamamı otomatik olarak toplanır; ekran görüntüleri hariç, bir ekran görüntüsü almak istediğinizde manuel olarak basmanız gerekir veya tüm exported aktivitelerin ekran görüntülerini elde etmek için "**Exported Activity Tester**" ı kullanmanız gerekir.
- Capture **HTTPS traffic**
- Use **Frida** to obtain **runtime** **information**
Android **versions > 5** sürümlerinden itibaren, **otomatik olarak Frida'yı başlatır** ve trafiği **capture** etmek için global **proxy** ayarlarını yapılandırır. Yalnızca test edilen uygulamanın trafiğini yakalar.
From android **versions > 5**, it will **automatically start Frida** and will set global **proxy** settings to **capture** traffic. It will only capture traffic from the tested application.
**Frida**
Varsayılan olarak, bazı Frida Scripts kullanarak **bypass SSL pinning**, **root detection** ve **debugger detection** yapar ve ilginç API'leri **monitor** eder.\
MobSF ayrıca **invoke exported activities** yapabilir, bunların **screenshots**'larını alabilir ve rapor için **save** edebilir.
By default, it will also use some Frida Scripts to **bypass SSL pinning**, **root detection** and **debugger detection** and to **monitor interesting APIs**.\
MobSF can also **invoke exported activities**, grab **screenshots** of them and **save** them for the report.
Dinamik testi **start** etmek için yeşil butona basın: "**Start Instrumentation**". Frida script'leri tarafından üretilen logları görmek için "**Frida Live Logs**" a basın ve hooked metodlara yapılan tüm invokasyonları, geçirilen argümanları ve dönen değerleri görmek için "**Live API Monitor**" a basın (bu, "Start Instrumentation" a bastıktan sonra görünecektir).\
MobSF ayrıca kendi **Frida scripts**'lerinizi yüklemenize izin verir (Frida script'lerinizin sonuçlarını MobSF'ye göndermek için `send()` fonksiyonunu kullanın). Ayrıca yükleyebileceğiniz **several pre-written scripts** içerir (daha fazlasını `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` dizinine ekleyebilirsiniz), sadece **select them**, "**Load**" a basın ve "**Start Instrumentation**" a basın (bu scriptlerin loglarını "**Frida Live Logs**" içinde görebileceksiniz).
To **start** the dynamic testing press the green bottom: "**Start Instrumentation**". Press the "**Frida Live Logs**" to see the logs generated by the Frida scripts and "**Live API Monitor**" to see all the invocation to hooked methods, arguments passed and returned values (this will appear after pressing "Start Instrumentation").\
MobSF also allows you to load your own **Frida scripts** (to send the results of your Frida scripts to MobSF use the function `send()`). It also has **several pre-written scripts** you can load (you can add more in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), just **select them**, press "**Load**" and press "**Start Instrumentation**" (you will be able to see the logs of that scripts inside "**Frida Live Logs**").
![](<../../images/image (419).png>)
Ayrıca bazı yardımcı Frida fonksiyonları vardır:
Moreover, you have some Auxiliary Frida functionalities:
- **Enumerate Loaded Classes**: Yüklenen tüm sınıfları yazdırır
- **Capture Strings**: Uygulamayı kullanırken tüm capture string'leri yazdırır (çok gürültülü)
- **Capture String Comparisons**: Çok faydalı olabilir. Karşılaştırılan iki string'i gösterir ve sonucun True veya False olduğunu bildirir.
- **Enumerate Loaded Classes**: Yüklü tüm sınıfları yazdırır.
- **Capture Strings**: Uygulamayı kullanırken yakalanan tüm stringleri yazdırır (çok gürültülü, çok fazla çıktı üretir).
- **Capture String Comparisons**: Çok kullanışlı olabilir. Karşılaştırılan 2 stringi ve sonucun True mu yoksa False mı olduğunu gösterir.
- **Enumerate Class Methods**: Sınıf adını girin (ör. "java.io.File") ve sınıfın tüm metodlarını yazdırır.
- **Search Class Pattern**: Desene göre sınıfları arar
- **Trace Class Methods**: Bir sınıfın tamamını **Trace** eder (sınıftaki tüm metodların giriş ve çıkışlarını görür). Unutmayın, varsayılan olarak MobSF birkaç ilginç Android API metodunu trace eder.
- **Search Class Pattern**: Sınıfları pattern ile arar.
- **Trace Class Methods**: Bir sınıfı tamamen **trace** eder (sınıftaki tüm metodların giriş ve çıkışlarını görür). Unutmayın ki varsayılan olarak MobSF bir dizi ilginç Android Api metodunu trace eder.
Yardımcı modülü seçtikten sonra "**Start Intrumentation**" a basmanız gerekir ve tüm çıktıları "**Frida Live Logs**" içinde göreceksiniz.
Once you have selected the auxiliary module you want to use you need to press "**Start Intrumentation**" and you will see all the outputs in "**Frida Live Logs**".
**Shell**
MobSF ayrıca dynamic analysis sayfasının alt kısmında bazı **adb** komutları, **MobSF commands**, ve yaygın **shell** **commands** içeren bir shell sunar. Bazı ilginç komutlar:
Mobsf ayrıca dynamic analysis sayfasının altında bazı **adb** komutları, **MobSF** komutları ve yaygın **shell** komutları içeren bir shell de sunar. Bazı ilginç komutlar:
```bash
help
shell ls
@ -650,34 +658,34 @@ exported_activities
services
receivers
```
**HTTP araçları**
**HTTP tools**
HTTP trafiği yakalandığında, yakalanan trafiğin kaba bir görünümünü "**HTTP(S) Traffic**" alt kısmında veya daha hoş bir görünümünü "**Start HTTPTools**" yeşil butonunda görebilirsiniz. İkinci seçenekten, **send** the **captured requests** to **proxies** like Burp or Owasp ZAP yapabilirsiniz.\
Bunu yapmak için, _power on Burp -->_ _turn off Intercept --> in MobSB HTTPTools select the request_ --> basın "**Send to Fuzzer**" --> _select the proxy address_ ([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**" tuşuna basarak **fuzz http requests** yapabilir ve zayıflıkları arayabilirsiniz.
Once you finish the dynamic analysis with MobSF you can press on "**Start Web API Fuzzer**" to **fuzz http requests** an look for vulnerabilities.
> [!TIP]
> MobSF ile dinamik analiz yaptıktan sonra proxy ayarları yanlış yapılandırılmış olabilir ve GUI üzerinden düzeltemeyebilirsiniz. Proxy ayarlarını şu komutla düzeltebilirsiniz:
> After performing a dynamic analysis with MobSF the proxy settings me be misconfigured and you won't be able to fix them from the GUI. You can fix the proxy settings by doing:
>
> ```
> adb shell settings put global http_proxy :0
> ```
### Inspeckage ile Yardımlı Dinamik Analiz
### Assisted Dynamic Analysis with Inspeckage
Aracı [**Inspeckage**](https://github.com/ac-pm/Inspeckage) adresinden edinebilirsiniz.\
Bu araç, **dynamic analysis** yaparken uygulamada **nelerin olduğunu** anlamanız için bazı **Hooks** kullanır.
You can get the tool from [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\
This tool with use some **Hooks** to let you know **what is happening in the application** while you perform a **dynamic analysis**.
### [Yaazhini](https://www.vegabird.com/yaazhini/)
Bu, GUI ile static analysis yapmak için harika bir araçtır.
This is a **great tool to perform static analysis with a GUI**
![](<../../images/image (741).png>)
### [Qark](https://github.com/linkedin/qark)
Bu araç, hem **source code** hem de **packaged APKs** içinde çeşitli **security related Android application vulnerabilities** aramak için tasarlanmıştır. Araç ayrıca bulunan bazı zayıflıkları (Exposed activities, intents, tapjacking...) kullanmak için dağıtılabilir bir **"Proof-of-Concept" deployable APK** ve **ADB commands** oluşturma yeteneğine sahiptir. Drozer'da olduğu gibi, test cihazını rootlamaya gerek yoktur.
This tool is designed to look for several **security related Android application vulnerabilities**, either in **source code** or **packaged APKs**. The tool is also **capable of creating a "Proof-of-Concept" deployable APK** and **ADB commands**, to exploit some of the found vulnerabilities (Exposed activities, intents, tapjacking...). As with Drozer, there is no need to root the test device.
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
@ -686,10 +694,10 @@ qark --java path/to/specific/java/file.java
```
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
- Kolay referans için tüm çıkarılan dosyaları gösterir.
- APK dosyalarını otomatik olarak Java ve Smali formatına decompile eder.
- AndroidManifest.xml dosyasını yaygın güvenlik açıkları ve davranışlar açısından analiz eder.
- Yaygın güvenlik açıkları ve davranışlar için statik kaynak kodu analizi yapar.
- Kolay başvuru için tüm çıkarılan dosyaları gösterir
- APK dosyalarını otomatik olarak Java ve Smali formatına decompile eder
- AndroidManifest.xml'i yaygın zafiyetler ve davranış açısından analiz eder
- Yaygın zafiyetler ve davranışlar için statik kaynak kodu analizi yapar
- Cihaz bilgileri
- ve daha fazlası
```bash
@ -697,9 +705,9 @@ 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ı güvenlik açıklarıısından analiz eder. Bunu, APK'leri dekomprese ederek ve bu açıkları tespit etmek için bir dizi kural uygulayarak yapar.
SUPER, Windows, MacOS X ve Linux'ta kullanılabilen bir komut satırı uygulamasıdır; _.apk_ dosyalarını güvenlik açıklarıısından analiz eder. Bunu APK'ları açarak ve bu güvenlik açıklarını tespit etmek için bir dizi kural uygulayarak yapar.
Tüm kurallar `rules.json` dosyasında toplanmıştır ve her şirket veya test uzmanı ihtiyaçlarına göre kendi kurallarını oluşturabilir.
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.
En son ikili dosyaları [download page](https://superanalyzer.rocks/download.html) üzerinden indirin.
```
@ -709,9 +717,9 @@ 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ştiricilere, bugbounty hunters ve ethical hackers'e yardımcı olan bir **crossplatform** araçtır.
StaCoAn, mobil uygulamalarda [static code analysis] yapan geliştiriciler ile bugbounty hunters ve ethical hackers için faydalı olan **çok platformlu** bir araçtır.
Konsept, mobil uygulama dosyanızı (.apk veya .ipa dosyası) StaCoAn uygulamasına sürükleyip bırakmanız ve bunun sizin için görsel ve taşınabilir bir rapor oluşturmasıdır. Ayarları ve wordlists'i düzenleyerek özelleştirilmiş bir deneyim elde edebilirsiniz.
Konsept, mobil uygulama dosyanızı (.apk veya .ipa dosyası) StaCoAn uygulamasına sürükleyip bırakmanız ve uygulamanın sizin için görsel ve taşınabilir bir rapor oluşturmasıdır. Ayarları ve wordlists'i düzenleyerek özelleştirilmiş bir deneyim elde edebilirsiniz.
İndir[ latest release](https://github.com/vincentcox/StaCoAn/releases):
```
@ -719,7 +727,7 @@ Konsept, mobil uygulama dosyanızı (.apk veya .ipa dosyası) StaCoAn uygulamas
```
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
AndroBugs Framework, geliştiriciler veya hackers için Android uygulamalarındaki potansiyel güvenlik açıklarını bulmaya yardımcı olan bir Android zafiyet analiz sistemidir.\
AndroBugs Framework, geliştiricilerin veya hackers'ın Android uygulamalarındaki potansiyel güvenlik açıklarını bulmasına yardımcı olan bir analiz sistemidir.\
[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
```
python androbugs.py -f [APK file]
@ -727,11 +735,11 @@ androbugs.exe -f [APK file]
```
### [Androwarn](https://github.com/maaaaz/androwarn)
**Androwarn** Android uygulamalarının potansiyel kötü amaçlı davranışlarını tespit etmek ve kullanıcıyı uyarmak amacıyla geliştirilmiş bir araçtır.
**Androwarn** Android uygulamalarının oluşturabileceği potansiyel kötü amaçlı davranışları tespit edip kullanıcıyı uyarmayı amaçlayan bir araçtır.
Tespit, uygulamanın Dalvik bytecode'unun **Smali** olarak temsil edildiği **static analysis** ile [`androguard`](https://github.com/androguard/androguard) kütüphanesi kullanılarak gerçekleştirilir.
Tespit, uygulamanın Dalvik bytecode'unun **Smali** olarak temsil edildiği ve [`androguard`](https://github.com/androguard/androguard) kütüphanesi ile **static analysis** yapıldığı yöntemle gerçekleştirilir.
Bu araç, **kötü uygulamaların ortak davranışlarını** şu durumlarda arar: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution...
Bu araç şu tür **"kötü" uygulamaların ortak davranışları** arar: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution...
```
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
```
@ -739,84 +747,85 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
![](<../../images/image (595).png>)
**MARA** is a **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework. It is a tool that puts together commonly used mobile application reverse engineering and analysis tools, to assist in testing mobile applications against the OWASP mobile security threats. Its objective is to make this task easier and friendlier to mobile application developers and security professionals.
**MARA** is a **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework. Mobil uygulamaların OWASP mobile security tehditlerine karşı test edilmesine yardımcı olmak için yaygın kullanılan mobile application 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.
It is able to:
- Extract Java and Smali code using different tools
- Analyze APKs using: [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)
- Extract private information from the APK using regexps.
- Analyze the Manifest.
- Analyze found domains using: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) and [whatweb](https://github.com/urbanadventurer/WhatWeb)
- Deobfuscate APK via [apk-deguard.com](http://www.apk-deguard.com)
- Farklı araçlar kullanarak Java ve Smali kodu çıkarır
- APK'ları analiz eder using: [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 çıkarır
- Manifest'i analiz eder
- Bulunan domainleri analiz eder using: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) and [whatweb](https://github.com/urbanadventurer/WhatWeb)
- APK'yı [apk-deguard.com](http://www.apk-deguard.com) üzerinden deobfuscate eder
### Koodous
Malware tespiti için faydalı: [https://koodous.com/](https://koodous.com/)
Malware tespiti için kullanışlı: [https://koodous.com/](https://koodous.com/)
## Kodun Obfuskasyonu/Deobfuskasyonu
## Obfuscating/Deobfuscating code
Kodu obfuskasyon için kullandığınız servis ve yapılandırmaya bağlı olarak, gizli bilgiler obfuskelenmiş olabilir ya da olmayabilir.
Kodu obfuscate etmek için kullandığınız servis ve yapılandırmaya bağlı olarak, gizli bilgiler obfuscated olabilir ya da olmayabilir.
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
From [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** is an open source command-line tool that shrinks, optimizes and obfuscates Java code. It is able to optimize bytecode as well as detect and remove unused instructions. ProGuard is free software and is distributed under the GNU General Public License, version 2.
From [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** is an open source command-line tool that shrinks, optimizes and obfuscates Java code. Bytecode'u optimize edebilir ve kullanılmayan talimatları tespit edip kaldırabilir. ProGuard ücretsiz bir yazılımdır ve GNU General Public License, version 2 altında dağıtılmaktadır.
ProGuard is distributed as part of the Android SDK and runs when building the application in release mode.
ProGuard, Android SDK'nın bir parçası olarak dağıtılır ve uygulama release modunda derlenirken çalışır.
### [DexGuard](https://www.guardsquare.com/dexguard)
Find a step-by-step guide to deobfuscate the apk in [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
DexGuard ile ilgili adım adım bir deobfuscation rehberini şu adreste bulabilirsiniz: [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
(From that guide) Last time we checked, the Dexguard mode of operation was:
(O rehbere göre) Son kontrol ettiğimizde, Dexguard'in çalışma modu şu şekildeydi:
- load a resource as an InputStream;
- feed the result to a class inheriting from FilterInputStream to decrypt it;
- do some useless obfuscation to waste a few minutes of time from a reverser;
- feed the decrypted result to a ZipInputStream to get a DEX file;
- finally load the resulting DEX as a Resource using the `loadDex` method.
- bir kaynağı InputStream olarak yükle;
- sonucu decrypt etmek için FilterInputStream'ten türeyen bir sınıfa ver;
- reverser'ın birkaç dakikasını boşa harcamak için bazı anlamsız obfuskasyonlar yap;
- decrypted sonucu bir ZipInputStream'e vererek bir DEX dosyası elde et;
- sonunda oluşan DEX'i `loadDex` metodu kullanarak bir Resource olarak yükle.
### [DeGuard](http://apk-deguard.com)
**DeGuard reverses the process of obfuscation performed by Android obfuscation tools. This enables numerous security analyses, including code inspection and predicting libraries.**
**DeGuard, Android obfuscation araçları tarafından uygulanan obfuskasyon sürecini tersine çevirir. Bu, kod incelemesi ve kütüphane tahmini dahil olmak üzere birçok güvenlik analizini mümkün kılar.**
Platformlarına obfuskelenmiş bir APK yükleyebilirsiniz.
Obfuscated bir APK'yı 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 uygulamalarındaki potansiyel güvenlik açıklarını bulmak ve Android uygulama kodlarını deobfuscate etmek için bir LLM aracıdır. Google'ın Gemini public API'sini kullanır.
### [Simplify](https://github.com/CalebFenton/simplify)
It is a **generic android deobfuscator.** Simplify **virtually executes an app** to understand its behavior and then **tries to optimize the code** so it behaves identically but is easier for a human to understand. Each optimization type is simple and generic, so it doesn't matter what the specific type of obfuscation is used.
Bu, generic bir android deobfuscator'dur. Simplify, bir uygulamayı virtually executes ederek davranışını anlar ve sonra kodu optimize etmeye çalışır; böylece davranış aynı kalır ama insan tarafından anlaşılması daha kolay olur. Her optimizasyon türü basit ve genel olduğundan, hangi spesifik obfuscation türünün kullanıldığı önemli değildir.
### [APKiD](https://github.com/rednaga/APKiD)
APKiD gives you information about **how an APK was made**. It identifies many **compilers**, **packers**, **obfuscators**, and other weird stuff. It's [_PEiD_](https://www.aldeid.com/wiki/PEiD) for Android.
APKiD size bir **APK'ın nasıl yapıldığı** hakkında bilgi verir. Birçok **compilers**, **packers**, **obfuscators** 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 özelleştirilmiş obfuskasyonu tersine çevirme ile ilgili bazı püf noktalarını öğrenin](manual-deobfuscation.md)
## Labs
### [Androl4b](https://github.com/sh4hin/Androl4b)
AndroL4b, ubuntu-mate tabanlı bir Android güvenlik sanal makinesidir ve reverse engineering ile 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.
AndroL4b, ubuntu-mate tabanlı bir Android security virtual machine'dir; reverse engineering ve malware analysis için farklı güvenlik meraklıları ve araştırmacılardan gelen en güncel framework, eğitim ve lab koleksiyonlarını içerir.
## Referanslar
## 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 quick course
- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Android hızlı kursu
- [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)
- [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)
## Denenecekler
## 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)

View File

@ -2,30 +2,30 @@
{{#include ../../banners/hacktricks-training.md}}
This page provides a practical workflow to regain dynamic analysis against Android apps that detect/rootblock instrumentation or enforce TLS pinning. It focuses on fast triage, common detections, and copypasteable hooks/tactics to bypass them without repacking when possible.
Bu sayfa, instrumentation tespit eden/rootblock yapan veya TLS pinning uygulayan Android uygulamalarına karşı dinamik analizi yeniden kazanmak için pratik bir iş akışı sağlar. Hızlı triyaj, yaygın tespitler ve mümkün olduğunda repacking gerektirmeden kopyalayapıştır yapılabilecek hooks/tactics ile bypass yöntemlerine odaklanır.
## Detection Surface (what apps check)
- Root kontrolleri: su binary, Magisk paths, getprop values, common root packages
- Frida/debugger kontrolleri (Java): Debug.isDebuggerConnected(), ActivityManager.getRunningAppProcesses(), getRunningServices(), scanning /proc, classpath, loaded libs
- Root kontrolleri: su binary, Magisk paths, getprop values, yaygın root paketleri
- Frida/debugger kontrolleri (Java): Debug.isDebuggerConnected(), ActivityManager.getRunningAppProcesses(), getRunningServices(), /proc tarama, classpath, yüklenmiş libs
- Native antidebug: ptrace(), syscalls, antiattach, breakpoints, inline hooks
- Erken init kontrolleri: Application.onCreate() veya process start hooks that crash if instrumentation is present
- Early init kontrolleri: Application.onCreate() veya process start hook'ları; instrumentation varsa crash olur
- TLS pinning: custom TrustManager/HostnameVerifier, OkHttp CertificatePinner, Conscrypt pinning, native pins
## Step 1 — Quick win: hide root with Magisk DenyList
- Enable Zygisk in Magisk
- Enable DenyList, add the target package
- Reboot and retest
- Magisk'te Zygisk'i etkinleştir
- DenyList'i etkinleştir, hedef paketi ekle
- Yeniden başlat ve tekrar test et
Many apps only look for obvious indicators (su/Magisk paths/getprop). DenyList often neutralizes naive checks.
Birçok uygulama sadece bariz göstergelere bakar (su/Magisk paths/getprop). DenyList genellikle naif kontrolleri nötralize eder.
References:
- Magisk (Zygisk & DenyList): https://github.com/topjohnwu/Magisk
## Step 2 — 30second Frida Codeshare tests
Try common dropin scripts before deep diving:
Derinlemesine incelemeden önce yaygın dropin script'leri dene:
- anti-root-bypass.js
- anti-frida-detection.js
@ -35,24 +35,41 @@ Example:
```bash
frida -U -f com.example.app -l anti-frida-detection.js
```
Bunlar tipik olarak Java root/debug checks, process/service scans ve native ptrace()'i stub'lar. Hafif korunan uygulamalarda kullanışlıdır; sertleştirilmiş hedefler özelleştirilmiş hooks gerektirebilir.
Genellikle Java root/debug kontrollerini, process/service taramalarını ve native ptrace() çağrılarını stub'lar. Az korumalı uygulamalarda kullanışlıdır; sertleştirilmiş hedefler için özelleştirilmiş hooks gerekebilir.
- Codeshare: https://codeshare.frida.re/
## Adım 3 — Başlatma-zamanı dedektörlerini geç bağlanarak atlatma
## Medusa (Frida framework) ile Otomatikleştirme
Pek çok tespit yalnızca process spawn/onCreate() sırasında çalışır. Spawntime injection (-f) veya gadgets yakalanır; UI yüklendikten sonra bağlanmak atlatmayı sağlayabilir.
Medusa, SSL unpinning, root/emulator detection bypass, HTTP comms logging, crypto key interception ve daha fazlası için 90+ hazır modül sağlar.
```bash
git clone https://github.com/Ch0pin/medusa
cd medusa
pip install -r requirements.txt
python medusa.py
# Example interactive workflow
show categories
use http_communications/multiple_unpinner
use root_detection/universal_root_detection_bypass
run com.target.app
```
İpucu: Medusa, custom hooks yazmadan önce hızlı kazanımlar için harikadır. Ayrıca modules seçip kendi scripts'lerinizle birleştirebilirsiniz.
## Step 3 — Bypass init-time detectors by attaching late
Çoğu tespit yalnızca process spawn/onCreate() sırasında çalışır. Spawntime injection (-f) veya gadgets yakalanır; UI yüklendikten sonra attach etmek atlatmayı sağlayabilir.
```bash
# Launch the app normally (launcher/adb), wait for UI, then attach
frida -U -n com.example.app
# Or with Objection to attach to running process
aobjection --gadget com.example.app explore # if using gadget
```
Bu işe yararsa, oturumu kararlı tutun ve map ile stub kontrollerine geçin.
Eğer bu işe yararsa, oturumu kararlı tutun ve map ile stub kontrollerine devam edin.
## Adım 4 — Jadx ile tespit mantığını haritalandırma ve string hunting
## Adım 4 — Jadx ile tespit mantığını eşleme ve dize araması
Jadx'te statik triage anahtar kelimeleri:
Jadx'te statik triaj anahtar kelimeleri:
- "frida", "gum", "root", "magisk", "ptrace", "su", "getprop", "debugger"
Tipik Java kalıpları:
@ -61,16 +78,16 @@ public boolean isFridaDetected() {
return getRunningServices().contains("frida");
}
```
Gözden geçirilecek/hooklanacak ortak API'ler:
İncelenecek/hooklanacak yaygın API'ler:
- android.os.Debug.isDebuggerConnected
- android.app.ActivityManager.getRunningAppProcesses / getRunningServices
- java.lang.System.loadLibrary / System.load (native bridge)
- java.lang.Runtime.exec / ProcessBuilder (probing commands)
- android.os.SystemProperties.get (root/emulator heuristics)
## Adım 5 — Frida ile çalışma zamanında stub oluşturma (Java)
## Adım 5 — Runtime stubbing with Frida (Java)
Repacking yapmadan özel guard'ları güvenli değerler döndürecek şekilde override edin:
Custom guard'ları repacking yapmadan güvenli değerler döndürecek şekilde override edin:
```js
Java.perform(() => {
const Checks = Java.use('com.example.security.Checks');
@ -85,7 +102,7 @@ const AM = Java.use('android.app.ActivityManager');
AM.getRunningAppProcesses.implementation = function () { return java.util.Collections.emptyList(); };
});
```
Erken çökmeleri mi değerlendiriyorsunuz? Uygulama ölmeden hemen önce classes'ları dump edin, muhtemel detection namespaces'lerini tespit etmek için:
Erken çökme triage'ı mı? Uygulama ölmeden hemen önce dump classes alarak muhtemel detection namespaces'i tespit edin:
```js
Java.perform(() => {
Java.enumerateLoadedClasses({
@ -94,7 +111,15 @@ onComplete: () => console.log('Done')
});
});
```
Yürütme akışını doğrulamak için şüpheli yöntemleri Loglayın ve etkisiz hale getirin:
// Quick root detection stub example (adapt to target package/class names)
Java.perform(() => {
try {
const RootChecker = Java.use('com.target.security.RootCheck');
RootChecker.isDeviceRooted.implementation = function () { return false; };
} catch (e) {}
});
Yürütme akışını doğrulamak için şüpheli metotları loglayın ve devre dışı bırakın:
```js
Java.perform(() => {
const Det = Java.use('com.example.security.DetectionManager');
@ -104,9 +129,49 @@ return false;
};
});
```
## Step 6 — Java hooks başarısız olduğunda JNI/native izini takip edin
## Bypass emulator/VM detection (Java stubs)
Native loader'ları ve detection init'i bulmak için JNI entry point'lerini izleyin:
Yaygın heuristikler: Build.FINGERPRINT/MODEL/MANUFACTURER/HARDWARE içinde generic/goldfish/ranchu/sdk geçmesi; QEMU artifaktları gibi /dev/qemu_pipe, /dev/socket/qemud; varsayılan MAC 02:00:00:00:00:00; 10.0.2.x NAT; telefoni/sensörlerin eksik olması.
Build alanlarının hızlı taklidi:
```js
Java.perform(function(){
var Build = Java.use('android.os.Build');
Build.MODEL.value = 'Pixel 7 Pro';
Build.MANUFACTURER.value = 'Google';
Build.BRAND.value = 'google';
Build.FINGERPRINT.value = 'google/panther/panther:14/UP1A.231105.003/1234567:user/release-keys';
});
```
Dosya varlığı kontrolleri ve tanımlayıcılar (TelephonyManager.getDeviceId/SubscriberId, WifiInfo.getMacAddress, SensorManager.getSensorList) için gerçekçi değerler döndürecek stub'larla tamamlayın.
## SSL pinning bypass quick hook (Java)
Özel TrustManagers'ı nötralize edin ve izin veren SSL context'lerini zorlayın:
```js
Java.perform(function(){
var X509TrustManager = Java.use('javax.net.ssl.X509TrustManager');
var SSLContext = Java.use('javax.net.ssl.SSLContext');
// No-op validations
X509TrustManager.checkClientTrusted.implementation = function(){ };
X509TrustManager.checkServerTrusted.implementation = function(){ };
// Force permissive TrustManagers
var TrustManagers = [ X509TrustManager.$new() ];
var SSLContextInit = SSLContext.init.overload('[Ljavax.net.ssl.KeyManager;','[Ljavax.net.ssl.TrustManager;','java.security.SecureRandom');
SSLContextInit.implementation = function(km, tm, sr){
return SSLContextInit.call(this, km, TrustManagers, sr);
};
});
```
Notlar
- OkHttp için genişletin: gerektiğinde okhttp3.CertificatePinner ve HostnameVerifier'ı hook edin veya CodeShare'den universal unpinning script'i kullanın.
- Çalıştırma örneği: `frida -U -f com.target.app -l ssl-bypass.js --no-pause`
## Step 6 — Java hook'ları başarısız olduğunda JNI/native izini takip edin
JNI giriş noktalarını native loader'ları ve detection init'i bulmak için izleyin:
```bash
frida-trace -n com.example.app -i "JNI_OnLoad"
```
@ -121,7 +186,7 @@ Etkileşimli/native reversing:
- Ghidra: https://ghidra-sre.org/
- r2frida: https://github.com/nowsecure/r2frida
Örnek: ptrace'i etkisiz hale getirerek libc içindeki basit antidebug'i atlatma:
Örnek: libc içindeki basit antidebug'i yenmek için ptrace'i devre dışı bırakma:
```js
const ptrace = Module.findExportByName(null, 'ptrace');
if (ptrace) {
@ -137,18 +202,20 @@ reversing-native-libraries.md
## Adım 7 — Objection patching (embed gadget / strip basics)
Eğer runtime hooks yerine repacking'i tercih ediyorsanız, şunu deneyin:
Repacking'i runtime hooks yerine tercih ediyorsanız, şunu deneyin:
```bash
objection patchapk --source app.apk
```
Notlar:
- Gerektirir apktool; yapı sorunlarını önlemek için resmi kılavuzdan güncel bir sürüm kullanıldığından emin olun: https://apktool.org/docs/install
- Gadget injection, root olmadan instrumentation sağlar, ancak daha güçlü inittime checks tarafından yine de tespit edilebilir.
- Requires apktool; ensure a current version from the official guide to avoid build issues: https://apktool.org/docs/install
- Gadget injection, root olmadan instrumentation sağlar ama daha güçlü inittime kontrolleri tarafından yine de tespit edilebilir.
İsteğe bağlı olarak, Zygisk ortamlarında daha güçlü root gizleme için LSPosed modülleri ve Shamiko ekleyin ve alt süreçleri kapsayacak şekilde DenyList'i düzenleyin.
Referanslar:
- Objection: https://github.com/sensepost/objection
## Adım 8 — Fallback: TLS pinning'i ağ görünürlüğü için düzeltin
## Step 8 — Fallback: Patch TLS pinning for network visibility
Eğer instrumentation engellenmişse, pinning'i statik olarak kaldırarak trafiği yine de inceleyebilirsiniz:
```bash
@ -156,7 +223,7 @@ apk-mitm app.apk
# Then install the patched APK and proxy via Burp/mitmproxy
```
- Araç: https://github.com/shroudedcode/apk-mitm
- Ağ yapılandırması CAtrust hileleri (ve Android 7+ user CA trust) için bkz:
- Ağ yapılandırması CAtrust tricks (ve Android 7+ user CA trust) için bakınız:
{{#ref}}
make-apk-accept-ca-certificate.md
@ -166,7 +233,7 @@ make-apk-accept-ca-certificate.md
install-burp-certificate.md
{{#endref}}
## Pratik komut özeti
## Kullanışlı komut hızlı başvuru
```bash
# List processes and attach
frida-ps -Uai
@ -186,12 +253,12 @@ apk-mitm app.apk
```
## İpuçları ve uyarılar
- Uygulamalar başlatılırken çöküyorsa, spawning yerine attaching'i geç bağlamayı tercih edin
- Bazı detections kritik akışlarda (örn., payment, auth) yeniden çalıştırılır — navigation sırasında hooks'ları aktif tutun
- Statik ve dinamiki birlikte kullanın: Jadx'te string hunt yaparak sınıfların ön listesini oluşturun; sonra runtime'da doğrulamak için methods'ları hook'layın
- Güçlendirilmiş uygulamalar packers ve native TLS pinning kullanabilir — native kodu tersine çevirmek gerekebilir
- Uygulamalar launch sırasında çöküyorsa spawn yapmak yerine geç attach etmeyi tercih edin
- Bazı detections kritik flows'ta (ör. payment, auth) yeniden çalıştırılır — navigation sırasında hooks'ları aktif tutun
- Static ve dynamic'i karıştırın: Jadx'te string hunt yaparak sınıfları kısa listeleyin; sonra runtime'da doğrulamak için hook methods kullanın
- Hardened uygulamalar packers ve native TLS pinning kullanabilir — reverse native code yapmanız gerekebilir
## Referanslar
## References
- [Reversing Android Apps: Bypassing Detection Like a Pro](https://www.kayssel.com/newsletter/issue-12/)
- [Frida Codeshare](https://codeshare.frida.re/)
@ -202,5 +269,7 @@ apk-mitm app.apk
- [r2frida](https://github.com/nowsecure/r2frida)
- [Apktool install guide](https://apktool.org/docs/install)
- [Magisk](https://github.com/topjohnwu/Magisk)
- [Medusa (Android Frida framework)](https://github.com/Ch0pin/medusa)
- [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)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,23 +2,23 @@
{{#include ../../banners/hacktricks-training.md}}
Bu içeriği oluştururken yardım eden [**@offsecjay**](https://twitter.com/offsecjay)'e çok teşekkür ederim.
Bu içeriği oluştururken yardım ettiği için [**@offsecjay**](https://twitter.com/offsecjay)'a çok teşekkürler.
## Nedir
Android Studio, **APK'ları test etmek için kullanabileceğiniz Android sanal makinelerini çalıştırmanıza olanak tanır**. Bunları kullanmak için şunlara ihtiyacınız olacak:
Android Studio, **APK'leri test etmek için kullanabileceğiniz Android sanal makinelerini çalıştırmanıza olanak tanır**. Bunları kullanmak için şunlara ihtiyacınız olacak:
- **Android SDK araçları** - [Buradan indirin](https://developer.android.com/studio/releases/sdk-tools).
- Veya **Android Studio** (Android SDK araçları ile) - [Buradan indirin](https://developer.android.com/studio).
- The **Android SDK tools** - [Download here](https://developer.android.com/studio/releases/sdk-tools).
- Or **Android Studio** (with Android SDK tools) - [Download here](https://developer.android.com/studio).
Windows'ta (benim durumumda) **Android Studio'yu kurduktan sonra** **SDK Araçları** şurada yüklüydü: `C:\Users\<UserName>\AppData\Local\Android\Sdk\tools`
Windows'ta (benim durumumda) **Android Studio'yu kurduktan sonra** **SDK Tools'un kurulu olduğu yer**: `C:\Users\<UserName>\AppData\Local\Android\Sdk\tools`
Mac'te **SDK araçlarını indirebilir** ve PATH'te bulundurabilirsiniz:
mac üzerinde **SDK tools'u indirebilir** ve PATH'e eklemek için şu komutu çalıştırabilirsiniz:
```bash
brew tap homebrew/cask
brew install --cask android-sdk
```
Ya da **Android Studio GUI** üzerinden, [https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a) adresinde belirtildiği gibi, bunları `~/Library/Android/sdk/cmdline-tools/latest/bin/` ve `~/Library/Android/sdk/platform-tools/` ve `~/Library/Android/sdk/emulator/` dizinlerine kuracaktır.
Veya **Android Studio GUI** üzerinden, [https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a) adresinde belirtildiği gibi; bu, bunları `~/Library/Android/sdk/cmdline-tools/latest/bin/` ve `~/Library/Android/sdk/platform-tools/` ve `~/Library/Android/sdk/emulator/` konumlarına kuracaktır
Java sorunları için:
```java
@ -26,9 +26,9 @@ export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
```
## GUI
### Sanal Makineyi Hazırlayın
### Sanal Makineyi Hazırlama
Eğer Android Studio'yu kurduysanız, ana proje görünümünü açabilir ve şuraya erişebilirsiniz: _**Tools**_ --> _**AVD Manager.**_
Android Studio'yu yüklediyseniz, ana proje görünümünü açıp şuradan erişebilirsiniz: _**Tools**_ --> _**AVD Manager.**_
<div align="center" data-full-width="false">
@ -36,38 +36,38 @@ Eğer Android Studio'yu kurduysanız, ana proje görünümünü açabilir ve şu
</div>
Sonra, _**Create Virtual Device**_ üzerine tıklayın.
Sonra _**Create Virtual Device**_ öğesine tıklayın
<figure><img src="../../images/image (1143).png" alt="" width="188"><figcaption></figcaption></figure>
_**kullanmak istediğiniz telefonu seçin**_ ve _**Next.**_ üzerine tıklayın.
_Kullanmak istediğiniz telefonu **seçin**_ ve _**Next.**_ öğesine tıklayın.
> [!WARNING]
> Eğer Play Store yüklü bir telefona ihtiyacınız varsa, üzerinde Play Store simgesi olan birini seçin!
> Eğer Play Store yüklü bir telefona ihtiyacınız varsa Play Store simgesine sahip olanı seçin!
>
> <img src="../../images/image (1144).png" alt="" data-size="original">
Mevcut görünümde, telefonun çalıştıracağı **Android imajını seçip indirebileceksiniz**:
Bu görünümde telefonun çalıştıracağı **Android image**'i seçip indirebileceksiniz:
<figure><img src="../../images/image (1145).png" alt="" width="375"><figcaption></figcaption></figure>
Bunu seçin ve eğer indirilmemişse, isminin yanındaki _**Download**_ simgesine tıklayın (**şimdi imajın indirilmesini bekleyin).**\
İmaj indirildikten sonra, sadece **`Next`** ve **`Finish`** seçin.
Dolayısıyla onu seçin; eğer indirilmemişse isimlerin yanındaki _**Download**_ simgesine tıklayın (**görüntü indirilene kadar bekleyin**).\
Görüntü indirildikten sonra sadece **`Next`** ve **`Finish`**'i seçin.
Sanal makine oluşturulacak. Artık **AVD yöneticisine her eriştiğinizde mevcut olacak**.
Sanal makine oluşturulacak. Artık **AVD Manager'a eriştiğinizde her zaman burada görünecek**.
### Sanal Makineyi Çalıştırın
### Sanal Makineyi Çalıştırma
**Çalıştırmak** için sadece _**Start button**_ üzerine basın.
Çalıştırmak için sadece _**Start button**_'a basın.
![](<../../images/image (518).png>)
## Komut Satırı Aracı
> [!WARNING]
> macOS için `avdmanager` aracını `/Users/<username>/Library/Android/sdk/tools/bin/avdmanager` ve `emulator`'ı `/Users/<username>/Library/Android/sdk/emulator/emulator` içinde bulabilirsiniz, eğer bunları kurduysanız.
> macOS için `avdmanager` aracını `/Users/<username>/Library/Android/sdk/tools/bin/avdmanager` ve `emulator`'ü `/Users/<username>/Library/Android/sdk/emulator/emulator` içinde bulabilirsiniz, eğer bunlar yüklüyse.
Öncelikle **hangi telefonu kullanmak istediğinize karar vermeniz gerekiyor**, mümkün olan telefonların listesini görmek için:
Öncelikle **hangi telefonu kullanmak istediğinize karar vermeniz** gerekiyor; kullanılabilir telefonların listesini görmek için şu komutu çalıştırın:
```
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list device
@ -95,16 +95,16 @@ Name: Nexus 10
OEM : Google
[...]
```
Cihazınızı kullanmak için adını belirledikten sonra, **bu cihazda hangi Android görüntüsünü çalıştırmak istediğinize karar vermeniz gerekir.**\
Kullanmak istediğiniz cihazın adını belirledikten sonra, bu cihazda hangi Android görüntüsünü çalıştırmak istediğinize **karar vermelisiniz.**\
Tüm seçenekleri `sdkmanager` kullanarak listeleyebilirsiniz:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
```
Ve **indir**mek istediğin birini (veya hepsini) şunlarla:
Ve kullanmak istediğiniz birini (veya hepsini) **download** ile indirin:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64"
```
İstediğiniz Android görüntüsünü indirdikten sonra, **indirilen tüm Android görüntülerini listeleyebilirsiniz**:
Kullanmak istediğiniz Android imajını indirdikten sonra, **indirilen tüm Android imajlarını listeleyebilirsiniz** şu komutla:
```
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list target
----------
@ -120,12 +120,12 @@ Type: Platform
API level: 29
Revision: 4
```
Bu anda kullanmak istediğiniz cihazı seçtiniz ve Android imajını indirdiniz, bu yüzden **sanallaştırma makinesini oluşturabilirsiniz**:
Şu anda kullanmak istediğiniz cihazı belirlediniz ve Android imajını indirdiniz, bu yüzden **sanal makineyi şu şekilde oluşturabilirsiniz**:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat -v create avd -k "system-images;android-28;google_apis;x86_64" -n "AVD9" -d "Nexus 5X"
```
Son komutta **_AVD9_** adında bir VM oluşturdum, **cihaz** "_Nexus 5X_" ve **Android imajı** "_system-images;android-28;google_apis;x86_64_" kullanarak.\
Artık oluşturduğunuz **sanallaştırılmış makineleri** listeleyebilirsiniz:
Son komutta **adlı bir VM oluşturdum** "_AVD9_" ve **cihaz** olarak "_Nexus 5X_" ile **Android image** olarak "_system-images;android-28;google_apis;x86_64_" kullandım.\
Şimdi oluşturduğunuz **sanal makineleri listeleyebilirsiniz** şu komutla:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list avd
@ -143,73 +143,128 @@ Error: Google pixel_2 no longer exists as a device
### Sanal Makineyi Çalıştır
> [!WARNING]
> macOS için `avdmanager` aracını `/Users/<username>/Library/Android/sdk/tools/bin/avdmanager` ve `emulator``/Users/<username>/Library/Android/sdk/emulator/emulator` içinde bulabilirsiniz, eğer bunları yüklediyseniz.
> macOS için, eğer yüklüyse `avdmanager` aracını `/Users/<username>/Library/Android/sdk/tools/bin/avdmanager` ve `emulator` uygulamasını `/Users/<username>/Library/Android/sdk/emulator/emulator` konumlarında bulabilirsiniz.
Oluşturulan sanal makineleri nasıl listeleyeceğinizi zaten gördük, ancak **bunları ayrıca şu şekilde de listeleyebilirsiniz**:
Oluşturulan sanal makineleri nasıl listeleyebileceğimizi zaten gördük, ancak **şunu kullanarak da listeleyebilirsiniz**:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
AVD9
Pixel_2_API_27
```
Herhangi bir **sanallaştırma makinesini çalıştırabilirsiniz**:
Oluşturulan herhangi bir sanal makineyi **basitçe çalıştırabilirsiniz** şu komutla:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName"
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9"
```
Daha gelişmiş seçenekler kullanarak bir sanal makine çalıştırabilirsiniz, örneğin:
Veya daha gelişmiş seçenekleri kullanarak şu gibi bir sanal makine çalıştırabilirsiniz:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
```
### Komut satırı seçenekleri
Ancak, sanal makineyi başlatmak için kullanabileceğiniz **birçok farklı komut satırı yararlı seçeneği** vardır. Aşağıda bazı ilginç seçenekleri bulabilirsiniz, ancak [**tam listeyi burada bulabilirsiniz**](https://developer.android.com/studio/run/emulator-commandline)
Ancak sanal makineyi başlatmak için kullanabileceğiniz **birçok farklı komut satırı yararlı seçeneği** vardır. Aşağıda bazı ilginç seçenekleri bulabilirsiniz; tam listeyi [**find a complete list here**](https://developer.android.com/studio/run/emulator-commandline) adresinde bulabilirsiniz.
**Başlat**
**Boot**
- `-snapshot name` : VM anlık görüntüsünü başlat
- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : Kaydedilen tüm anlık görüntüleri listele
- `-snapshot name` : VM snapshot'ını başlat
- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : Tüm kayıtlı snapshot'ları listeler
****
**Network**
- `-dns-server 192.0.2.0, 192.0.2.255` : VM'ye virgülle ayrılmış DNS sunucularını belirtmeye izin verir.
- **`-http-proxy 192.168.1.12:8080`** : Kullanılacak bir HTTP proxy belirtmeye izin verir (Burp kullanarak trafiği yakalamak için çok yararlıdır)
- Proxy ayarları bir sebepten dolayı çalışmıyorsa, bunları dahili olarak veya "Super Proxy" veya "ProxyDroid" gibi bir uygulama kullanarak yapılandırmayı deneyin.
- `-netdelay 200` : Ağ gecikmesi emülasyonunu milisaniye cinsinden ayarlayın.
- `-port 5556` : Konsol ve adb için kullanılan TCP port numarasını ayarlayın.
- `-ports 5556,5559` : Konsol ve adb için kullanılan TCP portlarını ayarlayın.
- **`-tcpdump /path/dumpfile.cap`** : Tüm trafiği bir dosyada yakalayın
- `-dns-server 192.0.2.0, 192.0.2.255` : VM için DNS sunucularını virgülle ayrılmış şekilde belirtmeye izin verir.
- **`-http-proxy 192.168.1.12:8080`** : Kullanılacak bir HTTP proxy'sini belirtmeye izin verir (trafiği Burp ile yakalamak için çok kullanışlı).
- If the proxy settings aren't working for some reason, try to configure them internally or using an pplication like "Super Proxy" or "ProxyDroid".
- `-netdelay 200` : Ağ gecikmesi emülasyonunu milisaniye cinsinden ayarlar.
- `-port 5556` : Konsol ve adb için kullanılan TCP port numarasını ayarlar.
- `-ports 5556,5559` : Konsol ve adb için kullanılan TCP portlarını ayarlar.
- **`-tcpdump /path/dumpfile.cap`** : Tüm trafiği bir dosyaya yakalar
**Sistem**
**System**
- `-selinux {disabled|permissive}` : Linux işletim sisteminde Güvenlik Geliştirilmiş Linux güvenlik modülünü devre dışı veya izin verici modda ayarlayın.
- `-timezone Europe/Paris` : Sanal cihaz için zaman dilimini ayarlayın
- `-screen {touch(default)|multi-touch|o-touch}` : Emüle edilmiş dokunmatik ekran modunu ayarlayın.
- **`-writable-system`** : Emülasyon oturumunuz sırasında yazılabilir bir sistem görüntüsü elde etmek için bu seçeneği kullanın. Ayrıca `adb root; adb remount` komutunu çalıştırmanız gerekecek. Bu, sistemde yeni bir sertifika yüklemek için çok yararlıdır.
- `-selinux {disabled|permissive}` : Security-Enhanced Linux güvenlik modülünü Linux işletim sisteminde disabled veya permissive moduna ayarlar.
- `-timezone Europe/Paris` : Sanal cihaz için zaman dilimini ayarlar
- `-screen {touch(default)|multi-touch|o-touch}` : Emüle edilmiş dokunmatik ekran modunu ayarlar.
- **`-writable-system`** : Bu seçeneği emülasyon oturumu sırasında yazılabilir bir sistem imajı kullanmak için kullanın. Ayrıca `adb root; adb remount` komutlarını çalıştırmanız gerekir. Sisteme yeni bir sertifika yüklemek için çok faydalıdır.
## Play Store cihazını rootlama
## Linux CLI setup (SDK/AVD quickstart)
Eğer Play Store ile bir cihaz indirdiyseniz, doğrudan root almanız mümkün olmayacak ve bu hata mesajını alacaksınız.
Resmi CLI araçları, Android Studio olmadan hızlı, hata ayıklanabilir emülatörler oluşturmayı kolaylaştırır.
```bash
# Directory layout
mkdir -p ~/Android/cmdline-tools/latest
# Download commandline tools (Linux)
wget https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip -O /tmp/cmdline-tools.zip
unzip /tmp/cmdline-tools.zip -d ~/Android/cmdline-tools/latest
rm /tmp/cmdline-tools.zip
# Env vars (add to ~/.bashrc or ~/.zshrc)
export ANDROID_HOME=$HOME/Android
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH
# Install core SDK components
sdkmanager --install "platform-tools" "emulator"
# Install a debuggable x86_64 system image (Android 11 / API 30)
sdkmanager --install "system-images;android-30;google_apis;x86_64"
# Create an AVD and run it with a writable /system & snapshot name
avdmanager create avd -n PixelRootX86 -k "system-images;android-30;google_apis;x86_64" -d "pixel"
emulator -avd PixelRootX86 -writable-system -snapshot PixelRootX86_snap
# Verify root (debuggable images allow `adb root`)
adb root
adb shell whoami # expect: root
```
Notlar
- Sistem image varyantları: google_apis (hata ayıklanabilir, `adb root`'a izin verir), google_apis_playstore (rootlenemez), aosp/default (hafif).
- Build türleri: userdebug genellikle debug-özellikli image'larda `adb root` sağlar. Play Store image'ları üretim derlemeleridir ve root'u engeller.
- x86_64 hostlarda, tam sistem ARM64 emülasyonu API 28+ itibarıyla desteklenmiyor. Android 11+ için birçok ARM-only uygulamayı hızlı çalıştırmak adına uygulama başına ARM-to-x86 çevirisini içeren Google APIs/Play image'larını kullanın.
### CLI'den Anlık Görüntüler
```bash
# Save a clean snapshot from the running emulator
adb -s emulator-5554 emu avd snapshot save my_clean_setup
# Boot from a named snapshot (if it exists)
emulator -avd PixelRootX86 -writable-system -snapshot my_clean_setup
```
## ARM→x86 binary translation (Android 11+)
Android 11+ üzerinde Google APIs ve Play Store imajları, sistemin geri kalanını yerel x86/x86_64 tutarken her süreç için ARM uygulama ikili dosyalarını çevirebilir. Bu, masaüstünde birçok yalnızca ARM uygulamasını test etmek için genellikle yeterince hızlıdır.
> İpucu: pentests sırasında Google APIs x86/x86_64 imajlarını tercih edin. Play imajları kullanışlıdır ama `adb root`'u engeller; sadece Play services'e özellikle ihtiyaç duyduğunuzda ve root eksikliğini kabul ettiğinizde kullanın.
## Rooting a Play Store device
Eğer Play Store ile bir cihaz indirdiyseniz doğrudan root elde edemeyecek ve şu hata mesajını alacaksınız
```
$ adb root
adbd cannot run as root in production builds
```
Using [rootAVD](https://github.com/newbit1/rootAVD) with [Magisk](https://github.com/topjohnwu/Magisk) ile bunu kökledim (örneğin [**bu video**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **veya** [**şu video**](https://www.youtube.com/watch?v=qQicUW0svB8) takip edebilirsiniz).
[rootAVD](https://github.com/newbit1/rootAVD) ile [Magisk](https://github.com/topjohnwu/Magisk) kullanarak cihazı root yapabildim (örneğin [**this video**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **veya** [**this one**](https://www.youtube.com/watch?v=qQicUW0svB8)).
## Burp Sertifikasını Yükle
## Burp Sertifikasını Yükleme
Özel bir CA sertifikasını nasıl yükleyeceğinizi öğrenmek için aşağıdaki sayfayı kontrol edin:
Özel bir CA sertifikası nasıl yüklenir öğrenmek için aşağıdaki sayfayı inceleyin:
{{#ref}}
install-burp-certificate.md
{{#endref}}
## Güzel AVD Seçenekleri
## AVD İçin Faydalı Seçenekler
### Anlık Görüntü Al
### Anlık Görüntü Alma
VM'nin anlık görüntüsünü istediğiniz zaman **GUI'yi kullanarak** alabilirsiniz:
VM'nin anlık görüntüsünü istediğiniz zaman almak için **GUI'yi kullanabilirsiniz**:
![](<../../images/image (234).png>)
## Kaynaklar
- [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)
- [Android Emulator command line](https://developer.android.com/studio/run/emulator-commandline)
- [Run ARM apps on the Android Emulator (x86 translation)](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,54 +1,107 @@
# Frida Eğitimi
# Frida Kılavuzu
{{#include ../../../banners/hacktricks-training.md}}
## Kurulum
**frida tools**'ı yükleyin:
Yükleyin **frida tools**:
```bash
pip install frida-tools
pip install frida
```
**Android'a indirip kurun** **frida server** ([En son sürümü indirin](https://github.com/frida/frida/releases)).\
Root modunda adb'yi yeniden başlatmak, ona bağlanmak, frida-server'ı yüklemek, yürütme izinleri vermek ve arka planda çalıştırmak için tek satırlık komut:
**İndir ve kur** Android'e **frida server** ([Download the latest release](https://github.com/frida/frida/releases)).\
adb'yi root mode'da yeniden başlatmak, ona bağlanmak, frida-server'ı yüklemek, exec permissions verip arka planda çalıştırmak için tek satırlık komut:
```bash
adb root; adb connect localhost:6000; sleep 1; adb push frida-server /data/local/tmp/; adb shell "chmod 755 /data/local/tmp/frida-server"; adb shell "/data/local/tmp/frida-server &"
```
**Çalışıp çalışmadığını** **kontrol et**:
**Kontrol et** çalışıyor mu:
```bash
frida-ps -U #List packages and processes
frida-ps -U | grep -i <part_of_the_package_name> #Get all the package name
```
## Frida server vs. Gadget (root vs. no-root)
Frida ile Android uygulamalarını enstrümante etmenin iki yaygın yolu:
- Frida server (rooted devices): Cihaz üzerine push edip çalıştırdığınız, herhangi bir sürece attach olmanıza izin veren native bir daemon.
- Frida Gadget (no root): Frida'yı APK içine shared library olarak paketleyip, hedef süreç içinde otomatik yükler.
Frida server (rooted)
```bash
# Download the matching frida-server binary for your device's arch
# https://github.com/frida/frida/releases
adb root
adb push frida-server-<ver>-android-<arch> /data/local/tmp/frida-server
adb shell chmod 755 /data/local/tmp/frida-server
adb shell /data/local/tmp/frida-server & # run at boot via init/magisk if desired
# From host, list processes and attach
frida-ps -Uai
frida -U -n com.example.app
```
Frida Gadget (no-root)
1) APK'yıın, gadget .so ve konfigürasyonu ekleyin:
- libfrida-gadget.so'u lib/<abi>/ içine koyun (örn., lib/arm64-v8a/)
- assets/frida-gadget.config dosyasını script yükleme ayarlarınızla oluşturun
Örnek frida-gadget.config
```json
{
"interaction": { "type": "script", "path": "/sdcard/ssl-bypass.js" },
"runtime": { "logFile": "/sdcard/frida-gadget.log" }
}
```
2) gadget'i erken başlatılacak şekilde referanslayın/yükleyin:
- En kolay: Application.onCreate() içinde System.loadLibrary("frida-gadget") çağıran küçük bir Java stub'u ekleyin veya zaten mevcut olan native lib yüklemeyi kullanın.
3) APK'yı yeniden paketleyin ve imzalayın, sonra yükleyin:
```bash
apktool d app.apk -o app_m
# ... add gadget .so and config ...
apktool b app_m -o app_gadget.apk
uber-apk-signer -a app_gadget.apk -o out_signed
adb install -r out_signed/app_gadget-aligned-debugSigned.apk
```
4) Host'tan gadget işlemine bağlanın:
```bash
frida-ps -Uai
frida -U -n com.example.app
```
Notlar
- Gadget bazı korumalar tarafından tespit edilebilir; adları/yolları gizli tutun ve gerekirse geç/koşullu olarak yükleyin.
- Sertleştirilmiş uygulamalarda, rooted testing'i server + late attach ile tercih edin veya Magisk/Zygisk gizleme ile birleştirin.
## Eğitimler
### [Eğitim 1](frida-tutorial-1.md)
### [Tutorial 1](frida-tutorial-1.md)
**Kaynak**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\
**APK**: [https://github.com/t0thkr1s/frida-demo/releases](https://github.com/t0thkr1s/frida-demo/releases)\
**Kaynak Kodu**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo)
**Kaynak Kod**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo)
**Okumak için [bağlantıyı takip edin](frida-tutorial-1.md).**
**Oku için [link to read it](frida-tutorial-1.md).**
### [Eğitim 2](frida-tutorial-2.md)
### [Tutorial 2](frida-tutorial-2.md)
**Kaynak**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Bölümler 2, 3 & 4)\
**APK'lar ve Kaynak kod**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples)
**Kaynak**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Parts 2, 3 & 4)\
**APKs ve Kaynak kodu**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples)
**Okumak için [bağlantıyı takip edin.](frida-tutorial-2.md)**
**Oku için[ link to read it.](frida-tutorial-2.md)**
### [Eğitim 3](owaspuncrackable-1.md)
### [Tutorial 3](owaspuncrackable-1.md)
**Kaynak**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\
**APK**: [https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk](https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk)
**Okumak için [bağlantıyı takip edin](owaspuncrackable-1.md).**
**Oku için [link to read it](owaspuncrackable-1.md).**
**Daha fazla Harika Frida scriptini burada bulabilirsiniz:** [**https://codeshare.frida.re/**](https://codeshare.frida.re)
**Daha fazla Awesome Frida script'ini burada bulabilirsiniz:** [**https://codeshare.frida.re/**](https://codeshare.frida.re)
## Hızlı Örnekler
### Komut satırından Frida çağırma
### Frida'yı komut satırından çağırma
```bash
frida-ps -U
@ -61,7 +114,7 @@ frida -U --no-pause -l disableRoot.js -f owasp.mstg.uncrackable1
#frozen so that the instrumentation can occur, and the automatically
#continue execution with our modified code.
```
### Temel Python Scripti
### Temel Python Betiği
```python
import frida, sys
@ -72,9 +125,9 @@ print('[ * ] Running Frida Demo application')
script.load()
sys.stdin.read()
```
### Parametre olmadan fonksiyonları yakalama
### Hooking: parametresiz fonksiyonlar
Sınıf `sg.vantagepoint.a.c`'nin `a()` fonksiyonunu yakalayın
Hook `sg.vantagepoint.a.c` sınıfının `a()` fonksiyonunu
```javascript
Java.perform(function () {
; rootcheck1.a.overload().implementation = function() {
@ -84,14 +137,14 @@ return false;
};
});
```
Java `exit()`'i yakala
Hook java `exit()`
```javascript
var sysexit = Java.use("java.lang.System")
sysexit.exit.overload("int").implementation = function (var_0) {
send("java.lang.System.exit(I)V // We avoid exiting the application :)")
}
```
MainActivity `.onStart()` ve `.onCreate()`'i Hook'layın
Hook MainActivity `.onStart()` & `.onCreate()`
```javascript
var mainactivity = Java.use("sg.vantagepoint.uncrackable1.MainActivity")
mainactivity.onStart.overload().implementation = function () {
@ -105,7 +158,7 @@ send("MainActivity.onCreate() HIT!!!")
var ret = this.onCreate.overload("android.os.Bundle").call(this, var_0)
}
```
Android `.onCreate()`'i Hook'la
Hook android `.onCreate()`
```javascript
var activity = Java.use("android.app.Activity")
activity.onCreate.overload("android.os.Bundle").implementation = function (
@ -115,9 +168,9 @@ send("Activity HIT!!!")
var ret = this.onCreate.overload("android.os.Bundle").call(this, var_0)
}
```
### Parametreli fonksiyonları yakalama ve değeri alma
### Hooking parametreleri olan fonksiyonlar ve değerin alınması
Bir şifre çözme fonksiyonunu yakalama. Girdiyi yazdır, orijinal fonksiyonu çağırarak girişi şifre çöz ve son olarak, düz veriyi yazdır:
Bir decryption fonksiyonunu Hooking yapma. Input'u yazdır, orijinal fonksiyonu çağırarak input'u decrypt et ve son olarak plain veriyi yazdır:
```javascript
function getString(data) {
var ret = ""
@ -142,9 +195,9 @@ send("Decrypted flag: " + flag)
return ret //[B
}
```
### Fonksiyonları yakalamak ve onları girdiğimizle çağırmak
### Hooking fonksiyonları ve girdimizle çağırmak
Bir dize alan bir fonksiyonu yakalayın ve onu başka bir dize ile çağırın (from [here](https://11x256.github.io/Frida-hooking-android-part-2/))
Bir string alan bir fonksiyonu Hook'la ve onu başka bir string ile çağır (from [here](https://11x256.github.io/Frida-hooking-android-part-2/))
```javascript
var string_class = Java.use("java.lang.String") // get a JS wrapper for java's String class
@ -157,11 +210,11 @@ console.log("Return value: " + ret)
return ret
}
```
### Zaten Oluşturulmuş Bir Sınıf Nesnesini Alma
### Bir sınıfın önceden oluşturulmuş bir nesnesini alma
Eğer oluşturulmuş bir nesnenin bazı özelliklerini çıkarmak istiyorsanız bunu kullanabilirsiniz.
Oluşturulmuş bir nesnenin bir özniteliğini almak istiyorsanız bunu kullanabilirsiniz.
Bu örnekte, my_activity sınıfının nesnesini nasıl alacağınızı ve nesnenin özel bir özelliğini yazdıracak olan .secret() fonksiyonunu nasıl çağıracağınızı göreceksiniz:
Bu örnekte my_activity sınıfının nesnesini nasıl alacağınızı ve nesnenin özel bir özniteliğini yazdıracak .secret() fonksiyonunu nasıl çağıracağınızı göreceksiniz:
```javascript
Java.choose("com.example.a11x256.frida_test.my_activity", {
onMatch: function (instance) {
@ -172,10 +225,16 @@ console.log("Result of secret func: " + instance.secret())
onComplete: function () {},
})
```
## Diğer Frida eğitimleri
## Diğer Frida öğreticileri
- [https://github.com/DERE-ad2001/Frida-Labs](https://github.com/DERE-ad2001/Frida-Labs)
- [Gelişmiş Frida Kullanımı blog serisinin 1. Bölümü: IOS Şifreleme Kütüphaneleri](https://8ksec.io/advanced-frida-usage-part-1-ios-encryption-libraries-8ksec-blogs/)
- [Advanced Frida Usage blog serisinin Bölüm 1: iOS Şifreleme Kütüphaneleri](https://8ksec.io/advanced-frida-usage-part-1-ios-encryption-libraries-8ksec-blogs/)
## Kaynaklar
- [Tekrarlanabilir Android Bug Bounty Laboratuvarı Oluşturma: Emulator vs Magisk, Burp, Frida ve Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools)
- [Frida Gadget dokümantasyonu](https://frida.re/docs/gadget/)
- [Frida sürümleri (sunucu ikili dosyaları)](https://github.com/frida/frida/releases)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -3,18 +3,30 @@
{{#include ../../banners/hacktricks-training.md}}
## ADB ile sistem genelinde proxy
Global bir HTTP proxy yapılandırın, böylece tüm uygulamalar trafiği interceptor'ünüzden (Burp/mitmproxy) geçirir:
```bash
# Set proxy (device/emulator must reach your host IP)
adb shell settings put global http_proxy 192.168.1.2:8080
# Clear proxy
adb shell settings put global http_proxy :0
```
Tip: Burp'ta dinleyicinizi 0.0.0.0 adresine bağlayın, böylece LAN'daki cihazlar bağlanabilir (Proxy -> Options -> Proxy Listeners).
## Sanal Makinede
Öncelikle Burp'tan Der sertifikasını indirmeniz gerekiyor. Bunu _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_ kısmında yapabilirsiniz.
Öncelikle Burp'tan **DER** sertifikasını indirmeniz gerekiyor. Bunu _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_ üzerinden yapabilirsiniz.
![](<../../images/image (367).png>)
**Sertifikayı Der formatında dışa aktarın** ve **Android'in anlayabileceği** bir forma **dönüştürelim.** **AVD'deki Android makinesinde burp sertifikasını yapılandırmak için** bu makineyi **`-writable-system`** seçeneği ile **çalıştırmanız** gerektiğini unutmayın.\
Örneğin, şu şekilde çalıştırabilirsiniz:
**Der formatında sertifikayı dışa aktarın** ve bunu **dönüştürelim** ki **Android** **anlayabilsin.** Not: **AVD içindeki Android makinesinde Burp sertifikasını yapılandırabilmek için** bu makineyi **`-writable-system`** seçeneği ile **çalıştırmanız** gerekir.\
Örneğin şöyle çalıştırabilirsiniz:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
```
Sonra, **burp sertifikasını yapılandırmak için**:
Sonra, **burps sertifikasını yapılandırmak için şunları yapın**:
```bash
openssl x509 -inform DER -in burp_cacert.der -out burp_cacert.pem
CERTHASHNAME="`openssl x509 -inform PEM -subject_hash_old -in burp_cacert.pem | head -1`.0"
@ -25,39 +37,43 @@ adb shell mv /sdcard/$CERTHASHNAME /system/etc/security/cacerts/ #Move to correc
adb shell chmod 644 /system/etc/security/cacerts/$CERTHASHNAME #Assign privileges
adb reboot #Now, reboot the machine
```
Bir kez **makine yeniden başlatıldığında**, burp sertifikası kullanılmaya başlanacaktır!
Once the **makine yeniden başlatmayı tamamladıktan sonra** Burp sertifikası kullanılacaktır!
## Magisc Kullanımı
Eğer **cihazınızı Magisc ile rootladıysanız** (belki bir emülatör), ve **önceki adımları** Burp sertifikasını yüklemek için **takip edemiyorsanız** çünkü **dosya sistemi salt okunur** ve yazılabilir olarak yeniden bağlayamıyorsanız, başka bir yol vardır.
Eğer cihazınızı **Magisc ile root'ladıysanız** (örneğin bir emulator) ve Burp sertifikasını kurmak için önceki **adımları** izleyemiyorsanız çünkü **dosya sistemi salt okunur** ve yeniden yazılabilir şekilde remount edemiyorsanız, başka bir yol var.
[**bu videoda**](https://www.youtube.com/watch?v=qQicUW0svB8) açıklandığı gibi, şunları yapmalısınız:
Explained in [**this video**](https://www.youtube.com/watch?v=qQicUW0svB8) you need to:
1. **Bir CA sertifikası yükleyin**: Sadece **sürükleyip bırakın** DER Burp sertifikasını **uzantısını** `.crt` olarak değiştirerek mobil cihazda, böylece İndirilenler klasöründe saklanır ve `Bir sertifika yükle` -> `CA sertifikası` kısmına gidin.
1. **Install a CA certificate**: Sadece DER Burp sertifikasının uzantısını `.crt` olarak değiştirip mobil cihaza drag&drop yapın, böylece Downloads klasöründe saklanır ve `Install a certificate` -> `CA certificate` yolunu izleyin.
<figure><img src="../../images/image (53).png" alt="" width="164"><figcaption></figcaption></figure>
- Sertifikanın doğru bir şekilde saklandığını kontrol edin, `Güvenilir kimlik bilgileri` -> `KULLANICI` kısmına gidin.
- Sertifikanın doğru şekilde saklandığını doğrulamak için `Trusted credentials` -> `USER` yoluna gidin.
<figure><img src="../../images/image (54).png" alt="" width="334"><figcaption></figcaption></figure>
2. **Sistem güvenilir hale getirin**: Magisc modülünü [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (bir .zip dosyası) indirin, **sürükleyip bırakın** telefonunuza, telefonunuzdaki **Magics uygulamasına** gidin ve **`Modüller`** bölümüne geçin, **`Depolamadan yükle`** seçeneğine tıklayın, `.zip` modülünü seçin ve yüklendikten sonra **telefonu yeniden başlatın**:
2. **Make it System trusted**: Magisc modülü [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (.zip dosyası) indirin, telefonuza **drag&drop** yapın, telefondaki **Magics app** uygulamasında **`Modules`** bölümüne gidin, **`Install from storage`** seçeneğine tıklayın, `.zip` modülünü seçin ve kurulduktan sonra telefonu **reboot** edin:
<figure><img src="../../images/image (55).png" alt="" width="345"><figcaption></figcaption></figure>
- Yeniden başlatmadan sonra, `Güvenilir kimlik bilgileri` -> `SİSTEM` kısmına gidin ve Postswigger sertifikasının orada olduğunu kontrol edin.
- Yeniden başlattıktan sonra `Trusted credentials` -> `SYSTEM` yoluna gidip Postswigger cert'in orada olduğunu kontrol edin.
<figure><img src="../../images/image (56).png" alt="" width="314"><figcaption></figcaption></figure>
### Learn how to create a Magisc module
Check [https://medium.com/@justmobilesec/magisk-for-mobile-pentesting-rooting-android-devices-and-building-custom-modules-part-ii-22badc498437](https://medium.com/@justmobilesec/magisk-for-mobile-pentesting-rooting-android-devices-and-building-custom-modules-part-ii-22badc498437)
## Android 14 Sonrası
Son Android 14 sürümünde, sistem güvenilir Sertifika Otoritesi (CA) sertifikalarının yönetiminde önemli bir değişiklik gözlemlenmiştir. Önceden, bu sertifikalar **`/system/etc/security/cacerts/`** dizininde bulunuyordu ve root ayrıcalıklarına sahip kullanıcılar tarafından erişilebilir ve değiştirilebilir durumdaydı, bu da sistem genelinde anında uygulanmasını sağlıyordu. Ancak, Android 14 ile birlikte, depolama yeri **`/apex/com.android.conscrypt/cacerts`** dizinine taşınmıştır; bu dizin **`/apex`** yolunun içinde yer almakta olup, doğası gereği değiştirilemezdir.
En son Android 14 sürümünde, sistem tarafından güvenilen Certificate Authority (CA) sertifikalarının yönetiminde önemli bir değişiklik gözlemlendi. Önceden bu sertifikalar **`/system/etc/security/cacerts/`** dizininde tutuluyor ve root ayrıcalığı olan kullanıcılar tarafından erişilip değiştirilebiliyordu; bu da sistem genelinde anında uygulanmalarına izin veriyordu. Ancak Android 14 ile birlikte saklama yeri **`/apex/com.android.conscrypt/cacerts`** olarak taşındı; bu dizin **`/apex`** yolunun içinde yer alır ve doğası gereği değiştirilemez (immutable).
**APEX cacerts yolu**'nu yazılabilir olarak yeniden bağlama girişimleri başarısızlıkla sonuçlanmaktadır, çünkü sistem böyle işlemlere izin vermemektedir. Geçici bir dosya sistemi (tmpfs) ile dizini çıkarmaya veya üst üste bindirmeye yönelik girişimler bile değiştirilemezliği aşmamaktadır; uygulamalar, dosya sistemi düzeyindeki değişikliklere bakılmaksızın orijinal sertifika verilerine erişmeye devam etmektedir. Bu dayanıklılık, **`/apex`** montajının ÖZEL yayılma ile yapılandırılmasından kaynaklanmaktadır; bu, **`/apex`** dizinindeki herhangi bir değişikliğin diğer süreçleri etkilemediğini garanti eder.
**APEX cacerts yolunu** yazılabilir hale getirmek için remount yapma girişimleri başarısız olur; sistem bu tür işlemlere izin vermez. Dizini unmount etmeye veya geçici bir dosya sistemi (tmpfs) ile overlay yapmaya çalışmak bile immutability'yi aşmaz; uygulamalar dosya sistemi seviyesindeki değişikliklerden bağımsız olarak orijinal sertifika verilerine erişmeye devam eder. Bunun nedeni, **`/apex`** mount'ının PRIVATE propagation ile yapılandırılmış olmasıdır; bu da **`/apex`** içindeki değişikliklerin diğer süreçleri etkilememesini sağlar.
Android'in başlatılması, işletim sistemini başlatırken `init` sürecini içerir ve bu süreç, Zygote sürecini de başlatır. Bu süreç, uygulama süreçlerini yeni bir montaj ad alanı ile başlatmaktan sorumludur; bu ad alanı, özel bir **`/apex`** montajını içerir ve böylece bu dizindeki değişiklikleri diğer süreçlerden izole eder.
Android'in başlatılmasında `init` süreci işletim sistemini başlatırken aynı zamanda Zygote sürecini de başlatır. Bu süreç, uygulama süreçlerini yeni bir mount namespace ile başlatmaktan sorumludur ve bu namespace içinde private bir **`/apex`** mount bulunur; böylece bu dizindeki değişiklikler diğer süreçlerden izole edilir.
Yine de, **`/apex`** dizinindeki sistem güvenilir CA sertifikalarını değiştirmek isteyenler için bir çözüm bulunmaktadır. Bu, **`/apex`**'i yeniden bağlayarak ÖZEL yayılmayı kaldırmayı ve böylece yazılabilir hale getirmeyi içerir. Süreç, **`/apex/com.android.conscrypt`** içeriğini başka bir yere kopyalamayı, **`/apex/com.android.conscrypt`** dizinini çıkarmayı ve salt okunur kısıtlamayı ortadan kaldırmayı, ardından içeriği **`/apex`** içindeki orijinal konumuna geri yüklemeyi içerir. Bu yaklaşım, sistem çöküşlerini önlemek için hızlı hareket etmeyi gerektirir. Bu değişikliklerin sistem genelinde uygulanmasını sağlamak için, `system_server`'ı yeniden başlatmak önerilir; bu, tüm uygulamaları etkili bir şekilde yeniden başlatır ve sistemi tutarlı bir duruma getirir.
Yine de, **`/apex`** dizini içindeki sistem tarafından güvenilen CA sertifikalarını değiştirmek isteyenler için bir geçici çözüm vardır. Bu, **`/apex`**'in PRIVATE propagation özelliğini kaldıracak şekilde manuel olarak remount edilmesini içerir, böylece yazılabilir hale gelir. Süreç, **`/apex/com.android.conscrypt`** içeriğini başka bir konuma kopyalamayı, **`/apex/com.android.conscrypt`** dizinini unmount ederek salt okunur kısıtlamayı kaldırmayı ve ardından içeriği orijinal konumuna geri yüklemeyi kapsar. Bu yaklaşım sistem çökmesini önlemek için hızlı hareket etmeyi gerektirir. Değişikliklerin tüm sistemde uygulanmasını sağlamak için `system_server`'ı yeniden başlatmak tavsiye edilir; bu, tüm uygulamaları etkili bir şekilde yeniden başlatır ve sistemi tutarlı bir duruma getirir.
```bash
# Create a separate temp directory, to hold the current certificates
# Otherwise, when we add the mount we can't read the current certs anymore.
@ -117,26 +133,26 @@ echo "System certificate injected"
```
### Bind-mounting through NSEnter
1. **Yazılabilir Bir Dizin Kurma**: İlk olarak, mevcut APEX olmayan sistem sertifika dizininin üzerine bir `tmpfs` monte edilerek yazılabilir bir dizin oluşturulur. Bu, aşağıdaki komut ile gerçekleştirilir:
1. **Setting Up a Writable Directory**: Başlangıçta, yazılabilir bir dizin mevcut non-APEX sistem sertifika dizini üzerine bir `tmpfs` mounting yapılarak oluşturulur. Bu, aşağıdaki komutla gerçekleştirilir:
```bash
mount -t tmpfs tmpfs /system/etc/security/cacerts
```
2. **CA Sertifikalarının Hazırlanması**: Yazılabilir dizinin kurulumu sonrasında, kullanılmak istenen CA sertifikaları bu dizine kopyalanmalıdır. Bu, `/apex/com.android.conscrypt/cacerts/` dizinindeki varsayılan sertifikaların kopyalanmasını içerebilir. Bu sertifikaların izinlerinin ve SELinux etiketlerinin uygun şekilde ayarlanması önemlidir.
3. **Zygote için Bağlama Montajı**: `nsenter` kullanarak, Zygote'un montaj ad alanına girilir. Zygote, Android uygulamalarını başlatmaktan sorumlu olan süreç olduğundan, bundan sonraki tüm başlatılan uygulamaların yeni yapılandırılmış CA sertifikalarını kullanmasını sağlamak için bu adım gereklidir. Kullanılan komut:
2. **CA Sertifikalarını Hazırlama**: Yazılabilir dizinin ayarlanmasının ardından, kullanılmak istenen CA sertifikaları bu dizine kopyalanmalıdır. Bu işlem, varsayılan sertifikaların `/apex/com.android.conscrypt/cacerts/` dizininden kopyalanmasını içerebilir. Bu sertifikaların izinlerinin ve SELinux etiketlerinin uygun şekilde ayarlanması şarttır.
3. **Bind Mounting for Zygote**: `nsenter` kullanılarak, Zygote'nin mount namespace'ine girilir. Zygote, Android uygulamalarını başlatmaktan sorumlu proses olduğundan, bundan sonra başlatılacak tüm uygulamaların yeni yapılandırılmış CA sertifikalarını kullanmasını sağlamak için bu adım gereklidir. Kullanılan komut şudur:
```bash
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
```
Bu, başlatılan her yeni uygulamanın güncellenmiş CA sertifikaları ayarlarına uyacağını garanti eder.
Bu, başlatılan her yeni uygulamanın güncellenmiş CA sertifikaları yapılandırmasına uyacağını garanti eder.
4. **Çalışan Uygulamalara Değişiklik Uygulama**: Zaten çalışan uygulamalara değişiklikleri uygulamak için, `nsenter` tekrar kullanılarak her uygulamanın ad alanına bireysel olarak girilir ve benzer bir bağlama montajı gerçekleştirilir. Gerekli komut şudur:
4. **Çalışan Uygulamalara Değişiklikleri Uygulama**: Zaten çalışmakta olan uygulamalara değişiklikleri uygulamak için, `nsenter` tekrar kullanılarak her uygulamanın namespace'ine ayrı ayrı girilir ve benzer bir bind mount yapılır. Gerekli komut şudur:
```bash
nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
```
5. **Alternatif Yaklaşım - Yumuşak Yeniden Başlatma**: Alternatif bir yöntem, `init` sürecinde (PID 1) bind mount işlemi gerçekleştirmek ve ardından işletim sistemini `stop && start` komutlarıyla yumuşak bir şekilde yeniden başlatmaktır. Bu yaklaşım, değişikliklerin tüm ad alanlarına yayılmasını sağlayarak her bir çalışan uygulamayı ayrı ayrı ele alma ihtiyacını ortadan kaldırır. Ancak, bu yöntem genellikle yeniden başlatmanın rahatsızlığı nedeniyle daha az tercih edilmektedir.
5. **Alternatif Yaklaşım - Soft Reboot**: Alternatif bir yöntem, bind mount işlemini `init` sürecinde (PID 1) gerçekleştirmek ve ardından işletim sistemini `stop && start` komutlarıyla soft reboot yapmaktır. Bu yaklaşım, değişiklikleri tüm namespaces genelinde yayar ve her bir çalışan uygulamayı ayrı ayrı ele alma ihtiyacını ortadan kaldırır. Ancak, yeniden başlatmanın yarattığı rahatsızlık nedeniyle bu yöntem genellikle daha az tercih edilir.
## Referanslar
- [https://httptoolkit.com/blog/android-14-install-system-ca-certificate/](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/)
- [Android 14: Install a system CA certificate on a rooted device](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/)
- [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)
{{#include ../../banners/hacktricks-training.md}}