我正在研究在 Java Android 应用程序和/或其自己的 JNI 中获取超级用户权限的可能方法。众所周知的答案似乎是只能从那里运行“su”子shell和命令行命令,这既不简洁也不实用。我愿意接受这个决议,但我仍然想听听关于这个“假设”场景的意见。
阅读附近的 Android 源代码java.com.android.server.am.ActivityManagerService
和java.android.os.Process
文件dalvik_system_Zygote.cpp
,在我看来,在应用程序启动期间,会检查应用程序记录的 UID 和(一个)GID(s)列表,并且所有这些值都通过套接字传递给 Zygote。Z 随后拾取数据并将其传递setuid()
给fork()
呼叫之后,无需进一步检查。因此,在我看来,如果 Activity Manager 路径被更改,简单的传递--setuid=0
并可能传递--setgid=0
给 Zygote 套接字应该会导致使用根 UID 运行我的 Activity。
这一切似乎都太简单了,我怀疑在此过程中会出现问题。不幸的是,对于像我这样没有经验的程序员来说,有太多的代码和新东西去尝试。有没有人走这条路,或者有什么明显的原因导致这行不通?