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?


person jason    schedule 04.11.2020    source источник


Ответы (2)


Да есть способ. Вы изменяете функцию 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 вы просто вызываете

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

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

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

person MitchHS    schedule 05.11.2020
comment
Да, это сработало, большое спасибо! Но мне было интересно, что делает .on? - person jason; 05.11.2020
comment
Насколько я знаю из документации, вызов on('message', on_message) устанавливает запуск функции python при получении сообщения от javascript. Вероятно, это связано с тем, что разные скрипты могут обрабатывать разные функции сообщений, то есть для одного скрипта вы хотите что-то записать в консоль, а другой оценить возвращаемые данные. - person MitchHS; 06.11.2020

Используйте отправить на стороне Javascript.

На стороне питона

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()
person whoopdedoo    schedule 04.11.2020
comment
Извините, я совсем новичок в этом, я не понимаю. Нужно ли мне вводить другой скрипт в процесс моего приложения, просто напишите, чтобы вернуть вывод? Потому что script.js — это мой скрипт для перехвата функции всякий раз, когда она вызывается во время работы приложения. И предполагается ли, что script.on возвращает значения, отправленные обратно со стороны javascript через send? - person jason; 04.11.2020
comment
Кажется, я не могу этого сделать, я обновил сообщение своим script.js, после отправки значения не возвращается обратно. - person jason; 04.11.2020
comment
Этот ответ сработал для меня - person BBedit; 03.12.2020