前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 逆向】Android 权限 ( adb 降权相关的属性 | ro.secure 属性 | ro.debuggable 属性 | service.adb.root 属性 )

【Android 逆向】Android 权限 ( adb 降权相关的属性 | ro.secure 属性 | ro.debuggable 属性 | service.adb.root 属性 )

作者头像
韩曙亮
发布2023-03-29 19:39:12
1.4K0
发布2023-03-29 19:39:12
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、adb 降权


远程 adb 命令 , 需要通过 adbd 服务程序处理 ;

adbd 文件的权限 , 属于 root 权限 , shell 分组 ; 因此这里涉及到 adb 的降权 ( Drop Privileges ) 问题 ,

代码语言:javascript
复制
-rwxr-xr-x 1 root   shell    1758824 2009-01-01 16:00 adbd
在这里插入图片描述
在这里插入图片描述

一些系统属性可以影响 adb 是否降权 ; adb 的权限初始为 root 权限 ;

1、ro.secure 属性

ro.secure 属性 , 配置 是否开启安全防护 ; 如果该属性配置为 1 , 则 adb 的权限就会降权 ;

调用 getprop ro.secure 命令 , 获取该属性的属性值 ;

在这里插入图片描述
在这里插入图片描述

对应 /system/core/adb/adb_main.cpp 源码位置 :

代码语言:javascript
复制
#if defined(ALLOW_ADBD_ROOT)
	// 影响'adb root'和'adb unroot'的属性是ro.secure和
	// 可调试的。在此上下文中,名称不会产生预期的行为 特别明显。
	//
	// ro.debugable:
	// 允许成为根,但不一定是默认值。在上设置为1
	// eng和userdebug构建。
	//
	// ro.secure:
	// 默认情况下删除特权。在用户调试和用户生成时设置为1。
    property_get("ro.secure", value, "1");
    bool ro_secure = (strcmp(value, "1") == 0);
#else
    return true; // "adb root" not allowed, always drop privileges.
#endif /* ALLOW_ADBD_ROOT */
}
#endif /* ADB_HOST */

Android 源码地址 : /system/core/adb/adb_main.cpp

2、ro.debuggable 属性

ro.debuggable 属性 , 配置 是否可以调试 ;

调用 getprop ro.debuggable 获取的属性为 0 ;

在这里插入图片描述
在这里插入图片描述

对应 /system/core/adb/adb_main.cpp 源码位置 :

代码语言:javascript
复制
#if defined(ALLOW_ADBD_ROOT)

    property_get("service.adb.root", value, "");
    bool adb_root = (strcmp(value, "1") == 0); // adb_root 值为 false ; 
    bool adb_unroot = (strcmp(value, "0") == 0); // adb_unroot 值为 true 

    // ...except "adb root" lets you keep privileges in a debuggable build.
    //adb_root 为 false , 该分支不会进入 
    if (ro_debuggable && adb_root) {
    	// 该分支永远不会进来 
    	// 但是只要进来了 , 就意味着 adb 不降权 , 持有 root 权限 
        drop = false;
    }

    // ...and "adb unroot" lets you explicitly drop privileges.
    if (adb_unroot) {
        drop = true;
    }

    return drop;
#else
    return true; // "adb root" not allowed, always drop privileges.
#endif /* ALLOW_ADBD_ROOT */
}
#endif /* ADB_HOST */

Android 源码地址 : /system/core/adb/adb_main.cpp

3、service.adb.root 属性

service.adb.root 属性 , 配置 adb 是否拥有 root 权限

调用 getprop service.adb.root 命令 , 获取的值为空 ;

在这里插入图片描述
在这里插入图片描述

4、ro.kernel.qemu 属性

ro.kernel.qemu 属性 , 该属性只有模拟器有 , 手机真机没有改配置 ;

调用 getprop ro.kernel.qemu 获取的属性为空 ;

在这里插入图片描述
在这里插入图片描述

对应 /system/core/adb/adb_main.cpp 源码位置 :

代码语言:javascript
复制
#if defined(ALLOW_ADBD_ROOT)

	// 模拟器永远都不安全,所以不要在那里放弃特权。
	// TODO:这看起来像一个bug——仿真器的行为不应该像一个设备吗?
    property_get("ro.kernel.qemu", value, "");
    if (strcmp(value, "1") == 0) {
    	// 该分支永远不会命中 , 不会被执行到
        return false;
    }

#else
    return true; // "adb root" not allowed, always drop privileges.
#endif /* ALLOW_ADBD_ROOT */
}
#endif /* ADB_HOST */

Android 源码地址 : /system/core/adb/adb_main.cpp

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、adb 降权
    • 1、ro.secure 属性
      • 2、ro.debuggable 属性
        • 3、service.adb.root 属性
          • 4、ro.kernel.qemu 属性
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档