【问题标题】:Run secure API calls as root, android以 root、android 身份运行安全 API 调用
【发布时间】:2011-08-26 00:44:27
【问题描述】:

我正在尝试运行一些安全(内部)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 几乎没有受到保护。

标签: android root


【解决方案1】:

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

su 命令不会更改调用它的进程的身份/权限 - 它的作用是让您启动具有提升权限的子进程。但它不是很清楚你如何以这种方式启动一个 android 应用程序(可能通过使用 app_process - 但真正安装为系统应用程序是正确的方法)。

另请注意,将您的应用设为系统应用仍然不会使其以 root 身份运行。

【讨论】:

  • 感谢您的详细解答!我会尝试检查是否有办法获取我使用的固件的密钥。否则,我可能不得不“煮”我自己的 android 版本,只是为了能够做我想做的事 :)
  • 从理论上讲,您应该能够从使用平台密钥签名的所有内容中删除旧签名,然后使用相同的密钥退出这些签名以及您的应用程序 - 从技术上讲,您不必重新编译任何内容源,但您可能必须手动/编写自己的脚本。顺便说一句,您可能不想以“root”身份运行,而是以“系统”身份运行
猜你喜欢
  • 2014-05-14
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 2017-07-29
相关资源
最近更新 更多