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