android系统root与应用程序获取root权限原理总结
首先root一词来源于linux系统,linux系统不像XP系统它的权限管理分明。如果有root权限就获取了系统的最高权限能做几乎一切事情,而通常在android系统中厂商是不允许root的。但是还是有好多发烧友想要获取root权限,这样就寻找系统的各种漏洞来获取root。下面我用最简单的语言来分析:系统如何获取root权限;系统已经root后应用程序如何获取root权限。
首先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身份运行啦。。。。本总结来源于:
http://www.cnblogs.com/xiaoxiaoboke/archive/2012/02/13/2349723.html
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的手机就变得简单多了,具体参考:http://www.cnblogs.com/xiaoxiaoboke/archive/2012/02/13/2349719.html
现在大家了解root的原理了吧,好多工具都是利用了上述漏洞原理获取的root权限。例如z4root。其实root无非是利用各种各样的漏洞,但是现在的趋势来看root也越来越阳光化了,root是个后门。把这个后门打开供用户自由选择。
另外笔者在提供一些其他此方面的参考链接:
http://blog.sina.com.cn/s/blog_456baf5e01013rnx.html
关于Android的Root有感
http://bbs.anzhi.com/archiver/?tid-4884866.html
七种root方法总有一款适合你
http://blog.sina.com.cn/s/blog_75739773010171tm.html
Android手机Root授权原理细节全解析
更多推荐
所有评论(0)