Android ioctl-根权限和使用

Android ioctl-根权限和使用,android,java-native-interface,android-ndk,ioctl,Android,Java Native Interface,Android Ndk,Ioctl,我正在Android应用程序中开发一些路由功能,需要访问IOCTL。由于使用ioctl的应用程序需要root权限才能运行,因此我能够调用它们的唯一方法是链接一个单独的可执行文件,并使用Runtime.getRuntime().exec()从Java调用它 有没有一种方法可以从Android中的JNI访问根权限,而无需构建单独的可执行文件?构建可执行文件是访问ioctl的最佳方法吗?非根进程无法成为根进程(除了利用漏洞),因此,是的,您需要一个单独的进程 这是从linux继承而来的,没有任何改变,

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


有没有一种方法可以从Android中的JNI访问根权限,而无需构建单独的可执行文件?构建可执行文件是访问ioctl的最佳方法吗?

非根进程无法成为根进程(除了利用漏洞),因此,是的,您需要一个单独的进程

这是从linux继承而来的,没有任何改变,不同之处在于没有直接的方法从启动器以root用户身份启动android应用程序进程,因为这会向zygote发送一个意图,而zygote会分叉,特权会减少专门从事应用程序进程的子进程。(可能有一种迂回的方法来手动创建应用程序进程,但您必须有一个应用程序进程来执行此操作,因此根据定义,它将是一个辅助进程。这将是低效的,因为不是zygote子代的应用程序不会继承系统库的共享映射,因此必须加载其在内存中拥有唯一副本)

ioctl()只是另一个系统调用,仅当对该fd(从其设备文件)的访问权限不允许时才需要root。很明显,你想用的就是这种情况,但是其他的是不受干扰的。例如,大多数Android框架IPC最终是通过Binder ioctl实现的,它们通常用于控制网络套接字。

ioctl()调用不明确要求根权限(或任何特定权限)才能使用。正如Chris Stratton所说,您需要获得访问特定设备的许可。如果你没有说许可,你将不会得到它,除了利用漏洞


您最终想要实现什么?

利用漏洞将是现有流程获得许可的唯一途径,但许多设备已配置(通过最终用户友好设计或以前利用漏洞)具有suid“su”类型的工具,可用于启动以root用户身份运行的助手流程。至少这意味着“目前”不需要利用漏洞,如果设备出厂时允许闪烁备用固件,则可能不需要利用漏洞。