我在Android应用中处理一些路由功能,需要访问ioctls。由于使用ioctls的应用程序需要root权限才能运行,因此我能够调用它们的唯一方法是链接一个单独的可执行文件,并使用Runtime.getRuntime().exec()
从Java调用它。
有没有办法在Android中从JNI访问root权限而无需构建单独的可执行文件?构建可执行文件是访问ioctl的最佳方法吗?
答案 0 :(得分:3)
非root进程无法成为root(超出漏洞利用),所以是的,您需要一个单独的进程。
这是从linux继承而来的 - 不同之处在于没有直接的方法从启动器以root身份启动Android应用程序进程,因为这会向zygote发送一个意图,该意图会分叉并且特权 - 减少专门用于申请流程。 (可能有一种迂回的方法来手动创建一个应用程序进程,但你必须有一个应用程序进程来执行它,因此根据定义它将是一个辅助进程。并且它作为一个不是一个应用程序是低效的zygote的孩子不会继承系统库的共享映射,因此必须将自己独特的副本加载到内存中。
ioctl()只是另一个系统调用,只有对该fd(来自其设备文件)的访问权限才需要root。显然,你想要使用的是这种情况,但其他人则没有成功。例如,大多数Android框架IPC最终都是用Binder ioctl实现的,它们通常用于控制网络套接字。
答案 1 :(得分:0)
ioctl()调用不明确要求使用root权限(或任何特定权限)。正如Chris Stratton所说,您需要获得访问相关设备的权限。如果你没有得到上述许可,除了攻击之外,你不会得到它。
你最终想要实现的目标是什么?