Android ioctl - 获取 root 权限和使用方法

4

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

在 Android 中,是否有一种方法可以通过 JNI 访问 root 权限而不需要构建单独的可执行文件?构建可执行文件是访问 ioctl 的最佳方法吗?

2个回答

3

非root进程无法成为超级用户(除非使用漏洞),因此您需要一个单独的进程。

这是从Linux继承而来的,不同之处在于没有直接的方法从启动器启动Android应用程序进程作为root,因为它会发送一个意图到zygote,然后fork出并降低特权子进程,该进程专门用于成为应用程序进程。(也许有一种迂回的方法手动创建应用程序进程,但是您必须有一个应用程序进程才能执行,因此它将被定义为辅助进程。如果一个不是zygote的子进程的应用程序将不会继承系统库的共享映射,因此必须将其自己的独特副本加载到内存中),

ioctl()只是另一个syscall,仅在该fd(从其设备文件)的访问权限要求根权限时才需要。显然,这适用于您想要使用的那些文件描述符,但其他文件描述符则不需要。例如,大多数Android框架IPC最终都使用Binder ioctl实现,并且通常用于控制网络套接字。


0

ioctl()调用不需要显式地要求root权限(或任何特定的权限)来使用。正如Chris Stratton所说,您需要访问特定设备的权限。如果您没有该权限,除了利用漏洞外,您将无法获得它。

您最终想要实现什么目标?


攻击利用是现有进程获得权限的唯一途径,但许多设备已经配置(无论是通过用户友好的设计还是以前利用攻击)具有 suid 'su' 类型工具,可用于启动以 root 权限运行的辅助进程。至少这意味着“此时此刻”不需要攻击利用,如果设备允许刷写替代固件,则可能根本不需要攻击利用。 - Chris Stratton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接