Tweak - это dylib - он будет загружен в процессе. Этот процесс может иметь права, и эти права будут использоваться для настройки. Вот и все. У Tweak нет собственных прав.
Что касается вашего вопроса. Из-за того, что я сказал, прежде чем вы не можете ограничить просто настройку - ваши ограничения будут применены ко всему процессу, который будет изменен. Вы ничего не можете с этим поделать. Вот как работают настройки - они являются динамически загружаемыми в пространство адресов процессов. После этого настройка становится частью процесса. Таким образом, любые ограничения будут применены ко всему процессу, который включает в себя твик, код приложения и любое другое приложение dylib/framework.
Итак, если вы хотите разработать приложение, которое поможет пользователю наложить ограничения на настройки, я не думаю, что вы можете это сделать. Что вы можете сделать, так это проанализировать, какое приложение настраивается, какие права у них есть, какие фреймворки и dylib используются в настройках (в основном частных). И от этого пользователя можно включить или отключить эту настройку. Вы даже можете проанализировать секцию импорта и строковые литералы настройки, чтобы точно определить, какие API они используют.
Update
Не могли бы вы объяснить мне, как родной процесс связывается с подстройки, перед загрузкой в пространстве процесса?
Это не так. Перед инъекцией tweak - отдельный dylib, который не связан с каким-либо двоичным кодом. CydiaSubstrate делает все инъекции. Основная часть CydiaSubstrate - специальный погрузчик dylib. Он динамически связан с процессом launchd
при запуске устройства, к процессу, который является первым процессом в iOS, который запускает все остальные процессы. Когда создается новый процесс, загрузчик CydiaSubstrate dylib проверяет все фильтры настройки, чтобы увидеть, какие из них ему нужно внедрить в процесс, и вводит их. После этого настройка загружается в адресное пространство процесса (становится частью процесса), и конструктор tweak вызывается, где обычно устанавливаются все крючки.
Не могли бы вы объяснить мне, как это делается?
Предположим, у вас есть массив имен классов objc, функций C/C++, фреймворков и dylibs, в качестве использования строк, которые вы хотели бы обнаружить. Это простое решение. Вы можете открыть файл tweak и просто просмотреть его для любых совпадений. Поскольку настройки обычно не очень велики, это не должно занимать много времени. И есть более трудное решение. Используйте dyld или любой другой API для разбора секций mach-o, чтобы найти импортированные символы и строковые литералы, а затем выполнить поиск по ним для любых совпадений.
Спасибо, пожалуйста, прочитайте мой ответ ниже Я достиг предела персонажа (: – user4397138