Как обеспечивается разрешение Android?

Если я вызову функцию socket() в методах JNI C, приложение все равно выйдет из строя с ошибкой разрешения. А если в AndroidManifest.xml добавить строку Uses-Permission, то проблема устранена.

Таким образом, похоже, что проверка разрешений Android не реализована в виртуальной машине Dalvik, поскольку я вызываю собственную функцию C и все еще проверяюсь. Я хотел бы знать, где выполняется проверка, в ядре Android, или приложение отслеживается чем-то вроде ptrace для перехвата каждого системного вызова или любым другим способом. Большое спасибо.


person ZelluX    schedule 01.03.2011    source источник
comment
Технически это верно только для сокетов интернет-домена. Сокеты домена Unix, которые используют один и тот же вызов socket() с другой константой, не имеют обязательного группового идентификатора через модификацию ядра сети android paranoid.   -  person Chris Stratton    schedule 23.01.2013


Ответы (2)


Проверки выполняются ядром Linux с использованием членства в группах для определения прав доступа.

Если вы посмотрите код ответвления zygote в VM вы можете увидеть это, используя setgroups() для установки идентификаторов дополнительных групп. Если вы немного покопаетесь в коде фреймворка приложения, вы увидите, где он определяет разрешения и передает их функции forkAndSpecialize().

person fadden    schedule 01.03.2011
comment
Ссылка в ответе битая. Я думаю, что это эквивалентный файл: github.com/android/ platform_dalvik/blob/master/vm/native/ - person CommonsWare; 23.01.2013

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

См. загрузку Android NDK:

Если вы пишете собственный код, ваши приложения по-прежнему упакованы в файл .apk и по-прежнему работают внутри виртуальной машины на устройстве. Фундаментальная модель приложения для Android не меняется.

person RivieraKid    schedule 01.03.2011
comment
Комментарий относится к модели приложения, а не к модели безопасности. Собственный код не виртуализируется. - person fadden; 01.03.2011
comment
Хотя нативные приложения не запускаются непосредственно на виртуальной машине Dalvik, они по-прежнему работают в изолированной программной среде безопасности, унаследованной от виртуальной машины Dalvik, которая их запускает, — в противном случае вы сможете внедрить любой вредоносный код на чье-либо устройство и до тех пор, пока Приложение SDK могло работать, оно могло породить вашу вредоносную нативную полезную нагрузку. Важным моментом является то, что модель безопасности по-прежнему применяется — как продемонстрировал @ZelluX, когда необходимо было добавить соответствующее разрешение на использование в манифест. - person RivieraKid; 02.03.2011
comment
Строго говоря, это так, но песочницей является ядро ​​Linux, и она в равной степени применима ко всем процессам пользовательского пространства, запущенным на устройстве. Ваш ответ подразумевает, что механизм безопасности представляет собой изолированную программную среду для каждого процесса, используемую для приложений SDK, что не так. - person fadden; 02.03.2011