Android adb root权限

摘要:
搜索build目录并找到main。mk包含这样的代码片段##user/userdebug##user_variant:=$enable_target_debug:=trueifneq#Targetissecureinuserbuilds。ADDITIONAL_ DEFAULT _ PROPERTIES+=ro。secure=1tags_to_install:=userifeq#拾取一些额外使用的工具tags_to-install+=debugelse#在其他用户版本中禁用调试。enable_target_debugging:=endif#TODO:AlwayssetWITH_DEXPREOPT一旦在OSX上工作#此外,删除相应的块config/product_config.make。如果eqWITH_DEXPREOPT:=truenedif#不允许用户构建的mocklocationsbydefault_ADDITIONAL_DEFAULT_PROPERTIES+=ro.allow.mock。位置=0其他#!看看这两个属性。安全、持久服务、数据库启用。如果当前模式为user,编译系统将设置ro。安全到1和persist.service.adb。enable设置为0。也就是说,在用户模式下编译的系统在安全模式下运行,adbd默认关闭。即使它是通过设置属性打开的,adbd进程的用户也是一个shell,没有root权限。

http://hi.baidu.com/kenny_wju/item/c0e3177c030d38336e29f63b

方法:

修改./default.prop

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

原理:

可以看一下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用户的身份启动。

免责声明:文章转载自《Android adb root权限》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇扩展阿里p3c实现自定义代码规范检查c# sleep 例子下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

android 功耗(1)---android 功耗分析方法和优化

1、底电流调试(Rock Bottom Current Optimization) 底电流在手机飞行模式下调试。每个平台的底电流数据可能不一样,具体可以参考release出来的Current Consumption Data文档或者release note。一般情况下的底电流参考数据上限是: 底电流在手机飞行模式下调试。每个平台的底电流数据可能不一样,具体...

adb获取Android性能数据

环境:Android测试环境 搭建Android测试环境: 1、下载AndroidSDK; 2、配置环境变量; (1)、ANDROID_HOME (2)、ANDROID_HOME-TOOLS (3)、ANDROID_HOME-PALTFORM-TOOLS 3、Android底层Java开发,如需运行安卓远程调试桥(adb),需Java运行环境; 4、下载J...

adb 连接 Android 手机的两种方式

前言 // 随着现在移动端技术的突飞猛进,导致现在市场上,APP应用数不胜数,那对于测试工程师而言,对于APP的测试,那基本就是一个必修课了。 今天,我就来给大家介绍一下,adb 连接 Android 手机的两种方式。 1 USB线连接手机 1、先使用USB线,连接PC和手机 2、通过PC给手机安装adb驱动,下载好安装驱动的工具,并打开,此时,工具是没有...

使用ADB上传、下载文件和安装软件的方法

ADB全称Android Debug Bridge, 是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod手机它的主要功能有:* 运行设备的shell(命令行)* 管理模拟器或设备的端口映射* 计算机和设备之间上传/下载文件* 将本地apk软件安装至模拟器或android设备本人发现用ADB在计算机...

如何过滤 adb logcat 输出

对原作者表示感谢,转自博客:http://www.otechu.me/zh/2011/12/filtering-adb-logcat-output/ 本文介绍如何在shell 命令行中过滤 adb logcat 输出的几个小技巧。 开发当中经常看到别人的 log 如洪水般瞬间刷满了屏幕,对自己有用的信息都被淹没了,影响心情也影响效率。下面是几个我所知道的过...

adb连接 Android 手机的两种方式

前言 随着现在移动端技术的突飞猛进,导致现在市场上,APP应用数不胜数,那对于测试工程师而言,对于APP的测试,那基本就是一个必修课了。今天,我就来给大家介绍一下,adb 连接 Android 手机的两种方式 USB线连接手机 1、先使用USB线,连接PC和手机 2、通过PC给手机安装adb驱动,下载好安装驱动的工具,并打开,此时,工具是没有检索到手机...