场景描述:
1. 连接Android手机,adb shell find xxxx,显示adb permission denied;
2. Google显示需要运行在root权限下,adb root,无错误输出,再次adb shell find xxxx,仍显示permission denied;
3. 发现手机未获取root权限,尝试root精灵和kingroot一键root均失败。
原因:
1. adb是Android SDK自带调试工具(相关介绍:Android developer);
2. adb默认以shell权限执行(非root),即使已获取手机及root权限,也需要显示切换 adb root;
若未获取root权限,显示切换当然也是没有用的;
3. adb 获取root权限的大前提:手机已root,目前依赖root工具,而root工具一般会有试用机型系统列表,列表外的手机无法实现root。
解析:
1. 为什么要root?
Android采用Linux内核;所以同Linux一致,无root权限将无法操作部分文件(如系统文件等)。
2. “把手机root一下”,这句话应该听说很多,究竟root一下代表什么呢?
用户对手机的权限一般是普通用户,手机厂商禁止用户获取root权限,root一下,即为将用户的shell权限提升为root权限。
3. 重中之重,root的通用原理是什么?
(提前注明:搜索的资料多为2013年或之前,具体提及破解细节只适用于当时Android版本,但猜想通用原理是一致的,整理之。)
关键的 "su" 参考:Android 系统 root 破解原理分析 + Android 的提权 (Root) 原理是什么?
所以root的重点在于要想办法替换并执行su。
cp /data/tmp/su /system/bin/ #copy su 到/system/分区
chown root:root su #su的所有者置成root chmod 4775 /system/bin/su #把su置成-rwsr-xr-
以上操作都需要root权限,至此陷入循环,常规途径无法破解。
非常规途径(adbd漏洞为例)参考:Android 系统 root 破解原理分析(续)
Android init进程以root权限启动,从而启动init.rc及其配置的系统服务(包括adbd),adbd在执行以下两句命令后变为shell权限
/* then switch user and group to "shell" */ setgid(AID_SHELL); setuid(AID_SHELL);
破解的方法,在于让这两句命令执行失败,切换为shell失败则保留为原始的root权限。
(但实际在Android4.2以后su命令的执行过程有修改,5.X之后也有变动,具体资料未梳理明了,暂保留以上)
从adb prrmission denied到理解android手机提权背后
原文:http://www.cnblogs.com/matric/p/6624572.html