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

时间:2011-03-01 13:04:15

标签: android java-native-interface dalvik

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

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

2 个答案:

答案 0 :(得分:19)

检查由Linux内核执行,使用组成员资格来确定访问权限。

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

答案 1 :(得分:5)

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

请参阅Download the Android NDK

  

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