229 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Objection Tutorial
{{#include ../../../banners/hacktricks-training.md}}
## **Giriş**
**objection - Çalışma Zamanı Mobil Keşif**
[**Objection**](https://github.com/sensepost/objection), [Frida](https://www.frida.re) tarafından desteklenen bir çalışma zamanı mobil keşif aracıdır. Jailbreak yapılmış veya root'lanmış bir mobil cihaza ihtiyaç duymadan mobil uygulamaları ve güvenlik durumlarını değerlendirmeye yardımcı olmak amacıyla oluşturulmuştur.
**Not:** Bu, bir tür jailbreak / root atlatma değildir. `objection` kullanarak, karşılaştığınız geçerli sandbox tarafından dayatılan tüm kısıtlamalarla sınırlı kalmaya devam edersiniz.
### Özeti
**objection**'ın **amacı**, kullanıcının **Frida'nın sunduğu ana eylemleri çağırmasına** izin vermektir. **Aksi takdirde**, kullanıcı test etmek istediği **her uygulama için tek bir script oluşturmak zorunda kalacaktır.**
## Eğitim
Bu eğitim için buradan indirebileceğiniz APK'yı kullanacağım:
{{#file}}
app-release.zip
{{#endfile}}
Veya [orijinal deposundan](https://github.com/asvid/FridaApp)(app-release.apk'yi indir)
### Kurulum
```bash
pip3 install objection
```
### Bağlantı
**Normal bir ADB bağlantısı** kurun ve cihazda **frida** sunucusunu **başlatın** (ve frida'nın hem istemci hem de sunucuda çalıştığını kontrol edin).
Eğer **rootlu bir cihaz** kullanıyorsanız, test etmek istediğiniz uygulamayı _**--gadget**_ seçeneği içinde seçmeniz gerekmektedir. bu durumda:
```bash
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore
```
### Temel Eylemler
Objection'ın tüm olası komutları bu eğitimde listelenmeyecek, sadece daha faydalı bulduğum komutlar yer alacak.
#### Ortam
Ortam içinde bazı ilginç bilgiler (şifreler veya yollar gibi) bulunabilir.
```bash
env
```
![](<../../../images/image (220).png>)
#### Frida Bilgisi
```bash
frida
```
![](<../../../images/image (1093).png>)
#### Yükleme/İndirme
```bash
file download <remote path> [<local path>]
file upload <local path> [<remote path>]
```
#### Frida betiğini içe aktarın
```bash
import <local path frida-script>
```
#### SSLPinning
```bash
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.
```
#### Root tespiti
```bash
android root disable #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.
```
#### Exec Komutu
```bash
android shell_exec whoami
```
#### Ekran Görüntüleri
```bash
android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false #This may enable you to take screenshots using the hardware keys
```
### Statik analiz Dinamik hale getirildi
Gerçek bir uygulamada, objection kullanmadan önce bu bölümde keşfedilen tüm bilgileri **statik analiz** sayesinde bilmemiz gerekir. Yine de, bu şekilde belki de **yeni bir şey** görebilirsiniz çünkü burada yalnızca sınıfların, yöntemlerin ve dışa aktarılan nesnelerin tam bir listesini bulacaksınız.
Bu, bir şekilde uygulamanın **okunabilir kaynak kodunu elde edemiyorsanız** da faydalıdır.
#### Etkinlikleri, alıcıları ve hizmetleri listele
```bash
android hooking list activities
```
![](<../../../images/image (1016).png>)
```bash
android hooking list services
android hooking list receivers
```
Frida, hiçbiri bulunamazsa bir hata verecektir.
#### Mevcut etkinliği alma
```bash
android hooking get current_activity
```
![](<../../../images/image (813).png>)
#### Sınıfları Ara
Uygulamamızın içindeki sınıfları aramaya başlayalım.
```bash
android hooking search classes asvid.github.io.fridaapp
```
![](<../../../images/image (507).png>)
#### Bir sınıfın Yöntemlerini Ara
Şimdi _MainActivity:_ sınıfındaki yöntemleri çıkaralım:
```bash
android hooking search methods asvid.github.io.fridaapp MainActivity
```
![](<../../../images/image (929).png>)
#### Bir sınıfın tanımlı Yöntemlerini ve parametrelerini listele
Sınıfın yöntemlerinin hangi parametrelere ihtiyaç duyduğunu bulalım:
```bash
android hooking list class_methods asvid.github.io.fridaapp.MainActivity
```
![](<../../../images/image (299).png>)
#### Sınıfları listele
Ayrıca, mevcut uygulama içinde yüklenen tüm sınıfları da listeleyebilirsiniz:
```bash
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
```
Bu, **bir sınıfın yöntemini yakalamak istiyorsanız ve sadece sınıfın adını biliyorsanız** çok faydalıdır. Bu işlevi, **sınıfın hangi modüle ait olduğunu aramak için** kullanabilirsiniz ve ardından yöntemini yakalayabilirsiniz.
### Yakalamanın Kolay Olması
#### Bir Yöntemi Yakalamak (izlemek)
Uygulamanın [kaynak kodundan](https://github.com/asvid/FridaApp/blob/master/app/src/main/java/asvid/github/io/fridaapp/MainActivity.kt) bildiğimiz kadarıyla, **MainActivity**'den _**sum()**_ **fonksiyonu** **her saniye** çalıştırılmaktadır. Fonksiyon her çağrıldığında **tüm olası bilgileri** (argümanlar, dönüş değeri ve geri izleme) **dökme** yapmayı deneyelim:
```bash
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return
```
![](<../../../images/image (1086).png>)
#### Bir sınıfı tamamen izlemek (hooking)
Aslında MainActivity sınıfının tüm yöntemlerini gerçekten ilginç buluyorum, hadi **hepsini hooklayalım**. Dikkatli olun, bu bir uygulamayı **çökertebilir**.
```bash
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
```
Uygulama ile sınıf bağlıyken oynarsanız, **her bir fonksiyonun ne zaman çağrıldığını**, **argümanlarını** ve **dönüş** değerini göreceksiniz.
![](<../../../images/image (861).png>)
#### Bir fonksiyonun boolean dönüş değerini değiştirme
Kaynak koddan, _checkPin_ fonksiyonunun bir _String_ argümanı aldığını ve bir _boolean_ döndürdüğünü görebilirsiniz. Fonksiyonu **her zaman true döndürecek** şekilde ayarlayalım:
![](<../../../images/image (883).png>)
Artık, PIN kodu için metin kutusuna herhangi bir şey yazarsanız, her şeyin geçerli olduğunu göreceksiniz:
![](<../../../images/image (228).png>)
### Sınıf örnekleri
Belirli bir Java sınıfının **canlı örneklerini** arayın ve yazdırın; bu, tam nitelikli sınıf adıyla belirtilmiştir. Bulunan bir objection için bir dize değeri elde etme girişiminin sonucu, tipik olarak **nesne için özellik değerlerini** içerecektir.
```
android heap print_instances <class>
```
![](<../../../images/image (1095).png>)
### Keystore/Intents
Keystore ve intent'lerle oynayabilirsiniz:
```bash
android keystore list
android intents launch_activity
android intent launch_service
```
### Bellek
#### Dump
```bash
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part
```
#### Liste
```bash
memory list modules
```
![](<../../../images/image (286).png>)
Listenin en altında frida'yı görebilirsiniz:
![](<../../../images/image (1097).png>)
Frida'nın neyi dışa aktardığını kontrol edelim:
![](<../../../images/image (298).png>)
#### Ara/Yaz
Objection ile bellek içinde arama yapabilir ve yazabilirsiniz:
```bash
memory search "<pattern eg: 41 41 41 ?? 41>" (--string) (--offsets-only)
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)
```
### SQLite
SQLite veritabanlarıyla etkileşimde bulunmak için `sqlite` komutunu kullanabilirsiniz.
### Exit
```bash
exit
```
## Objection'da Neyi Özlüyorum
- Hooking yöntemleri bazen uygulamayı çökertiyor (bu aynı zamanda Frida'dan da kaynaklanıyor).
- Sınıfların örneklerini kullanarak örneğin fonksiyonlarını çağırmak mümkün değil. Ve yeni sınıf örnekleri oluşturup bunları fonksiyonları çağırmak için kullanamıyorsunuz.
- Uygulama tarafından kullanılan tüm yaygın kripto yöntemlerini hooklamak için (sslpinnin için olan gibi) şifrelenmiş metin, düz metin, anahtarlar, IV'ler ve kullanılan algoritmaları görmek için bir kısayol yok.
{{#include ../../../banners/hacktricks-training.md}}