Objection Tutorial

Reading time: 7 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin

Giriş

objection - Çalışma Zamanı Mobil Keşif

Objection, Frida 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:

Veya orijinal deposundan(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

Frida Bilgisi

bash
frida

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

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

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

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

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

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 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

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.

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:

Artık, PIN kodu için metin kutusuna herhangi bir şey yazarsanız, her şeyin geçerli olduğunu göreceksiniz:

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>

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

Listenin en altında frida'yı görebilirsiniz:

Frida'nın neyi dışa aktardığını kontrol edelim:

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.

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin