FRIDA

Bengisu Gün
6 min readJun 8, 2021

--

FRİDA NEDİR?

Windows, macOS, Linux, iOS, Android gibi işletim sistemlerinde bulunan uygulamalara JavaScript kodlarını veya kendi oluşturduğunuz kodları enjekte ederek güvenlik zafiyetlerinden yararlanmamızı sağlar. Frida ayrıca Frida API’sinin üzerine inşa edilmiş bazı basit araçlar sunmaktadır .Bu araçları ihtiyaçlarınıza göre düzenleyebilir veya API’nin nasıl kullanılacağına dair işlemlerde kullanabilirsiniz.

Jadx Nedir?

Jadx aracını frida ile işlemler yaparken bize yardımcı olması açısından kullanacağız.Jadx kısaca belirlenen uygulamaları decompile ederek kaynak kodlarını incelememize olanak sağlayan bir uygulamadır.

ADB NEDİR?

Android Debug Bridge, android cihazlar için hata ayıklama özellikleri sağlayan bir yardımcı programdır. ADB, USB ve TCP üzerinden hata ayıklama yapmak için kullanılabilir. USB Hata Ayıklama modu emülatörümüzde açık olmalıdır. Kısaca hata ayıklama, bir Android cihazının Android SDK ile USB bağlantısı üzerinden iletişim kurmasını sağlayan bir yöntemdir.Bir Android cihazının bilgisayardan komutlar, dosyalar almasına izin verir ve bilgisayarın Android cihazdan günlük dosyaları gibi önemli bilgileri almasına izin vermektedir.

ADB İle Cihaza Bağlanma

ADB aracını Linux’ a kurmak için

· apt install adb

komutunu kullanıyoruz.ADB yüklendikten sonra cihaza bağlanmak için bulunan cihazları listelememiz gerekiyor.

· adb devices –l

ADB İle Cihaza Bağlanma

Listelenen cihazlara bağlanmak için

· adb connect IP_ADRESİ:PORT

şeklindeki komutu yazıyoruz.

Cihaz Mimarisi

Bağlandığımız cihazın mimarisini incelememiz gerekiyor. İncelediğimiz mimariye göre uygun olan frida- server cihazımıza aktaracağız. Bunun için aşağıdaki komutu terminalimize yazıyoruz.

· adb shell getprop ro.product.cpu.abilist

Cihazımızın mimarisini öğrendikten sonra “https://github.com/frida/frida/releases/tag/14.1.3”

adresine gidip cihazımız için uygun olan sürümü indiriyoruz. Bu adresten indirdiğimiz sürümü emilatörümüze yani cihazımıza aktaracağız

Frida Server Kurulumu

ADB komut satırları yardımıyla indirdiğimiz frida-server’ı cihazın “/tmp” dizinine yüklüyoruz.

· adb push frida-server-14.1.3-android-x86_64 /tmp/frida-server

“adb shell” komutu ile cihaza erişiyoruz.Frida-server’ın yüklenip yüklenmediğini kontrol ediyoruz.Eğer yüklenmiş ise frida-server için gerekli izinleri sağlamamız gerekmektedir.

· chmod 755 frida-server-14.1.3-android-x86_64

İşlem yapabilmemiz için frida-server’ı başlatmamız gerekir.

· ./tmp/frida-server komutunu kullanırız.

Frida-server’ı cihazımıza başarıyla yükledikten sonra kullanacağımız işletim sistemine de yüklememiz gerekmektedir.Linux terminalden

· pip install frida

komutunu yazıyoruz.

Linux terminalden

· pip install frida-tools komutunu yazıyoruz.

FRİDA SERVER ARAÇLARI

· Frida CLI

· frida-ps

· frida-trace

· frida-discover

· frida-ls-devices

· frida-kill

Frida CLI, hızlı prototip oluşturma ve kolay hata ayıklama için sizi kodunuza yaklaştırmaya çalışan IPython’un (veya Cycript’in) pek çok güzel özelliğini taklit etmeyi amaçlayan bir REPL ara yüzüdür.

FRİDA-PS

Uzaktaki bir sistemle etkileşim kurup işlemleri listelemek için kullanılan bir komut satırı aracıdır.

Frida-ls-devices aracından cihaz kimliğini edinebilirsiniz .

Kullanabilceğiniz komut satırları;

· frida-ps -U

· frida-ps -Ua

· frida-ps –Uai

FRİDA-PS –UAİ

Cihaza yüklenen uygulamaları listeler.

FRİDA-PS –U

Frida’yı bağladığımız cihaz içinde bulunan çalışan işlemleri listelemek için kullanılır.

FRİDA-DİSCOVER

Bir programdaki dahili fonksiyonları keşfetmeye yarayan ve daha sonra frida-trace kullanılarak izlenebilen bir araçtır.

FRİDA-LS-DEVİCES

Bu frida aracı ise birden çok cihazla etkileşim kurarken kullanılanve bağlı cihazları listelemek için bir komut satırı aracıdır.

FRİDA –KILL

Bu araç ise işlemleri sonlandırmak için kullanılan frida-kill komutu kullanılan bir araçtır.

JAVASCRİPT BELİRLİ PARAMETRELER

Frida.version: geçerli Frida sürümünü bir dizge olarak içeren özellik.

Frida.heapSize: Frida’nın özel yığınının mevcut boyutunu içeren, tüm komut dosyaları ve Frida’nın kendi çalışma zamanı tarafından paylaşılan dinamik özelliktir.

Process.isDebuggerAttached(): Bir hata ayıklayıcının eklenip eklenmediğini gösteren bir boole döndürmektedir.

Process.getCurrentThreadId(): İş parçacığının işletim sistemine özgü kimliğini bir sayı olarak almamıza yarar.

MemoryAccessMonitor.enable(ranges, callbacks): Erişim için bir veya daha fazla bellek aralığını izlemede ve içerilen her bir bellek sayfasına ilk erişimde bildirimde bulunmak için kullanılır.

Thread.backtrace([context, backtracer]): NativePointernesneler dizisi olarak döndürülen geçerli iş parçacığı için bir geriye dönük izleme oluşturur .

Interceptor.attach(target, callbacks[, data]): Çalışacak aramaları bulmaya yaramaktadır.Bu, NativePointer çağrılara müdahale etmek istediğiniz işlevin adresini belirtmektedir.

Java.lang.System.exit () Metodu çalışan Java sanal makinesi feshedilerek mevcut programı çıkartır. Bu yöntem bir durum kodu alır. Durum kodunun sıfır olmayan bir değeri genellikle anormal sonlandırmayı belirtmek için kullanılır.

Console.log () Sadece ihtiyaçları kullanıcıya görüntülenecek herhangi bir iletiyi yazdırmak içinde veya daha önce tanımlanmış değişkenler her türlü yazdırmak için kullanılan JavaScript bir fonksiyondur.

FRIDA İLE SSLPINNING

SSLPinning atlama, kök algılama atlama, bellek görevleri gerçekleştirme, yığın görevleri ve daha pek çok işlevi kök / jailbreak olmadan gerçekleştirmek için Objection özelliğini kullanabiliriz.

Objection özelliğini indirmek için

· pip3 install objection

komutunu kullanıyoruz.

Android cihaza yüklenen paketler itirazda gadget olarak adlandırılıyor.Objection da kullanılan gadget fonksiyonunu indirmek için

· apt-get install gadget

komutunu kullanıyoruz.

Android cihazımıza erişmek için android-sdk’nında kurulu olması gerekiyor. “apt install android-sdk” komutunu kullanıyoruz.

Herhangi bir uygulamayı test etmek için gadget fonksiyonunu kullanalım ve erişebildiğimiz görmek için ping atalım.

Yukarıda gördüğünüz gibi cihazımıza erişip uygulamaya ping atabildik.

Burp ile uygulamanın iletişimini inceleyeceğiz.İlk olarak cihaz ve burp için ortak bir bağlantı noktası belirleyeceğiz.

Burp ile bağlantı sağlamak için emülatörümüzü de aynı ağa bağlamamız gerekmektedir. Bunun için wifi ayarlarına gidip manuel bölümünü seçip burp uygulamasına yazdığınız ip adresini ve port adresini yazmanız gerekmektedir. Daha sonra arama motoruna giderek “burp” araması yapmanız gerekir. Çıkan sayfadaki sertifikayı indirmelisiniz.

İndirdiğimiz sertifika “der” olarak inecektir.Uzantısını “crt” yapıp kaydediyoruz.Ayarlar sekmesine gidip”Advanced Wi-Fi” bölümünden Install certificates” kısmına basıyoruz.Sertifikamızı seçip bir ad belirleyip kaydediyoruz.

Google play ya da “https://apkpure.com/certificate-pinning demo/com.osfg.certificatepinning”

bu adresten sslpinning’i test etmek için bir uygulama indiriyoruz. Cihazımıza adb aracını kullanarak ya da sürükleyerek bırakabilirsiniz.

Uygulamaya gidin ve HttpURLConnection’ı sabitleyin.

Seçeneği seçtiğimizde alt bölümde görüldüğü gibi bize uyarı vermektedir .Bu uyarıyı atlatmamız gerekiyor.

Verilen uyarıyı atlatmak için Burp Suiti açıp trafiği dinleyeceğiz.Incerpert on şeklinde ayarlıyoruz.

Linux’ a giderek hem frida server’ı üst bölümde anlattığım gibi açıyoruz. Bu yüklediğimiz uygulamanın paket adını öğrenmek istiyorsak üst bölümde bahsettiğim frida araçlarını kullanarak bilgi edinebilirsiniz. Daha sonra terminale

· objection –gadget com.osfg.certificatepinning explore komutunu girerek çalıştırıyoruz.

Gördüğümüz gibi hem trafiği hem de cihazımızda bulunan uygulamanın SSL kısmını atlatmış olduk.

--

--