Получение root-прав на iOS для NSFileManager (Jailbreak)

Я пытаюсь записать файл в корневой раздел устройства. Это приложение для джейлбрейка, поэтому оно устанавливается в /Applications. При записи в корневую файловую систему с использованием NSFileManager запись завершается ошибкой "Отказано в доступе".

Кажется, что мое приложение не работает как root. Однако он установлен в /Applications. Как мое приложение может стать root?


person JonasG    schedule 20.10.2011    source источник


Ответы (1)


Это правда, приложение должно работать как root для доступа к немобильным каталогам. Обсудив это с Optimo и Saurik, я наконец нашел правильный способ получить привилегии root.

  1. В функцию main() добавьте setuid(0); и setgid(0);
  2. Создайте приложение в обычном режиме.
  3. Создайте копию исполняемого файла в комплекте приложений.
  4. Откройте исходный исполняемый файл и замените его содержимое этим скриптом:

    #!/bin/bash
    dir=$(dirname "$0")
    exec "${dir}"/COPIED_EXECUTABLE_NAME "$@"
    

    Непосредственный запуск корневого приложения не работает на iOS. Поэтому мы заменяем основной исполняемый файл приложения сценарием, который запускает корневой исполняемый файл.

  5. В терминале перейдите к набору приложений.

  6. chmod 0775 исходный исполняемый файл и chmod 6775 скопированный исполняемый файл.
  7. Скопируйте пакет приложений в /Applications на устройство. Перезапустите SpringBoard, и все будет готово. Если приложение не запускается, повторите шаги 5 и 6 на устройстве.
person JonasG    schedule 09.01.2012
comment
не могли бы вы указать, как шаг 3 и далее будет выполняться только посредством кодирования?\ - person Deepika Lalra; 27.06.2013
comment
Привет, где я могу найти этот путь NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docDirectory = [пути objectAtIndex:0]; потому что я не могу отлаживать - person Dhekra Zaied; 23.02.2015
comment
Я работаю на iOS 6, если я перемещу пакет приложений в /Applications, он не появится на трамплин :( - person dvkch; 27.07.2016
comment
Исправлено: я не удалил старое приложение, установленное через Xcode, поэтому трамплин не регистрировал новое с тем же rfcid - person dvkch; 28.07.2016