Android ioctl - root 权限和使用

Posted

技术标签:

【中文标题】Android ioctl - root 权限和使用【英文标题】:Android ioctl - root permissions and usage 【发布时间】:2011-08-08 13:52:11 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

没有办法让非 root 进程成为 root(除了漏洞利用),所以是的,你需要一个单独的进程。

这是从 linux 继承而来的,不同之处在于没有直接的方法可以从启动器以 root 身份启动 android 应用程序进程,因为这会向 zygote 发送一个意图,它会分叉并降低一个专门从事申请流程。 (可能有一种迂回的方法来手动创建一个应用程序进程,但是你必须有一个应用程序进程才能做到这一点,所以它从定义上讲是一个辅助进程。作为一个不是zygote 的子级不会继承系统库的共享映射,因此必须将自己的唯一副本加载到内存中)

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

【讨论】:

【参考方案2】:

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

你最终想要达到什么目标?

【讨论】:

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

以上是关于Android ioctl - root 权限和使用的主要内容,如果未能解决你的问题,请参考以下文章

可以检查 ioctl 的权限

ioctl 命令的用户权限检查

Android获取ROOT权限的通用方法

为啥 ioctl I_SENDFD 不返回任何权限(EPERM)? [复制]

android中怎么对没有root权限的手机, 进行数据库表的增删改查。

具有root权限的Android服务