#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
Вы можете найти документацию для этого здесь:
Комментарии:
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
предполагается ли возвращать значения, которые отправляются обратно со стороны javascriptsend
?2. Кажется, я не могу этого сделать, я обновил сообщение своим script.js , после размещения отправки значение не возвращается обратно.