#frida
#фрида
Вопрос:
Я хотел бы выполнить цикл в режиме REPL, но я получаю синтаксическую ошибку: ожидание ‘(‘
var methods = eval(ObjC.classes.UIViewController.$methods);
for item in methods { console.log(item) }
Ответ №1:
Вот пример итерации и вызова методов класса
var UIDevice = ObjC.classes.UIDevice.currentDevice();
UIDevice.$ownMethods
.filter(function(method) {
return method.indexOf(':') == -1 /* filter out methods with parameters */
amp;amp; method.indexOf(' ') == -1 /* filter out public methods */
})
.forEach(function(method) {
console.log(method, ':', UIDevice[method]())
})
Обновить:
var UIViewControllerInstance = ObjC.chooseSync(ObjC.classes.UIViewController)[0];
console.log('Sanity check =', UIViewControllerInstance, JSON.stringify(UIViewControllerInstance.$ownMethods, null, 2));
UIViewControllerInstance.$ownMethods
.filter(method => { return method.indexOf(':') == -1 amp;amp; method.indexOf(' ') == -1 })
.forEach(method => {
console.log(method, ':', UIViewControllerInstance[method]())
})
Вместо того, чтобы искать экземпляры UIViewController в куче, у вас есть прямой доступ через UIApplication
взгляните @ https://frida.re/docs/examples/ios /
Комментарии:
1. попробуйте обновление, пожалуйста, укажите выход,
Ответ №2:
Эта проблема связана с оболочками командной строки, а не с Frida или любым другим инструментом REPL.
Это одна команда и несколько строк, подлежащих оболочке в терминалах.
Чтобы решить эту проблему, все, что вам нужно сделать, это добавить «» в конце каждой строки.
Пример:
var methods = eval(ObjC.classes.UIViewController.$methods);
for (item in methods) { console.log(item) }