Может ли приложение для Android обойти заявленные разрешения?

Я скачал APK из стороннего источника (не из Google Play). Мой вопрос заключается в том, может ли это приложение для Android, хотя и заявлено, что оно может получить доступ только к моему USB-накопителю, может ли оно также выполнять другие действия (например, читать IMEI) без явного указания? По сути, мне интересно, действительно ли система Android предотвращает это или это просто то, что разработчик заявляет в своем манифесте?

Ваш телефон/планшет рутирован?
@MeerBorg нет, это не так

Ответы (2)

Как правильно заявляет Меер Борг в своем ответе : когда приложение установлено, менеджер пакетов читает его Manifestи отмечает разрешения, запрошенные в файлах, которыми управляет система Android ( /data/system/packages.xml, /system/etc/permissions/*.xml(один файл для каждого приложения)). Кроме того, для каждого разрешения существует определенная группа пользователей , которая будет назначена приложению 1 . Таким образом, каждый раз, когда приложение пытается получить доступ к функции, требующей разрешения, оно проверяется: если разрешение было объявлено в файле Manifest, доступ предоставляется, в противном случае — отказ. обратите внимание, что это упрощенное описание, хотя

Хотя это общее правило, для некоторых вещей есть возможность обойти разрешения. Если приложение, например, хочет отправить что-то в Интернет, оно также может сделать это, вызвав «намерение», попросив браузер открыть определенную страницу (например, http://bad.server/collector.php?info1=some_info&info2=more_info). Однако это не останется незамеченным для пользователя, так как браузер откроется на переднем плане и покажет это действие. Поэтому, если бы приложение использовало эту функцию, протест был бы услышан (обычно).

Если разработчик действительно хочет делать «плохие вещи», он может использовать и другой способ: иметь одно приложение со всеми необходимыми разрешениями, а второе — почти без них. Если у пользователя установлены оба приложения, второе может вызвать первое (с большими разрешениями) приложение для обработки «вещей», которые оно не может сделать само (из-за отсутствия разрешений) — так же, как описано выше для доступа в Интернет. обратите внимание, что этот принцип используется, например, для аддонов, а также для «общения между приложениями» в положительном смысле.

TL;DR:

Приложение ограничено запрашиваемыми разрешениями и не может напрямую обращаться к другим «вещам». «Косвенный» доступ не останется незамеченным.

PS:

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


1 Пример (обратите внимание на список «групп»):

shell@android:/ $ id
uid=2000(shell) gid=2000(shell) groups=1003(graphics),1004(input),1007(log),1009(mount),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats)

Команда id(без параметров) показывает информацию о "текущем пользователе". В этом случае я использовал adb shell, поэтому пользователь является «приложением оболочки» (скорее интегрированной оболочкой Unix ). Список групп показывает, какие разрешения предоставлены оболочке, поэтому она может, например, читать и записывать SDCard, получать доступ к Bluetooth и Интернету (плюс еще кое-что).

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

Так что, если ваш телефон не рутирован и не использует эксплойт. Или вы переупаковываете этот файл и его файл манифеста, чтобы добавить больше разрешений... он будет обращаться только к USB-накопителю, как указано. Система Android предотвращает любой другой доступ, и код, который пытается получить доступ к этим другим разрешениям, просто вернет ошибку с точки зрения программы.

Но я считаю, что даже доступ к USB-накопителю является проблемой, потому что он может получить доступ ко всем другим файлам, которые другие программы создают с помощью USB-накопителя, а не ко всей файловой системе, а только к ее части, которая определяется как «USB-накопитель». Но поскольку приложение не имеет доступа к Интернету, все, к чему оно обращается, остается на вашем устройстве.