1: Android 设备被root 的含义是什么?      在linux中,登录系统后,需要输入用户名和密码,验证通过之后,用户登录shell,或得usserid和groupid,如果userid和groupid为root,表示此时的用户具备root权限;       在android中,开发板被root了,即表示用户可以通过某种方式得到root权限,可以以root的身份操控板子;      在android中,用户和板子打交道的途径有2中,一种是通过APK,另一种是adb命令;APK在运行时,会根据其签名和sharduserid分配不同的userid值,但是一般最高权限也就是system级别,目前没有看到到root级别的;另一种通过adb,在终端出入id,会显示userid和groupid信息;adb交互的方式适合开发人员,作为用户还是会喜欢apk的方式,希望运行的apk能被分配到root的userid; 
2:用户如何得到root 权限,从APK的角度来看     在Linux中有这样的一个标志位-rw sr-x-r-x,s是sticky bit,属于linux权限管理的知识,具体的可以查看举个具体例子来说明sticky bit的含义; 0 表示root,这里su的userid和groupid都为root; 这里sticky bit表示的含义是,su运行所在的进程,其userid 和groupid 为root;
    我们看到su的第三组权限为r-x,表示非root用户可以执行su文件;让su文件成功运行之后,su程序就是root用户,具备root权限,这样对su发送命令,就等价于作为root用户在做事情了;这样只要用户可以执行su文件就好;
    所以用户获取root 权限的步骤是:     1:su的权限带有sticky bit;即su的权限为4755     2:对su的源文件进行修改;将修改好,编译过的su文件push到system/xbin 目录下;         修改方法,将if (myuid != AID_ROOT ) 如下图所示,屏蔽掉,因为如果是普通用户,是无法执行su文件的,中途会被return;        简单的讲,用户可以获取root权限的本质,就是在板子上植入一个具备4755权限的”木马“su文件;     
3: 在VT6078 上让普通APK获取root权限的实验过程;      步骤一:在VT6078 中执行mount -o remount rw /; 使板子上的目录权限为可读可写;      步骤二:将修改过的su文件push到板子中,命令为adb push su /system/xbin/      步骤三:将/system/xbin/su 文件的权限修改为带sticky bit,命令为chmod 4755 /system/xbin/su      步骤四:在板子上执行which su, 查看当前运行的su文件是不是为/system/xbin/su ,如果不是修改;                   在VT6078的板子中,which su执行时,用的是/bin/su 文件。原因是             /bin 排在/system/xbin前面;                 解决方案是将/bin/su 删除,因为/bin/su 是busybox的软连接;
    步骤五:写APK测试,看APK是否可以有root权限;     主要代码如下:          结果会在result字串中返回,例如调动该函数,传入的string为"adb devices", 通过log 打印result字串,如果成功,则log如下:    
4:  如何不像第3部分那样,手动修改板子,让APK获取root权限?     我们在第3部分看到了,在终端的手动操作,让APK获取root权限,这样做,如果是对客户,则是一个不成型的产品,那么如何让板子一启动之后就有这样的权限呢?
      先来看看要让APK在板子上获取root权限需要哪些条件      条件一: 一个修改好的su文件        条件二:su文件的权限为4755      条件三:在板子中/system/xbin/su 文件为首要执行文件;
      针对以上3个条件,我有2个修改思路        思路一:针对以上3个条件,修改编译好之后out目录;       我们知道刷到板子中的rom,在android源码中,都是来自编译好的out目录;那么修改out目录中对应的内容,最后大打包成rom,将rom放给客户即可;这样从客户的角度来看,是一个完全的产品;       修改一:一个修改好的su文件--- 修改android 源码system/extras/su/su.c 文件,编译即可       修改二:su 文件的权限为4755---  su,c 文件编译好之后,在out目录下,具体位置为:       看到su文件的权限为 -rwxr-xr-x,不是我们想要的 -rw s r-x-r-x, 通过命令chmod 4755 su 即可解决问题;       修改三:删除/bin/su 文件,在板子中/bin/su文件对应的out目录的文件是       我们只要将这个文件删除即可;       将上面修改过的out目录在打包刷机即可,就不需要我们在板子运行之后,手动修改了;
       思路二:针对以上3个条件,修改Android源码,让APK在板子上可以获得root权限;       从客户的角度来看,思路一可以解决问题,但是从研发人员的角度来看,没有根本的解决问题;能解决问题的还是源码,怎么解决?       回答以下3个问题:       达到  条件一: 一个修改好的su文件  ,如何修改源码?           很简单,修改 system/extras/su/su.c 文件即可;       达到  条件二:su文件的权限为4755,如何修改源码?           在Android中,关于文件以及目录的权限都定义在 system/core/include/private/android_filesystem_config.h目录中;将其中/system/xbin/su 的权限定义为004755即可;        达到  条件三:在板子中/system/xbin/su 文件为首要执行文件,如何修改源码?            在android中,PATH的定义在init.rc文件,中将/system/xbin/su 的定义放到/bin 之前即可;

更多相关文章

  1. Android中使用pull解析器操作xml文件的解决办法
  2. rdp文件和vnc软件
  3. Android利用root权限开关机、休眠和唤醒
  4. Android so 文件进阶 从dlsym()源码看android 动态链接过程
  5. Android使用JNI生成.so文件并调用(使用传统生成.h的方法)
  6. Android软件权限知识普及
  7. Android本地视频播放器开发--ffmpeg解码视频文件中的音频(1)

随机推荐

  1. Android(安卓)studio怎么使用eclipse的快
  2. android 版本号适配 9.0网络请求方法
  3. (Android(安卓)Studio)添加按钮以及权重问
  4. android 上传应用商店时出现ERROR gettin
  5. 详解Android(安卓)检测权限的三种写法
  6. 【proguard混淆】Android(安卓)Gson混淆
  7. Android(安卓)4.4源码编译过程
  8. 阿里知识储备之二——junit学习以及andro
  9. android性能测试工具之dumpsys
  10. 关闭应用的4种方法