2017-09-01 100 views
0

我最近跳入Android开发教程并为了学习而自己开发应用程序。我想以适当的方式在我的代码中获得root权限。所以不要致电/system/xbin/su,而是使用类似seteuid(0)的东西。不幸的seteuid方法不适合我。在本机代码中获取Android应用程序的root权限

我是一个真正的设备,这是我扎根,启用调试模式下测试应用程序,以及我清楚地看到,通过调用/system/xbin/su当我的应用程序从系统中,不与个seteuid和seteguid发生(的setuid请求root权限并且setguid也不起作用,但我不希望这样做,因为它们只能降低权限)。

请给出建议,在哪里寻找合适的代码实现来请求root权限,就像它会做一流的开发人员一样。也许一些本地API调用?或者,每个人都只需拨打su即可获得所需的访问权限?

回答

0

在提升权限的Linux的常用方法 - 即,运行具有大于特权的应用程序登录的用户 - 是设置SUID标志上的可执行(例如,文件模式微克+ S .. )。这将使进程取得二进制所有者(通常是root)的身份,而不是登录用户。

即使在植根设备上,在Android上执行操作也很棘手。首先,您将无法使用包含具有SUID权限的二进制文件的常用(APK)机制来安装应用程序。其次,Android应用程序通常不是可执行文件 - 单个可执行文件处理启动所有应用程序。

不过,如果你想尝试在命令行上,它应该是可以设置SUID标志上的二进制文件,至少在某些文件系统中的位置。

如果你有一个扎根的Android,那么很可能已经有一些基础设施来控制特权提升。最有可能的是,“su”命令将起作用(因为会有内核mod来使其工作),并且它将提供凭证或其他方式来控制哪些应用程序可以使用它。我相信,正如你所建议的那样,调用“su”是在根用户的Android上进行特权提升的常用方式。但是,这是充满困难的。有一个文档https://su.chainfire.eu/,它解释了如何在有根的Android设备中实现“su”,并就如何正确使用它提供了一些指导。

+0

谢谢,我已经通过调用应用程序中苏流程解决我的问题,所以基本上通过创建的“su”过程来处理受保护的内容。它工作正常,稳定和快速。此外,我检查了Android的su实现,尝试过,但失败可能是因为apt不是你说的可执行文件。好吧,谢谢! –

1

万一张贴我的解决方案,而我在Java中没有(在此不再本机代码)的问题:

protected void hideRoot() throws IOException, InterruptedException { 
    Process p = Runtime.getRuntime().exec("su"); 
    DataOutputStream dos = new DataOutputStream(p.getOutputStream()); 
    dos.writeBytes("mount -o remount,rw /system\n"); 
    dos.writeBytes("mv /system/xbin/su /system/xbin/suhidden\n"); 
    dos.writeBytes("exit\n"); 
    dos.flush(); 
    p.waitFor(); 
} 
相关问题