【问题标题】:How to run with system permission如何在系统权限下运行
【发布时间】:2015-04-24 07:47:28
【问题描述】:

我的应用程序正在尝试获取带有隐藏 APIs 的系统 VPN 配置文件列表。但是,隐藏的 API 需要在系统进程中运行。 google后找到this,可以新建一个root权限的进程。

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

但它只能在新进程中运行 shell 命令。如何在新进程中运行我的自定义函数?

【问题讨论】:

    标签: android reflection process root hidden


    【解决方案1】:

    以底层系统的权限运行您的应用程序。您需要使用操作系统的固件证书对您的应用程序进行签名。如果您针对特定设备,这将只是您的一个选项。

    然后你可以在AndroidManifest.xml文件中分享系统的uid。

    android:sharedUserId="android.uid.system"
    

    既然您有平台密钥,那么您是如何签署您的 APK 的?这是我用来签署我的 APK 的 .bat 文件。您可以在命令中看到需要的文件(signapk.jarplatform.x509.pemplatform.pk8):

    @echo off
    
    echo Signing APK "%1" with platform certificate.
    java -Xms256m -Xmx512m -jar %~dp0\sign\signapk.jar -w %~dp0\sign\platform.x509.pem  %~dp0\sign\platform.pk8 %1 test.apk
    move test.apk %1 >NUL
    echo APK is signed.
    
    timeout 2
    

    【讨论】:

    • 我已尝试使用目标/产品/安全中的平台密钥使用此解决方案,但 adb install 给出错误 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE。如果我理解正确,对于不同的制造商或不同的设备,它需要不同的签名密钥,这对我这个应用程序开发人员来说似乎是不可能的。有许多现有的应用程序使用 root 权限。我徘徊它是如何实现的,但找不到相关的源代码。
    • 我在答案中添加了更多内容。您如何签署您的 APK,使用哪些文件?
    • 确保您的 APK 包尚未安装。重新开始。
    • 我正在使用来自android.googlesource.com/platform/build/+/android-5.1.1_r1/… 的命令文件、两个platform.* 文件和来自learn2crack.com/2014/02/sign-android-apk-zip.html 的signapk.jar。然后在 MacOS 下使用以下命令为我的 apk 签名:“java -jar signapk.jar platform.x509.pem platform.pk8 app-release-unsigned.apk MySigned.apk”。为了确保从头开始,我将包重命名为新包,但仍然是 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE。 platform.* 文件是否适用于我的已植根三星 Note3?
    • 文件名看起来正确,命令看起来正确。我不明白为什么它会失败。虽然看起来很疯狂,但你试过吗? stackoverflow.com/a/22803061/503508 。这是我最后的建议。
    猜你喜欢
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2012-07-12
    • 2020-08-06
    相关资源
    最近更新 更多