目录:
0x0:前言
0x1:老提示更新二进制(SU)文件,啥是二进制文件,它在哪?
0x2:kingroot提示,临时root重启后失效,咋回事?
0x3:什么是system-mode? system-less?
0x4:替换kingroot的思路
0x5:资料链接
0x6:官方卡刷包脚本文档翻译
0x7:install-recovery.sh内文档翻译
0x0
前言:
恩,说来惭愧,我是这个吧的QQ群群主,却一直没有对这个贴吧做什么贡献。看到现在很多机油受各种因素所限,只能用kingroot,又苦于king的各种***、想投入supersu的怀抱,无奈supersu的门槛有些高,早些年的supersume已经不太好用,rmkingroot只能移除kingroot,我正好也在学安卓开发,所以萌发了写一个一键替换kingroot的app的愿望。
可是现实是残酷的,开始google后发现,国内基本没有分析su文件安装过程的分析,零星的几篇文章也是android2.3时代的,安卓更新太快,这些教程早已无用T^T,无奈只好自己研究,然后有了这篇文章。对我帮助很大的文章链接我会贴在文末,在此严重感谢大神chainfire和开源项目rmkingroot,敬礼!
本文设分析都是system-mode下,不是system-less模式。关于这个,我后文介绍
0x1
Q:老提示更新二进制(SU)文件,啥是二进制文件,它在哪?
A:二进制文件早期(android4.3以下)是/system/xbin/su,由于该文件的所有者是root,且被root守护进程使用,其uid和pid都是0,root守护进程有更改进程uid和pid的权限。一个进程调用su文件时,授权管理确认可以授权后,更改进程uid和pid为0,这个进程就有了root权限。但是在android4.3谷歌为了安全,加入了SEAndroid,引入了强访问控制,导致守护root进程的启动受限制,但是,系统启动时内核会以root权限执行install-recovery.sh(其实是init执行的,这个是Linux启动andorid框架和孵化器时期一起执行的),用这个启动root守护进程。下面是install-recovery.sh里面的作者的注释:
If you're implementing this in a custom kernel/firmware, I suggest you use a different script name, and add a service to launch it from init.rc.Launches SuperSU in daemon mode only on Android 4.3+.Nothing will happen on 4.2.x or older, unless SELinux+Enforcing.
#如果你从定制的内核或软件中运行它,我建议你使用一个不同的脚本名称,并且添加一个服务来从init.rc中启动他。 在android43+以daemon模式启动supersu。在4.2.X或更老的系统中什么也不会发生,除非强制启用SELinux。注:SEAndroid是谷歌根据SELinux修改的一种强访问控制机制,在boot分区中。
继续,其实不只有/system/etc/install-recovery.sh这一个文件,还有/system/ect/init.d/99SuperSUDaemon,道理一样,都是启动deamonsu服务。ANDROID4.3-4.4这两个都可以启动daemonsu服务,android5.0以上,sh版本被更严格的SEAndroid禁止,只能使用init运行99SuperSUDaemon来启用deamonsu服务。
具体的supersu的全部安装文件列表我会贴在文末,但是查阅官方文档得知,只要存在以下4个文件,supeusu就可以修复其余的文件。也就是说,想让supersu可以更新二进制文件至少需要以下4个文件:
/system/xbin/supolicy 0755权限
/system/lib(64)/libsupol.so 0644权限
/system/xbin/daemonsu 0755权限
/system/xbin/su 0755权限
前提:基本root服务在运作,具体是daemonsu服务在启动时被加载,这个通常是由install-recovery.sh 或99SuperSUDaemon或授权管理启动。
原文如下:
Over the past years, many exploits have installed SuperSU as their means of persistent root. Often the exploit leaves the system in an unstable state, and a proper and lengthy installation may not be possible. The APK can fix a partial install as long as basic root works. At the time of this writing, that means at least these files need to be present, and for the right architecture and amount of bits for the firmware (see the ZIP script for permissions and API levels):
/system/xbin/su
/system/xbin/daemonsu
/system/xbin/supolicy
/system/lib(64)/libsupol.so
Furthermore, daemonsu --auto-daemon needs to be launched somehow on boot. This is generally done via install-recovery.sh, 99SuperSUDaemon, or hijacking app_process([32|64]).
0x2
这里顺嘴提一句,有的机型kingroot提示,“临时root重启后失效”,这是因为内核禁止启动install-recovery.sh,导致没法开机启动root守护进程,没办法,因为这时候的root守护进程是漏洞获取权限启动的,但内核是个img镜像,不易修改,这种情况下只能刷内核
0x3
Q:什么是system-mode? system-less?
A:因为手机系统需要OTA更新,大家都知道,root了就不能OTA更新了,根本原因因为root中修改了system分区,OTA更新时会有system分区md5校验,修改了md5值就变了。所以只能整包更新,之后还要重新root,很麻烦。chainfire大神早就注意到了,所以引入了system-less模式,这种模式下,su文件将被打包进一个img镜像,在data分区下,然后修改boot分区,让内核开机时挂载这个镜像,然后由这个镜像分区启动system分区,实现了免修改system获取root,不干扰ota。但是暂时这个模式还不稳定,比如重力传感器失效(已修复)。
0x4
具体如何实现替换kinfroot,目前思路如下,用rmkingroot的脚本清除kinroot然后复制关键的4个文件和安装包,具体我已经写出来,但受限于我手机上kingroot没法链接服务器没法测试,所以大家期待吧,或是自己写一个更好:)
关于rmkingroot:介绍说清除完king可以直接装supersu,但实际我测试了5台电话,都是二进制文件更新失败,我看了脚本,只是复制了授权管理和xbin下的su,根据以上分析android4.2以后这样不行。rmkingroot安装supersu代码:
pm install /sdcard/mrw/superuser.apk
busybox chattr -ia /system/usr/iku/isu
0x5
链接:
supersu官方说明:http://su.chainfire.eu
rmkingroot的github:https:// github .com/ inX95/RmKingroot
supersu官网下载:www.supersu.com/download
楼下更精彩

0x0:前言
0x1:老提示更新二进制(SU)文件,啥是二进制文件,它在哪?
0x2:kingroot提示,临时root重启后失效,咋回事?
0x3:什么是system-mode? system-less?
0x4:替换kingroot的思路
0x5:资料链接
0x6:官方卡刷包脚本文档翻译
0x7:install-recovery.sh内文档翻译
0x0
前言:
恩,说来惭愧,我是这个吧的QQ群群主,却一直没有对这个贴吧做什么贡献。看到现在很多机油受各种因素所限,只能用kingroot,又苦于king的各种***、想投入supersu的怀抱,无奈supersu的门槛有些高,早些年的supersume已经不太好用,rmkingroot只能移除kingroot,我正好也在学安卓开发,所以萌发了写一个一键替换kingroot的app的愿望。
可是现实是残酷的,开始google后发现,国内基本没有分析su文件安装过程的分析,零星的几篇文章也是android2.3时代的,安卓更新太快,这些教程早已无用T^T,无奈只好自己研究,然后有了这篇文章。对我帮助很大的文章链接我会贴在文末,在此严重感谢大神chainfire和开源项目rmkingroot,敬礼!
本文设分析都是system-mode下,不是system-less模式。关于这个,我后文介绍
0x1
Q:老提示更新二进制(SU)文件,啥是二进制文件,它在哪?
A:二进制文件早期(android4.3以下)是/system/xbin/su,由于该文件的所有者是root,且被root守护进程使用,其uid和pid都是0,root守护进程有更改进程uid和pid的权限。一个进程调用su文件时,授权管理确认可以授权后,更改进程uid和pid为0,这个进程就有了root权限。但是在android4.3谷歌为了安全,加入了SEAndroid,引入了强访问控制,导致守护root进程的启动受限制,但是,系统启动时内核会以root权限执行install-recovery.sh(其实是init执行的,这个是Linux启动andorid框架和孵化器时期一起执行的),用这个启动root守护进程。下面是install-recovery.sh里面的作者的注释:
If you're implementing this in a custom kernel/firmware, I suggest you use a different script name, and add a service to launch it from init.rc.Launches SuperSU in daemon mode only on Android 4.3+.Nothing will happen on 4.2.x or older, unless SELinux+Enforcing.
#如果你从定制的内核或软件中运行它,我建议你使用一个不同的脚本名称,并且添加一个服务来从init.rc中启动他。 在android43+以daemon模式启动supersu。在4.2.X或更老的系统中什么也不会发生,除非强制启用SELinux。注:SEAndroid是谷歌根据SELinux修改的一种强访问控制机制,在boot分区中。
继续,其实不只有/system/etc/install-recovery.sh这一个文件,还有/system/ect/init.d/99SuperSUDaemon,道理一样,都是启动deamonsu服务。ANDROID4.3-4.4这两个都可以启动daemonsu服务,android5.0以上,sh版本被更严格的SEAndroid禁止,只能使用init运行99SuperSUDaemon来启用deamonsu服务。
具体的supersu的全部安装文件列表我会贴在文末,但是查阅官方文档得知,只要存在以下4个文件,supeusu就可以修复其余的文件。也就是说,想让supersu可以更新二进制文件至少需要以下4个文件:
/system/xbin/supolicy 0755权限
/system/lib(64)/libsupol.so 0644权限
/system/xbin/daemonsu 0755权限
/system/xbin/su 0755权限
前提:基本root服务在运作,具体是daemonsu服务在启动时被加载,这个通常是由install-recovery.sh 或99SuperSUDaemon或授权管理启动。
原文如下:
Over the past years, many exploits have installed SuperSU as their means of persistent root. Often the exploit leaves the system in an unstable state, and a proper and lengthy installation may not be possible. The APK can fix a partial install as long as basic root works. At the time of this writing, that means at least these files need to be present, and for the right architecture and amount of bits for the firmware (see the ZIP script for permissions and API levels):
/system/xbin/su
/system/xbin/daemonsu
/system/xbin/supolicy
/system/lib(64)/libsupol.so
Furthermore, daemonsu --auto-daemon needs to be launched somehow on boot. This is generally done via install-recovery.sh, 99SuperSUDaemon, or hijacking app_process([32|64]).
0x2
这里顺嘴提一句,有的机型kingroot提示,“临时root重启后失效”,这是因为内核禁止启动install-recovery.sh,导致没法开机启动root守护进程,没办法,因为这时候的root守护进程是漏洞获取权限启动的,但内核是个img镜像,不易修改,这种情况下只能刷内核
0x3
Q:什么是system-mode? system-less?
A:因为手机系统需要OTA更新,大家都知道,root了就不能OTA更新了,根本原因因为root中修改了system分区,OTA更新时会有system分区md5校验,修改了md5值就变了。所以只能整包更新,之后还要重新root,很麻烦。chainfire大神早就注意到了,所以引入了system-less模式,这种模式下,su文件将被打包进一个img镜像,在data分区下,然后修改boot分区,让内核开机时挂载这个镜像,然后由这个镜像分区启动system分区,实现了免修改system获取root,不干扰ota。但是暂时这个模式还不稳定,比如重力传感器失效(已修复)。
0x4
具体如何实现替换kinfroot,目前思路如下,用rmkingroot的脚本清除kinroot然后复制关键的4个文件和安装包,具体我已经写出来,但受限于我手机上kingroot没法链接服务器没法测试,所以大家期待吧,或是自己写一个更好:)
关于rmkingroot:介绍说清除完king可以直接装supersu,但实际我测试了5台电话,都是二进制文件更新失败,我看了脚本,只是复制了授权管理和xbin下的su,根据以上分析android4.2以后这样不行。rmkingroot安装supersu代码:
pm install /sdcard/mrw/superuser.apk
busybox chattr -ia /system/usr/iku/isu
0x5
链接:
supersu官方说明:http://su.chainfire.eu
rmkingroot的github:https:// github .com/ inX95/RmKingroot
supersu官网下载:www.supersu.com/download
楼下更精彩

