以root身份运行安全的API调用,安卓

3

我正在尝试运行一些安全的(内部)API调用,但显然会出现安全异常:

java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.provider.Telephony.SPN_STRINGS_UPDATED from pid=24864, uid=10107

我想在root权限下运行相同的调用,但首先我不确定这是否可能。当然,我可以通过以下方式获取root权限:

Process p = Runtime.getRuntime().exec("su");

但似乎并没有起到作用。我仍然收到相同的安全异常。我看过的样例之一尝试先等待 su 调用完成,如下所示:

Process p = Runtime.getRuntime().exec("su");
p.waitFor();

但这也没帮助我。那我做错了什么呢?

这个能做到吗?如果很重要,我正在尝试使用PhoneFactory获取com.android.internal.telephony.Phone类的实例(通过反射获取)。除去反射,它看起来应该是这样的:

// Initialize the telephony framework
PhoneFactory.makeDefaultPhones(this);
// Get the default phone
Phone phone = PhoneFactory.getDefaultPhone();

尝试做你所做的非常相似的事情。我的目标是通过编程实现CLIR更改。当然,我卡在了同样的地方。如果Native PhoneApp没有受到严格保护,我会感到非常惊讶。 - Zelimir
1个回答

5

你的应用或服务需要使用与核心系统应用相同的密钥签名,并请求与它们共享用户 id。如果你有可用的 su 命令,那么你可能正在运行一款定制的固件;请向提供该命令的人了解如何添加新的系统应用程序。

su 命令不会更改调用它的进程的身份/权限——它只是让你以提升的权限启动子进程。但很难说你该如何以这种方式启动 Android 应用程序(可能需要使用 app_process——但实际上将其安装为系统应用程序是正确的方法)。

还要注意,使你的应用成为系统应用程序并不意味着它以 root 用户身份运行。


谢谢你详细的回答!我会尝试检查是否有获取我使用固件密钥的方法..否则,我可能不得不“制作”自己的Android构建,只为了能够做我想做的事 :) - Artiom Chilaru
理论上,您应该能够从使用平台密钥签名的所有内容中删除旧签名,然后使用相同的密钥重新签署这些内容以及您的应用程序 - 您不必从源代码重新编译任何内容,但可能需要手动执行或编写自己的脚本。顺便说一句,您可能不想作为“root”运行,而是作为“system”运行。 - Chris Stratton

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