Как самостоятельно добавить root-права в какое-то приложение?

Есть ли способ, которым я намеренно предоставляю root-права какому-либо приложению? Не автоматически через SuperSU, когда конкретное приложение запрашивает разрешение root, а таким образом, чтобы выбрать приложение с помощью какого-либо инструмента и предоставить ему права root.

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

Ответы (2)

Нет. Вы должны попросить об этом разработчика приложения.

В UNIX-подобных системах разрешения управляются чем-то, что называется UID.

У каждого процесса есть один, и он диктует, к чему они могут получить доступ. Кроме того, есть также группы, у которых есть разрешение, которое могут использовать их участники. Когда у приложения есть разрешения, например Write to SD card, они помещаются в группу, у которой есть это разрешение.

Права root являются исключением, поскольку они объявлены не в манифесте приложения, а в его коде. Root также является не группой, а отдельным UID (поскольку это отдельный пользователь), поэтому приложению не так просто его использовать. Приложения с root-правами должны быть специально написаны для этого.

Это работает следующим образом: каждый раз, когда приложение хочет что-то сделать от имени root, suвместо этого оно должно запрашивать двоичный файл. suзатем спросит приложение, которое управляет этими разрешениями (например, SuperSU), разрешено ли приложению получить root-доступ. Если это не так, вам будет предложено разрешить или запретить это. Тогда действие выполняется как root, а не как пользователь приложения. Эти действия не являются неотъемлемой частью приложения, а являются внешним исполняемым файлом.

Хотя теоретически можно добавить это в приложение, это будет нетривиальный процесс, требующий знания кода smali, который является внутренним форматом виртуальной машины Dalvik (часть системы, которая запускает файл apk), называемая маленький И даже тогда возникнет огромный риск для безопасности, если приложение позволит другим приложениям получить к нему доступ: оно не будет знать, как отделить привилегированный root-доступ от обычного доступа. Так что на самом деле это нереально.

Для тех, кто не знает, что такое smali: это диалект ассемблера для кода виртуальной машины Android dalvik, который часто используется при обратном проектировании файлов dex. Что может быть немного неясно: приложение должно само позаботиться о том, чтобы стать root программно. Вот почему разработчик должен включить его. Добавление его в SuperSU не помогает, пока приложение не использует свои права root.
Итак, я не могу открыть какой-либо корневой текстовый файл через мой любимый текстовый редактор, если программисты не закодировали приложение для приема открытия корневых файлов?
Абсолютно правильно. В качестве примера: если приложение не будет запущено с правами root и попытается открыть какой-либо «корневой файл», оно просто получит «отказ в доступе» — поскольку доступ к файлу по-прежнему будет выполняться с UID приложения (это не будет запрашивать разрешения суперпользователя, чтобы открыть его). С другой стороны, если приложение запускается с использованием корневого UID (т . е su <app>.), оно будет обращаться к этому корневому файлу как root и, таким образом, получит разрешение.
Вот почему я не мог использовать некоторые другие текстовые редакторы для чтения корневых файлов :).
@Izzy AFAIK, вы не можете запустить обычное приложение для Android с корневым UID или изменить UID запущенного приложения. Единственное, что вы можете сделать, это запускать программы командной строки с помощью su и, следовательно, выполнять команды с правами администратора.
@ Роберт, в моем описании намеренно использовались простые слова, чтобы его было легко понять. Конечно, это не на 100% точно, но грубо объясняет «почему я не могу ...» спрашивающего. Объяснение всего принципа не уместилось бы в простом комментарии :)
Спасибо, ребята, я обновил свой ответ. Я вижу, что это не самая простая тема для усвоения.
Я предполагаю, что установка бита setuid невозможна. Android не так уж и похож на Linux. :)
@Broam хорошо, у меня нет двоичного файла setuid на моем телефоне, так что я думаю. Но Android использует только ядро ​​​​Linux, это не Linux, и я почти уверен, что он не совместим с POSIX.

Я нашел способ, который может вам помочь. Я использовал это, чтобы предоставить root-доступ к Tasker .

Если вы используете эмулятор терминала, чтобы предоставить доступ для чтения, но не для записи к папке, используя

  • su
  • chmod 775 /location/of/folder/

тогда ваш текстовый редактор сможет прочитать этот каталог, и поэтому, если вы сможете попытаться сохранить файл в папке, он попытается запросить разрешение root.

Также может просто выдавать ошибку записи.

Все каталоги /location/of/folder/от корня до верха должны быть доступны для чтения/прохода. Также SELinux может запретить доступ. Так что этот подход редко практичен.