我正在研究在Java Android应用程序及其本身的JNI中获取超级用户权限的可能方法。众所周知,唯一可行的方法似乎是仅能从“su”子shell和命令行命令运行,这既不整洁也不实用。我愿意接受这个解决方案,但仍想听听对于这种“如果”的情况的意见。
通过阅读靠近
这一切似乎太简单了,我怀疑其中会出现问题。不幸的是,对于像我这样经验不足的程序员来说,有太多的代码和新东西需要去尝试。有人走过这条路吗?或者有什么明显的原因为什么这不会起作用吗?
通过阅读靠近
java.com.android.server.am.ActivityManagerService
、java.android.os.Process
和dalvik_system_Zygote.cpp
文件的Android源代码,我发现在应用程序启动期间,应用程序记录将被检查UID和(一系列)GID,并通过套接字将所有这些值传递给Zygote。然后,Z会在fork()
调用后无需进一步检查即将数据传递给setuid()
。因此,我认为,如果Activity Manager路径被更改,则简单地通过Zygote套接字传递--setuid=0
和--setgid=0
应该会导致使用root UID运行我的Activity。这一切似乎太简单了,我怀疑其中会出现问题。不幸的是,对于像我这样经验不足的程序员来说,有太多的代码和新东西需要去尝试。有人走过这条路吗?或者有什么明显的原因为什么这不会起作用吗?