我可以要求Zygote以root身份运行我的应用程序吗?

时间:2012-07-19 13:24:52

标签: android root

我正在调查在Java Android应用程序和/或自己的JNI中获取超级用户权限的可能方法。众所周知的答案似乎是,只能从那里运行“su”子shell和命令行命令,既不整洁也不实用。我愿意接受这个决议,但我仍然希望听到关于这个“假设”情景的意见。

通过java.com.android.server.am.ActivityManagerServicejava.android.os.Processdalvik_system_Zygote.cpp文件附近的Android来源进行阅读,在我看来,在应用程序启动期间,会检查应用程序记录的UID和( )GID(s)和所有这些值通过套接字传递给Zygote。 Z随后挑选数据并将其传递给setuid() fork()之后的--setuid=0 --setgid=0调用,无需进一步检查。因此,在我看来,如果更改了活动管理器路径,将{{1}}和{{1}}简单地传递给Zygote套接字应该会导致使用根UID运行我的活动。

这一切看起来都太简单了,我怀疑沿途会出现问题。不幸的是,对于像我这样没有经验的程序员实际去尝试,有太多的代码和新东西。有没有人这样走过,或者有什么明显的原因导致这不起作用?

1 个答案:

答案 0 :(得分:2)

我想我刚刚找到了自己问题的答案。积分给@Chris Stratton,他指出我使用模拟器,并指出了这种情况会有多荒谬。

密钥位于我看不到的地方,之间通过Zygote套接字发送命令和Zygote二进制文件本身。检查发生的地点是com.android.internal.os.ZygoteConnection,方法applyUidSecurityPolicy。如果调用者进程属于root,则可能确实要求生成的UID为零(或者其他任何事情)。普通用户也可以使用套接字,但要求新的UID或GID会产生ZygoteSecurityException