zoukankan      html  css  js  c++  java
  • Android root权限获取大揭秘(转)

    android root权限获取的教程有很多,为了让大家更进一步的了解root的奥秘所在,灵客风特为您奉献本文,希望对您有所帮助。

    Android的应用程序入口肯定是java程序。应用程序的启动者是由系统临时根据Androidmanifest.xml中定义的权限而创建的临时用户。而不像linux那样是使用登陆者的身份启动,从而使得进程具有登陆者的所有权限。这也是Android的安全机制之一。

    新的权限机制也带来新的问题,Android给应用程序的权限是按功能来分,java虽然可以访问文件系统。但由于应用程序本身是临时用户启动,这个临时用户权限十分有限。因此诞生了<越狱/root机器>这样的产物。

    其实root机器不是真正能让你的应用程序具有root权限。它原理就跟linux下的像sudo这样的命令。在系统的bin目录下放个su程序并属主是root并有suid权限。则通过su执行的命令都具有Android root权限。

    Su的源代码网上也有,有兴趣的同学去google下。

    当然使用临时用户权限想把su拷贝的/system/bin目录并改属性并不是一件容易的事情。这里用到2个工具跟2个命令。工具就是busybox。不熟悉的同学可以去网上google下。这个太有名了我就不多说了。

    把busybox拷贝到你有权限访问的目录然后给他赋予4755权限,你就可以用它做很多事了。

    当然busybox只能不能提升权限,真正提升权限的是ratc这个程序,这个程序中一键root包里面可以找到,作用是rooting在adb的shell。

    网上介绍Ratc的文章不多,它是rage against the cage 的缩写。是真正的提升权限的破解程序。虽然我没看过源代码,但估计是利用adb源代码部分内容来实现的,原理估计跟模拟器使用adb shell登陆可以获得root shell差不多。(因为它运行需要adb连接才会成功)。

    使用busybox前先运行ratc,这样运行busybox的UID将是0,也就是root。

    首先把system目录改成可读性的:busybox mount -o remount,rw /system,

    当然你还不能改下面的文件,因为system下文件的所有者都不是你。

    但你可以偷梁换柱把system下的目录给换掉。

    使用命令Busybox mount -t tmpfs none /system/xbin,呵呵这下xbin目录你随便写了。

    将su跟busybox弄过去cp /data/data/xxx/su /system/xbin。然后赋权限chmod 4755 /system/xbin/su。

    然后使目录生效busybox --install -s /system/xbin,

    别忘善后busybox mount -o remount,ro /system去掉system可写。

    这样只是临时的,只能用su跟busybox能执行一些原来系统没有权限执行的命令而已。当系统重启后/system/xbin又变为原来的文件。 真正要改系统的话需要自己写内核代码(相当于windows的驱动程序)。内核文件拥有所有权限。使用busybox命令insmod /data/data/xxx/xxx.ko装载内核文件,你想干嘛就可以干嘛了。

    当然我们不是搞破解的没必要去改别人的机器,我们只是想让自己应用程序具有root权限而已。所以临时的su就可以了。我们用c++写一个可执行文 件。使用socket可以跟java的程序通讯。然后将需要使用root权限才能执行的代码放在c++程序里,然后java程序中创建新的su进程,将 c++程序带全路径作为参数1。启动后就可以通过socket调用c++函数去执行你想干的事了。

    最后程序执行完了别忘了善后busybox umount /system/xbin。

    最后说说要注意的事情,如果机器已经拥有Android root权限的话就不需要做这些事情了,但root过的机器都有装有个权限管理的程序。会弹出对话框。但这个程序管理能力有限,如果不想让他弹出的话。也许可以通过改su文件名来解决。有兴趣的同学不妨试试。

    现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的 软件,使root破解越来越容易。但是你思考过root破解的原理吗?root破解的本质是什么呢?难道是利用了Linux kernal的漏洞吗?本文将简单对root的破解原理进行分析。

         网上有一篇文章已经对root破解的基本原理进行了简单介绍,大家可以先参考一下《android root权限破解分析》,本文只能说对root原理进行了方向性的描述,但是在一些具体的方面没有描述清楚。本文将会对其进行一些必要的扩展和补充。

         如果你进行过程序开发,在root过的手机上面获得root权限的代码如下:

    1. Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream());  
    2. ......  
    3. os.writeBytes("exit\n");  
    4. os.flush();  

         从上面代码我们可以看到首先要运行su程序,其实root的秘密都在su程序中,《android root权限破解分析》中讲到Android系统默认的su程序只能root和shell可以用运行su,这个是安全的。如果把这个限制拿掉,就是root破解了!

         下面我们仔细分析一下程序是怎样获得root权限的,如果对Linux的su命令熟悉的朋友可能知道su程序都设置SUID位,我们查看一下我的手机(已经root破解)上的su权限设置,

          我们发现su的所有者和所有组都是root,是其实是busybox的软链接,我们查看busybox的属性发现,其设置了SUID和SGID,并且所有者和所有组都是root。SUID和SGID的作用是什么呢?如果你不太清楚,请参考《Linux进程的实际用户ID和有效用户ID》,这样运行busybox的普通用户,busybox运行过程中获得的是root的有效用户。su程序则是把自己启动一个新的程序,并把自己权限提升至root(我们前面提到su其实就是busybox,运行期它的权限是root,当然也有权限来提升自己的权限)。

         再强调一下不光root手机上su需要设置SUID,所有的Linux系统上的su程序都需要设置SUID位。请参考一下UC服务器的su的权限情况:

         我们发现su也设置了SUID位,这样普通用户也可以运行su程序,su程序会验证root密码,如果正确su程序可以把用户权限提高的root(因为其设置SUID位,运行期是root权限,这样其有权限提升自己的权限)。

         这样我们就可以看出其实Android系统的破解的根本原理就是替换掉系统中的su程序,因为系统中的默认su程序需要验证实际用户权限(只有root和 shell用户才有权运行系统默认的su程序,其他用户运行都会返回错误)。而破解后的su将不检查实际用户权限,这样普通的用户也将可以运行su程序, 也可以通过su程序将自己的权限提升。

         到这里大家对root破解不感到神秘了吧。root破解没有利用什么Linux内核漏洞(Linux内核不可能有这么大的漏洞存在),可以理解成root 破解就是在你系统中植入“木马su”,说它是“木马”一点儿都不为过,假如恶意程序在系统中运行也可以通过su来提升自己的权限的这样的结果将会是灾难性 的。所以一般情况下root过手机都会有一个SuperUser应用程序来让用户管理允许谁获得root权限,也算是给系统加了一层保险吧!

         如上是Simon的个人对root破解的一些认识,如果有错误的地方,欢迎朋友们指正.

  • 相关阅读:
    关于我成为电脑维修社团一员那些事
    [算法相关]二进制分组
    [题解]陌上花开
    [题解]UVA10917 Walk Through the Forest
    [字符串相关]后缀自动机(SAM)- 一
    [字符串相关]后缀数组
    [字符串相关]Aho-Corasick 自动机
    [算法入门]线性基
    [数据结构]可持久化并查集
    [数据结构]可持久化线段树
  • 原文地址:https://www.cnblogs.com/xly1208/p/3075503.html
Copyright © 2011-2022 走看看