首先root一词来源于linux系统,linux系统不像XP系统它的权限管理分明。如果有root权限就获取了系统的最高权限能做几乎一切事情,而通常在android系统中厂商是不允许root的。但是还是有好多发烧友想要获取root权限,这样就寻找系统的各种来获取root。下面我用最简单的语言来分析:

系统如何获取root权限;

系统已经root后应用程序如何获取root权限。

                                                                                                    系统如何获取root权限


   如果系统想要获取root权限,那必须了解adb工具,也就是android调试桥工具,通过它可以操作系统。他的权限决定这系统的权限。它的权限决定这系统的权限,首先他是sdk下的adb工具,而在设备端有adbd服务在后台运行,adbd的权限同时决定着adb的权限,adbd的源码在system/core/adb下,最重要的语句是setgid(AID_SHELL);  setuid(AID_SHELL); adbd在运行这两句代码之前都是root权限的,而运行他后讲的为shell权限了。好,问题就出现这这里,linux系统中有用户进程数是有限定的,也就是有数目的,如果超过此数目,则在调用这个语句,就会发生错误,而问题是发生错误的时候,代码并未做任何处理,没有去检测返回值,从而导致了这样一个利用。程序可以不断的fork()进程,也就是新建进程,直到shell用户的极限。然后结束掉系统的adb进程,因为结束了一个,就少了一个,所以立刻在fork一个处理,又达到了极限,因为系统会在一定时间里检测系统是否有adb进程,如果没有则会建立一个,这样当系统建立一个adb进程后,去调用setgid(AID_SHELL);  setuid(AID_SHELL)两句时其实已经发生了错误,但是代码并没有处理,继续完好无损的运行adb进程。所以这个adb的系统进程就一直以root身份运行啦。。。。本总结来源于:

Android系统root破原理分析(续)

http://blog.claudxiao.net/2011/04/android-adb-setuid/

Android adb setuid提权的分析

                                                                                        系统已经root后应用程序如何获取root权限。

 

系统root了,不代表应邀程序都能获取root权限的,系统root了,adb进程具有root权限了,可以放肆的操作系统文件啦,而应用程序获取root的权限的秘诀在于su程序中,破Root权限的原理就是在手机的/system/bin/或/system/xbin/目录下放置一个可执行文件“su”,这是一个二进制文件,而在android源码中表示,只有root和shell可以运行su程序,而其他程序是没有权限的。只要吧这个权限拿掉,那么就可以破root啦。而替换SU程序,对已已经root的手机就变得简单多了

  现在大家了解root的原理了吧,好多工具都是利用了上述漏原理获取的root权限。例如z4root。其实root无非是利用各种各样的漏,但是现在的趋势来看root也越来越阳光化了,root是个后门。把这个后门打开供用户自由选择。