mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
229 lines
8.1 KiB
Markdown
229 lines
8.1 KiB
Markdown
# 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
|
||
```
|
||
.png>)
|
||
|
||
#### Frida Bilgisi
|
||
```bash
|
||
frida
|
||
```
|
||
.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
|
||
```
|
||
.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
|
||
```
|
||
.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
|
||
```
|
||
.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
|
||
```
|
||
.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
|
||
```
|
||
.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
|
||
```
|
||
.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.
|
||
|
||
.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:
|
||
|
||
.png>)
|
||
|
||
Artık, PIN kodu için metin kutusuna herhangi bir şey yazarsanız, her şeyin geçerli olduğunu göreceksiniz:
|
||
|
||
.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>
|
||
```
|
||
.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
|
||
```
|
||
.png>)
|
||
|
||
Listenin en altında frida'yı görebilirsiniz:
|
||
|
||
.png>)
|
||
|
||
Frida'nın neyi dışa aktardığını kontrol edelim:
|
||
|
||
.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}}
|