Frida python возвращает значения и записывает их в файл

#python #frida

#python #фрида

Вопрос:

В настоящее время я использую frida-python для подключения к функции в приложении ios, и я хочу, чтобы выходные данные функции были записаны в файл CSV. Как мне это сделать?

Скрипт на Python:

 import frida, sys

script = 'script.js'
bundle = 'application'
f = open(script, "r")
s = f.read()

device = frida.get_usb_device(1000)
pid = device.spawn([bundle])
session = device.attach(pid)
script = session.create_script(s)
script.load()
device.resume(pid)
sys.stdin.read()
  

script.js

 Interceptor.attach(intercept.implementation, {
        onEnter: function (args) {
            var instance = ObjC.chooseSync(ObjC.classes.CLASS)[0];
            send(instance.toString());
            }
        },
  

В настоящее время мой скрипт может выводить значения из консоли только тогда, когда я перехватил функцию. Есть ли какие-либо способы вернуть значения в python, чтобы я мог записать их в файлы CSV?

Ответ №1:

Да, есть способ. Вы меняете функцию on_message(), которая обрабатывает функцию send() в javascript.

т.е. по умолчанию on_message в python:

 def on_message(message, data):
    if message['type'] == 'send':
        print("[* ]   message)

.... 


device = frida.get_usb_device()
pid = device.spawn(["pgk"])
session = device.attach(pid)

script = open("filepath")

drop = session.create_script(script.read())
drop.on('message', on_message)
drop.load()
time.sleep(1)  # fails without this sleep
device.resume(pid)
sys.stdin.read()
  

в вашем javascript вы просто вызываете

отправить («Вызываемый метод») // То же, что и журнал консоли, только что обработанный через frida

Вы можете найти документацию для этого здесь:

https://frida.re/docs/messages/

Комментарии:

1. Да, это сработало, большое спасибо! Но мне было интересно .on , что делать?

2. Насколько я знаю из документации, вызов on(‘message’, on_message) настраивает функцию python на запуск при получении сообщения от javascript. Вероятно, это связано с тем, что разные скрипты могут обрабатывать разные функции сообщений, т.Е. Для одного скрипта вы хотите что-то записать в консоль, а другой оценивает возвращенные данные.

Ответ №2:

Используйте send на стороне Javascript

На стороне python

 f = open('/tmp/log', 'w')    
# ...
def on_message(msg, _data):
    f.write(msg['payload']   'n')
# ...
script.on('message', on_message)
# don't forget f.close()
  

Комментарии:

1. Извините, я совсем новичок в этом, я не понимаю. Нужно ли мне вводить другой скрипт в процесс моего приложения, просто write для возврата выходных данных? Потому что script.js является ли мой скрипт для перехвата функции всякий раз, когда она вызывается во время запуска приложения. И script.on предполагается ли возвращать значения, которые отправляются обратно со стороны javascript send ?

2. Кажется, я не могу этого сделать, я обновил сообщение своим script.js , после размещения отправки значение не возвращается обратно.