永久root带文件

因为开发需要,我经常会用到adb这个工具(Android Debug Bridge),我们都知道adb shell默认是没有root权限的,修改系统文件就很不方便了,adb push一个文件就提示Permission Denied。删除system下的文件也没有权限。其实有两种方法可以获取adb shell的root权限,这两种方法的前提都是手机已经root。 1、用su可以提权,直接执行su就会看到用户命令提示符由”$”变成了”#”,如果手机没有root,会提示su: Permission Denied。这个文件不是每个手机都有的,可以百度。 解压后把su放在adb同一目录下,执行:

adb push su /system/bin/adb shell chmod4755/system/bin/su

如果提示Read-only filesystem,那么就要重新挂载一下/system,把只读挂载成可读写,只有手机root了才能运行:

mount -o remount,rw/dev/block/mtdblock0/system /

再运行su就能让adb shell获取root权限了。 2、可以修改根目录下的default.prop提权: 根目录默认是不允许修改的,执行

mount -o remount,rw rootfs/

用vi打开default.prop,找到ro.secure,修改为ro.secure=0,保存后重启,再adb shell一下,就会有root权限了。 方法:

修改./default.prop

把ro.secure设为0,persist.service.adb.enable设为1,adbd进程就会以root用户的身份启动。

其实两篇文章大体效果不同,这个是完全破除限制,下文只是部分 至于文中所提到的su文件,是指被修改过的,无任何验证的,这样安全性大大降低,推荐完整root前,先备份原su文件。

原理:

可以看一下Android系统根目录下的/init.rc的片段:

... ...

# adbd is controlled by the persist.service.adb.enable system property

service adbd /sbin/adbd

disabled

# adbd on at boot in emulator

on property:ro.kernel.qemu=1

start adbd

on property:persist.service.adb.enable=1

start adbd

on property:persist.service.adb.enable=0

stop adbd

... ...

这里定义了一个触发器,只要persist.service.adb.enable值被置为1,就会启动/sbin/adbd。

在build目录下搜索一下,发现了main.mk中有这样的代码片段

## user/userdebug ##

user_variant := $(filter userdebug user,$(TARGET_BUILD_VARIANT))

enable_target_debugging := true

ifneq (,$(user_variant))

# Target is secure in user builds.

ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1

tags_to_install := user

ifeq ($(user_variant),userdebug)

# Pick up some extra useful tools

tags_to_install += debug

else

# Disable debugging in plain user builds.

enable_target_debugging :=

endif

# TODO: Always set WITH_DEXPREOPT (for user builds) once it works on OSX.

# Also, remove the corresponding block in config/product_config.make.

ifeq ($(HOST_OS)-$(WITH_DEXPREOPT_buildbot),linux-true)

WITH_DEXPREOPT := true

endif

# Disallow mock locations by default for user builds

ADDITIONAL_DEFAULT_PROPERTIES += ro.allow.mock.location=0

else # !user_variant

# Turn on checkjni for non-user builds.

ADDITIONAL_BUILD_PROPERTIES += ro.kernel.android.checkjni=1

# Set device insecure for non-user builds.

ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0

# Allow mock locations by default for non user builds

ADDITIONAL_DEFAULT_PROPERTIES += ro.allow.mock.location=1

endif # !user_variant

ifeq (true,$(strip $(enable_target_debugging)))

# Target is more debuggable and adbd is on by default

ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 persist.service.adb.enable=1

# Include the debugging/testing OTA keys in this build.

INCLUDE_TEST_OTA_KEYS := true

else # !enable_target_debugging

# Target is less debuggable and adbd is off by default

ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0 persist.service.adb.enable=0

endif # !enable_target_debugging

这段代码我大致解释一下:

主要通过判断当前的编译模式来给几个属性赋予不同的值,然后把属性存储在ADDITIONAL_DEFAULT_PROPERTIES这个变量中,这个变量在后面是要写到根目录下的/default.prop中去,在系统启动时被属性服务加载的。也就是说我们在/default.prop中看到的几个属性的值是在这里设置的。

只看两个属性ro.secure,persist.service.adb.enable。当前是user模式的话,编译系统会把ro.secure置为1,把persist.service.adb.enable置为0.也就是说,用user模式编译出来的系统运行在安全模式下,adbd默认关闭。即使通过设置属性的方式打开,adbd进程的用户也是shell,不具有root权限。这样,普通用户或者开发者拿到一个机器后,通过PC运行adb shell时,是以shell用户登录机器的。

好了,现在把ro.secure置为0,再重新编译,只要设置属性persist.service.adb.enable的值为1,adbd进程就会以root用户的身份启动。

转载于:https://www.cnblogs.com/rosepotato/p/3142397.html

转 Android adb root权限相关推荐

  1. [置顶] Android adb root权限

    永久root带文件 因为开发需要,我经常会用到adb这个工具(Android Debug Bridge),我们都知道adb shell默认是没有root权限的,修改系统文件就很不方便了,adb pus ...

  2. Android adb root权限

    永久root带文件 因为开发需要,我经常会用到adb这个工具(Android Debug Bridge),我们都知道adb shell默认是没有root权限的,修改系统文件就很不方便了,adb pus ...

  3. android adb 存储权限,android adb 权限修改

    1. 修改 ADB ROOT权限: system/core$ git diff adb/adb.c diff --git a/adb/adb.c b/adb/adb.c index 99bea0f.. ...

  4. Android获取Root权限

    对于新近入手Android系统手机的机友来说,一定会接触到一个新词"ROOT",他的出现频率很高,在各个论坛上,网友的字里行间经常会出现,那么获取Root权限呢? [b]工具/原料 ...

  5. 如何获得Android手机Root权限(转http://www.gphans.com/forum/183)

    如何获得Android手机Root权限 由 gphans 于 周一, 11/02/2009 - 15:10 提交. 使用技巧 疑问一:Root权限是什么? 疑问二:获取Root权限有什么用? 疑问三: ...

  6. android应用程序如何获取root权限,Android获取ROOT权限的实例代码

    获取Android的ROOT权限其实很简单,只要在Runtime下执行命令"su"就可以了. // 获取ROOT权限 public void get_root(){ if (is_ ...

  7. android获取root权限的命令

    获取Android的ROOT权限其实很简单,只要在Runtime下执行命令"su"就可以了. // 获取ROOT权限public void get_root(){if (is_ro ...

  8. 获取adb root权限

    原文地址为: 获取adb root权限 在开发中,难免在debug  release版本时碰倒adb shell权限的问题, 比如QA突然急冲冲的拿着一台出问题的机器跑过来,当你要使用adb shel ...

  9. Android 命令su,获取Android的ROOT权限其实很简单,只要在Runtime下执行命令su就可以了。复制代码 代码如下:// 获取ROOT权限public void...

    获取Android的ROOT权限其实很简单,只要在Runtime下执行命令"su"就可以了. // 获取ROOT权限 public void get_root(){ if (is_ ...

  10. android 永久root权限,安卓 实现永久性开启adb 的root权限

    adb 的root 权限是在system/core/adb/adb.c 中控制.主要根据ro.secure 以及 ro.debuggable 等system property 来控制. 默认即档ro. ...

最新文章

  1. sqlite 使用 cte 及 递归的实现示例
  2. 思源黑体ttf_模块模板 | 简单方法替换将TTF格式字体转换为Magisk模块
  3. 直播 | ICML 2021论文解读:对神经网络中层特征复杂度的解释与拆分
  4. 如何合理的规划jvm性能调优
  5. JDK(Install)
  6. 使用python中正则表达式匹配linux ifconifg命令中的具体信息
  7. 斯坦福大学的 CS231n课程
  8. node2vec python_Node2vec和networkx
  9. 鸢尾花数据集的各种玩法
  10. Ember项目引入js依赖
  11. GreenPlum ANALYZE
  12. 鼠标光标变成方块怎么办
  13. 负压式爬壁机器人_负压吸附式爬壁机器人的体重设计
  14. 华为往事(十一)---华为的“中南海”
  15. 使用宏定义写出swap(x,y)
  16. WRF气象数据之NECP FNL数据批量下载
  17. ios申请企业开发者账号的代理_2020年苹果ios企业开发者账号的申请流程攻略(最专业详细)...
  18. QGIS制作精美地图
  19. SDL解析——SDL简介
  20. MOOC人工智能原理学习笔记4——有信息搜索

热门文章

  1. 怎样通过java用web3j查询以太坊交易信息?
  2. 【转】php json_encode中文为空的解决办法
  3. OGRE: OgreOverlaySystem.h: No such file or directory
  4. 服务端端口状态和客户端端口状态解释-LISTENING-ESTABLISHED-TIME_WAIT
  5. CentOs 6.2 x64双网卡绑定
  6. 一起了解和成为“敏捷个人”(为参加5.29活动预热)
  7. 批量下载 Windows 零散系统更新的得力工具 -Windows Updates Downloader
  8. 4月1日标准IO和文件IO的区别(个人收藏)
  9. pytorch 神经网络构造
  10. 第四季-专题12-按键驱动程序设计