Как написать цикл в режиме REPL?

#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) }