Как запустить подпрограммы с рут-правами на iOS?

С помощью Android SDK я могу запускать процесс как суперпользователь, вызывая su а затем запустить мой код. Как я могу сделать то же самое на iOS?

Вот что я использую на Android:

// Elevate to root
Process localProcess = Runtime.getRuntime().exec( "su");

// Now run some command as root
DataOutputStream localDataOutputStream = new DataOutputStream( localProcess.getOutputStream());
localDataOutputStream.writeBytes( "chmod 666 file.name\n");
localDataOutputStream.writeBytes( "exit\n");
localDataOutputStream.flush();

Я пробовал следующие команды C, но я получаю сообщение об ошибке, указывающее, что мой пароль неверен.

system( "ls -l /System/Library/TextInput/TextInput_zh.bundle/Keyboard-zh.plist"); // read start permissions
system( "sudo -s alpine | chmod 666 /System/Library/TextInput/TextInput_zh.bundle/Keyboard-zh.plist"); // trying change permissions
system( "ls -l /System/Library/TextInput/TextInput_zh.bundle/Keyboard-zh.plist"); // read changes

Журнал выглядит так:

-rw-r - r-- 1 корневое колесо 7813 16 декабря 10:47 /System/Library/TextInput/TextInput_zh.bundle/Keyboard-zh.plist

chmod: изменение разрешений для `/System/Library/TextInput/TextInput_zh.bundle/Keyboard-zh.plist': операция не разрешена

Мы верим, что вы получили обычную лекцию от местного системного администратора. Обычно это сводится к этим трем вещам:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

Пароль:

-rw-r - r-- 1 корневое колесо 7813 16 декабря 10:47 /System/Library/TextInput/TextInput_zh.bundle/Keyboard-zh.plist

Как программно запустить любой скрипт с правами root на iOS? Я ищу ответ, который будет работать на взломанных устройствах, но был бы доволен тем, что также работает на стандартных устройствах, если это возможно.

2 ответа

Одной из основных функций IOS является песочница, которая означает, что приложения находятся в собственной файловой системе, которая не видна другим приложениям. То, что вы хотите сделать, идет вразрез с защитным дизайном IOS.

Если вам нужно разрешить множеству приложений общаться друг с другом и обмениваться данными, есть способы и средства сделать это с помощью общих типов документов, экспортированных UTI и класса DocumentInteraction,

Ваш sudo команда искажена:

sudo -s alpine | chmod 666 /System/Library/TextInput/TextInput_zh.bundle/Keyboard-zh.plist

Что интерпретируется как:

sudo -s <sudo-command> | <non-sudo-command>

Это пытается запустить alpine команда с sudoи передать его вывод в chmod что не имеет смысла. поскольку chmod не запускается от имени root, выводит:

chmod: changing permissions of `/System/Library/TextInput/TextInput_zh.bundle/Keyboard-zh.plist': Operation not permitted

We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

И с тех пор sudo не был предоставлен пароль (-S аргумент), он запрашивает пароль, выводя:

Password:

Я думаю, что вы намеревались сделать:

echo <password> | sudo -S <command>

Где я полагаю, что вы намеревались использовать alpine в качестве пароля, который будет:

echo 'alpine' | sudo -S chmod 666 /System/Library/TextInput/TextInput_zh.bundle/Keyboard-zh.plist

Смотрите man(8) sudo для получения дополнительной информации о sudo,

Другие вопросы по тегам