永久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/blues_/p/3582097.html

转adb Shell root 权限相关推荐

  1. 解决adb shell root权限

    adb shell默认是没有root权限的,修改系统文件就很不方便.有两种方法可以获取adb shell的root权限,这两种方法的前提都是手机已经root. 1.用su可以提权,直接执行su就会看到 ...

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

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

  3. android apk 永久root,Android 实现永久性开启adb 的root权限

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

  4. adb为Android的root方法,Android 实现永久性开启adb 的root权限

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

  5. adb授权root权限,adb能否获得root权限

    adb能否获得root权限 如果你说的是用ADB指令给手机root权限,不能 如果你说的是手机已经活动root权限了给adb root权限,可以 手机root权限获取 手机root权限获取1 手机ro ...

  6. adb root android 6,ADB获得ROOT权限的探究——基于Android6.0

    ADB概述 adb的全称是Android Debug Bridge,是对Android设备进行调试的工具.这是调试通信的方式是基于C/S构架.在Android设备,运行ADBD服务,等待Client端 ...

  7. android电视root权限获取,电视盒子/ 智能电视如何通过ADB获取ROOT权限?

    如何通过adb获取root权限(安卓电视盒和智能电视通用)? Android 系统rom里面最主要的就3个文件:boot.img.system.img.userdata.img 其中boot.img ...

  8. adb shell root

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

  9. Android 控制台读取sqlite数据库以及adb获取root权限问题

    (个人经验,仅供参考,错误之处,敬请谅解) 读取sqlite数据文件 1.命令行     adb.sqlite命令最好设置成环境变量,否则需要先进入该文件夹. adb shell 进入虚拟机shell ...

最新文章

  1. PHP微信公众号开发插件,基于ThinkCMF1.5.0开发的微信公众号插件
  2. 我们准备在网关中支持GrahpQL了
  3. NASA打算送机器蜜蜂去探索火星上的生命痕迹
  4. 模拟usb设备_高速USB数据采集卡
  5. Linux Mint 18.2 Sonya 将于 6 月上旬发布公测版本
  6. Go聊天室的思路:一个拨号 一个监听
  7. CF 1103B Game with modulo
  8. 权限管理系统之字典(代码)管理
  9. 简单的避免idea自动导入 *
  10. MVC3+EF4.1学习系列(五)----- EF查找导航属性的几种方式
  11. Linux没有可用软件包 p7zip、 p7zip-plugins
  12. 机器学习正则化线性回归(调参技巧(matlab))
  13. 阿里云服务器搭建ftp服务器
  14. win10的当前桌面壁纸保存位置
  15. 给定一个无重复元素的数组 candidates 和一个目标数 target .
  16. android mjpg格式,Camera常用格式MJPEG和jpeg-turbo库
  17. java实现二维码扫码下载APP
  18. 十大开源Web应用安全测试工具
  19. 在平板电脑与移动3G大爆炸的时代,昔日霸主微软的反击
  20. C语言 strcpy 和 strcpy_s 函数区别 - C语言零基础入门教程

热门文章

  1. JZOJ 1321. 灯
  2. android excel 筛选功能,Android实现Excel表格展示数据
  3. crt脚本怎么添加等待时间_secureCRT自动化脚本(之定时任务)
  4. python文档生成工具_pydoc --- 文档生成器和在线帮助系统 — Python 3.9.1rc1 文档
  5. ICCV 2017 《Unsupervised Learning from Video to Detect Foreground Objects in Single Images》论文笔记
  6. 体育场[带权并查集]
  7. 大学加权平均分计算器_英国排名前20的大学GPA要求
  8. linux命令速查手册_干货| 有了这个速查手册,还怕Linux命令记不住?
  9. mc服务器村民交易修改,【原创】【教程】MCPE自定义村民交易内容
  10. 通过ITypedList实现数据绑定扁平化