Android修改ro.debuggable 真机adb调试所有进程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android修改ro.debuggable 真机adb调试所有进程相关的知识,希望对你有一定的参考价值。
参考技术A 前置条件:1、已解锁、ROOT
2、安装Magisk
输入以下命令:
adb shell #adb进入命令行模式
su #切换至超级用户
magisk resetprop ro.debuggable 1
stop;start; #一定要通过该方式重启
此方法为临时修改,重启后会失效;不过一般使用足够了,永久修改过程略繁琐。
Android 逆向Android 权限 ( adb 降权相关的属性 | ro.secure 属性 | ro.debuggable 属性 | service.adb.root 属性 )(代
一、adb 降权
远程 adb 命令 , 需要通过 adbd 服务程序处理 ;
adbd 文件的权限 , 属于 root 权限 , shell 分组 ; 因此这里涉及到 adb 的降权 ( Drop Privileges ) 问题 ,
-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 源码位置 :
#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 源码位置 :
#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 源码位置 :
#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
以上是关于Android修改ro.debuggable 真机adb调试所有进程的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Android 权限 ( adb 降权相关的属性 | ro.secure 属性 | ro.debuggable 属性 | service.adb.root 属性 )(代
Android全局可调试(ro.debuggable = 1)的一种另类改法
简单实现Android手机“全局可调试”(ro.debuggable = 1)的方法锤子坚果3
高通平台(Qualcomm) Android 10 user版本默认打开adb 调试小结