Android 权限是如何强制执行的?
如果我在 JNI C 方法中调用 socket()
函数,应用程序仍然会因权限错误而失败。如果我在 AndroidManifest.xml 中添加使用权限行,问题就得到解决。
所以看来 Android 权限检查没有在 Dalvik 虚拟机中实现,因为我正在调用本机 C 函数并且仍然受到检查。我想知道如何在 Android 内核中执行检查,或者如何使用 ptrace 之类的东西跟踪应用程序以拦截每个系统调用,或以任何其他方式。非常感谢。
If I call socket()
function in JNI C methods, the application will still fail with a permission error. And if I put a uses-permission line in AndroidManifest.xml, the problem is fixed.
So it seems Android permission check is not implemented in Dalvik virtual machine since I'm calling a native C function and still gets checked. I would like to know how where check is performed, in Android kernel, or the application is traced with something like ptrace
to intercept every system call, or any other way. Many thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
检查由 Linux 内核执行,使用组成员身份来确定访问权限。
如果您查看zygote fork代码 VM,您可以使用 setgroups() 设置补充组 ID 来查看它。如果您在应用程序框架代码中稍微追踪一下,您可以看到它在哪里确定权限并将它们传递给 forkAndSpecialize()。
The checks are performed by the Linux kernel, using group membership to determine access rights.
If you look in the zygote fork code in the VM you can see it using setgroups() to set the supplementary groups IDs. If you chase it around a bit in the app framework code you can see where it determines the permissions and passes them down to forkAndSpecialize().
本机代码在 SDK 应用程序使用的同一沙箱中运行,因此受到与 SDK 应用程序相同的安全模型的约束。
请参阅下载 Android NDK:
Native code runs in the same sandbox that SDK apps use and are therefore subject to the same security model as SDK apps.
See Download the Android NDK: