Android ioctl - root权限和用法

时间:2011-08-08 13:52:11

标签: android java-native-interface android-ndk ioctl

我在Android应用中处理一些路由功能,需要访问ioctls。由于使用ioctls的应用程序需要root权限才能运行,因此我能够调用它们的唯一方法是链接一个单独的可执行文件,并使用Runtime.getRuntime().exec()从Java调用它。

有没有办法在Android中从JNI访问root权限而无需构建单独的可执行文件?构建可执行文件是访问ioctl的最佳方法吗?

2 个答案:

答案 0 :(得分:3)

非root进程无法成为root(超出漏洞利用),所以是的,您需要一个单独的进程。

这是从linux继承而来的 - 不同之处在于没有直接的方法从启动器以root身份启动Android应用程序进程,因为这会向zygote发送一个意图,该意图会分叉并且特权 - 减少专门用于申请流程。 (可能有一种迂回的方法来手动创建一个应用程序进程,但你必须有一个应用程序进程来执行它,因此根据定义它将是一个辅助进程。并且它作为一个不是一个应用程序是低效的zygote的孩子不会继承系统库的共享映射,因此必须将自己独特的副本加载到内存中。

ioctl()只是另一个系统调用,只有对该fd(来自其设备文件)的访问权限才需要root。显然,你想要使用的是这种情况,但其他人则没有成功。例如,大多数Android框架IPC最终都是用Binder ioctl实现的,它们通常用于控制网络套接字。

答案 1 :(得分:0)

ioctl()调用不明确要求使用root权限(或任何特定权限)。正如Chris Stratton所说,您需要获得访问相关设备的权限。如果你没有得到上述许可,除了攻击之外,你不会得到它。

你最终想要实现的目标是什么?