其实最关键的是把一个叫su的binary放到/system/xbin下,因为app希望做需要root权限的操作时代码一般是"su -c xxxcmd"。这个su肯定一开始是没有的,所以问题其实是怎么把su放过去。直接copy过去到system分区会失败,因为system分区是只读的,所以要放过去东西就要remount成可写,但是remount操作必须是root权限才能做,于是好像形成了死循环。
破掉的办法是先通过漏洞把某个进程提权到root,然后root权限的进程fork一个出来做remount之类的事或者启动一个脚本做类似的事情。比如有些linux kernel或者驱动存在UAF或者overflow的洞,一键root等软件利用这些漏洞让自己的代码运行在内核态,然后把这个进程的uid gid等等改成0(这些存在内核态,用户态没法直接改),那这个进程的权限就被提到root了。
或者是直接刷个zip包,这个zip包括boot分区,system分区的内容,然后可以把su直接放在system分区文件夹里再打包刷机即可,不过有的手机有检验签名,那打了包刷机的时候刷不上去。那就可以先换个recovery再刷zip。
锤子T1可以用这种类似的思路解决v2.0系统root
1.降到1.4版本,用kingroot利用漏洞得到root权限,system分区放上su
2.dd if=newrec.img of=recblock换掉recovery
3.刷机升级
4.选recovery里的getroot,recovery会把su等放到system分区
5.重启
6.dd if=recbackup.img of=recblock恢复recovery