如何强制执行A​​ndroid权限?

Zel*_*luX 16 java-native-interface android dalvik

如果我socket()在JNI C方法中调用函数,应用程序仍将失败并出现权限错误.如果我在AndroidManifest.xml中放置一个uses-permission行,问题就解决了.

所以似乎在Dalvik虚拟机中没有实现Android权限检查,因为我正在调用本机C函数并且仍然会被检查.我想知道在Android内核中执行检查的方式,或者跟踪应用程序的方式是ptrace拦截每个系统调用,或者任何其他方式.非常感谢.

fad*_*den 19

检查由Linux内核执行,使用组成员身份来确定访问权限.

如果您查看VM 中的zygote fork代码,您可以使用setgroups()来设置补充组ID.如果你在app框架代码中追逐它,你可以看到它确定权限的位置并将它们传递给forkAndSpecialize().


Riv*_*Kid 5

本机代码在SDK应用程序使用的相同沙箱中运行,因此与SDK应用程序具有相同的安全模型.

请参阅下载Android NDK:

如果您编写本机代码,您的应用程序仍然打包成.apk文件,它们仍然在设备上的虚拟机内运行.基本的Android应用程序模型不会改变.

  • 严格来说,这是真的,但"沙箱"是Linux内核,它同样适用于设备上运行的所有用户空间进程.您的回答意味着安全机制是用于SDK应用程序的每进程沙箱,但实际情况并非如此. (6认同)
  • 注释是指应用程序模型,而不是安全模型.本机代码未虚拟化. (2认同)