Android应用代码中获取root权限失败的问题求助
解决App内获取Root权限失败问题
先确认App是否真的能获取Root权限
虽然adb shell下su能拿到root,但App内执行su可能因为授权未通过或路径问题没拿到权限,先做验证:
Process process = null; try { // 先通过adb shell执行`which su`获取su的绝对路径,替换下面的路径 process = Runtime.getRuntime().exec("/system/bin/su"); // 执行id命令验证是否为root OutputStream os = process.getOutputStream(); os.write("id\n".getBytes()); os.flush(); os.close(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { // 输出结果包含uid=0(root)则说明已获取root权限 android.util.Log.d("RootDebug", line); } reader.close(); int exitCode = process.waitFor(); android.util.Log.d("RootDebug", "su exit code: " + exitCode); } catch (Exception e) { e.printStackTrace(); } finally { if (process != null) { process.destroy(); } }
如果日志里没有uid=0,说明App没拿到授权:
- 检查Magisk等Root管理器是否给App授权,可设置永久授权
- 确保App在前台时请求Root权限,避免后台授权弹窗被系统拦截
排查FridaInjector初始化失败原因
报错在FridaInjector.Builder构造方法,说明它内部的Root权限检查未通过:
- 验证frida-inject的可执行权限
在adb shell执行:
su -c chmod +x /你的App私有目录/frida-inject su -c /你的App私有目录/frida-inject --version
如果无法执行,先给frida-inject添加可执行权限,确保root用户能正常调用它。
指定su绝对路径给FridaInjector
如果FridaInjector内部默认的su路径不对,尝试修改初始化逻辑,确保它使用你通过which su查到的绝对路径(比如给Builder添加设置su路径的方法,或修改源码里的su命令路径)。调整FridaInjector的权限检查逻辑
查看FridaInjector源码第179行的权限检查逻辑,比如是否额外校验了系统签名(你没有系统签名,这会导致失败),移除这类无关检查,只保留核心的Root权限验证(比如通过执行id命令判断uid是否为0)。
其他注意事项
- 部分Root环境需要用
su -c直接包裹命令执行,确保操作在Root上下文 - 尽量在Activity前台触发Root权限请求,避免Service等后台组件首次启动时因弹窗拦截导致授权失败
内容的提问来源于stack exchange,提问作者kenshin
相关产品推荐
相关产品推荐

