"Enter"a basıp içeriğe geçin

Frida – Python ile kullanımı

Merhaba, daha önce frida aracını android üzerinde nasıl kurulacağını ve ekrandaki yazılara manipüle etmek için ne yapmak gerekli onu anlatmıştım. Şimdi ise size python ile nasıl veri gönderilir ve bu veriler nasıl işlenir bunlardan bahsedeceğim.

Neden python kullanalım

Frida aslında python üzerinde daha efektif çalışır. Kodlaması ve yönetmesi daha kolaydır. Javascript üzerinde kullanımımızda genelde basit ve tek sayfada hallolabilecek kodlar yazılırken python kısmında birden fazla fridascript çalıştırabilir, bunlardan verileri alarak tek yerde toplayabilir ve bu sayede test işlemlerini kolayca yönetmiş oluruz.

Python kullanarak cihazı yönetmek

Örnek kod üzerinden gitmek ve bu örnek kod üzerinden alıştırma yapmak istiyorum.

import sys
import frida
from frida.core import Device, Session, Script


device: Device = frida.get_usb_device()
pid = device.spawn(["com.andromeda.hackme"])
session: Session = device.attach(pid)
script: Script = session.create_script(open("scripts/script.js").read())
script.load()
device.resume(pid)
sys.stdin.read()

Görmüş olduğunuz gibi frida üzerinden usb ye takılı cihazlar aranılarak otomatik bulması isteniyor. Ardından test uygulamamız çağırılıyor ve sys.stdin.read() yazılarak program sonsuza kadar açık tutuluyor.

Frida server her ne olursa olsun çalışmalı, eğer frida server çalışmaz ise kod hata verecektir. İsterseniz çalışan programlar veya cihazdaki yüklü uygulamaları listeleyebilirsiniz.

for application in device.enumerate_applications():
    print(application)

“spawn” fonksiyonunu kullanarak istediğiniz uygulamaları çalıştırabilirsiniz.

Python kullanarak veri aktarımı sağlamak

Python kullanarak scriptleri yönetmek ve kullanmak en çok yapacağımız işlemdir. Aşağıdaki kodda örnek olarak mesajı python bölümüne gönderip python kısmındada bunu ekrana yazdırıyoruz.

import sys
import frida
from frida.core import Device, Session, Script

script_text = """
    Java.perform(() => {
        const TextView = Java.use("android.widget.TextView");
        TextView.setText.overload("java.lang.CharSequence").implementation = function (x) {
            const stringToSend = x.toString();
            send(stringToSend);
            return this.setText(x);
        }
    });
"""
def callback(message, data):
    print(message, data)

device: Device = frida.get_usb_device()
pid = device.spawn(["com.andromeda.hackme"])
session: Session = device.attach(pid)
script: Script = session.create_script(script_text)
script.on("message", callback)
script.load()
device.resume(pid)
sys.stdin.read()

Bu örnekte gördüğünüz gibi bütün textview elemanlarının setText metodlarında hangi yazı geliyorsa hepsini python projesine gönderdim. 10 20 scripte sahip olsaydık bunların hepsini bu şekilde python projesine aktarabilirdik. Şimdi ise python projesinden cevap bekleyerek aralarında bağlantı kurmayı sağlayalım.

import sys
import frida
from frida.core import Device, Session, Script

script_text = """
    Java.perform(() => {
        const TextView = Java.use("android.widget.TextView");
        TextView.setText.overload("java.lang.CharSequence").implementation = function (x) {
            const stringToSend = x.toString();
            send(stringToSend);
            let string = "";
            recv('setText', (data)=>{
                string = data.payload;
            }).wait();
            return this.setText(Java.use("java.lang.String").$new(string));
        }
    });
"""


device: Device = frida.get_usb_device()
pid = device.spawn(["com.andromeda.hackme"])
session: Session = device.attach(pid)
script: Script = session.create_script(script_text)


def callback(message, data):
    script.post({'type': 'setText', 'payload': "degistir!"})

script.on("message", callback)
script.load()
device.resume(pid)
sys.stdin.read()

recv().wait(); aslında senkron bir fonksiyondur. wait kullanmaz iseniz asenkron olur. istediğiniz mesajı javascript kısmına göndererek anlık enjeksiyon yapabilirsiniz.

Python içinden alınan yazının ekrana yazdırılmış hali.

Örneği github üzerinden indirebilirsiniz. Diğerki yazımda Frida CLI kullanımından bahsedeceğim.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir