Objection Tutorial

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Bug bounty tip: Intigriti için kayıt olun, hackers tarafından, hackers için oluşturulmuş premium bir bug bounty platformu! Bugün https://go.intigriti.com/hacktricks adresine katılın ve $100,000'a kadar ödüller kazanmaya başlayın!

Introduction

objection - Runtime Mobile Exploration

Objection, Frida tarafından desteklenen bir runtime mobil keşif aracıdır. Jailbroken veya rooted 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 bypass 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.

Resume

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.

Tutorial

Bu eğitim için burada indirebileceğiniz APK'yı kullanacağım:

2MB
app-release.zip
archive

Ya da orijinal deposundan (app-release.apk'yi indirin)

Installation

pip3 install objection

Bağlantı

Bir normal 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 bir rootlu cihaz kullanıyorsanız, test etmek istediğiniz uygulamayı --gadget seçeneği içinde seçmeniz gerekmektedir. bu durumda:

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.

env

Frida Bilgisi

frida

Yükleme/İndirme

file download <remote path> [<local path>]
file upload <local path> [<remote path>]

Frida betiğini içe aktarın

import <local path frida-script>

SSLPinning

android sslpinning disable #Attempts to disable SSL Pinning on Android devices.

Root tespiti

android root disable  #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.

Exec Komutu

android shell_exec whoami

Ekran Görüntüleri

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

android hooking list activities
android hooking list services
android hooking list receivers

Frida, hiçbiri bulunamazsa bir hata verecektir.

Mevcut aktiviteyi alma

android hooking get current_activity

Sınıfları Ara

Uygulamamızın içindeki sınıfları aramaya başlayalım.

android hooking search classes asvid.github.io.fridaapp

Bir sınıfın Arama Yöntemleri

Şimdi MainActivity: sınıfındaki yöntemleri çıkaralım:

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:

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ı listeleyebilirsiniz:

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 hooklamak istiyorsanız ve sadece sınıfın adını biliyorsanız çok faydalıdır. Bu fonksiyonu sınıfın hangi modüle ait olduğunu aramak için kullanabilirsiniz ve ardından yöntemini hooklayabilirsiniz.

Hooklamanın kolay olması

Bir yöntemi hooklamak (izlemek)

Uygulamanın kaynak kodundan bildiğimiz gibi, 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:

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, hepsini hooklayalım. Dikkatli olun, bu bir uygulamayı çökertebilir.

android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return

Eğer sınıfın bağlı olduğu uygulama ile 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ı ile belirtilmiştir. Bulunan bir objection için bir dize değeri elde etme girişiminin sonucu, genellikle nesne için özellik değerlerini içerecektir.

android heap print_instances <class>

Keystore/Intents

Keystore ve intent'lerle oynayabilirsiniz:

android keystore list
android intents launch_activity
android intent launch_service

Bellek

Dump

memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part

Liste

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:

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

exit

Objection'da Ne Eksik

  • 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 kullanamazsınız.

  • Uygulama tarafından kullanılan tüm yaygın kripto yöntemlerini hooklamak için (şifreli metin, düz metin, anahtarlar, IV'ler ve kullanılan algoritmalar görmek için) sslpinnin gibi bir kısayol yok.

Bug bounty ipucu: Intigriti için kayıt olun, hackers tarafından, hackers için oluşturulmuş premium bir bug bounty platformu! Bugün https://go.intigriti.com/hacktricks adresine katılın ve $100,000'a kadar ödüller kazanmaya başlayın!

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

Last updated