# 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 [] file upload [] ``` #### Frida betiğini içe aktarın ```bash import ``` #### 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 ``` ![](<../../../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 #Dump all memory memory dump from_base #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 "" (--string) (--offsets-only) memory write "
" "" (--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}}