Android root简单分析
来源:互联网 发布:淘宝客服的提成怎么算 编辑:程序博客网 时间:2024/05/18 02:35
开放系统root权限,即使任何用户都可以执行su程序,以使得临时用户也具有了root的权限,然后去进行一些系统级的设置,如设置IP地址,DNS等。
1、修改su程序对临时用户的限制,默认su只允许root和shell用户执行
vi system/extras/su/su.c
注释掉语句块
/*myuid = getuid();if (myuid != AID_ROOT && myuid != AID_SHELL) {fprintf(stderr,"su: uid %d not allowed to su\n", myuid);return 1;}*/
就安全性而言这种方式是不太可取的,因此才有了类似于superuser.apk的出现,它们的作用就是在外面再提供一层保护。
顺带着说一句su的本质其实就是改变gid和uid:
if(setgid(gid) || setuid(uid)) { fprintf(stderr,"su: permission denied\n"); return 1; }
2、修改su程序的suid,可以通过ls -l来查看,在system/core/rootdir/init.rc中添加语句
chmod 4755 /system/xbin/su
作为选择,我们多数用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限。
还可设置第四位,它位于三位权限序列的前面,第四位数字取值是4,2,1,代表意思如下:
4,执行时设置用户ID,用于授权给基于文件属主的进程,而不是给创建此进程的用户。
2,执行时设置用户组ID,用于授权给基于文件所在组的进程,而不是基于创建此进程的用户。
1,设置粘着位。
s
设置用户(或组)的ID号
t
设置粘着位(sticky bit),防止文件或目录被非属主删除
3、如果涉及到/data目录而非/data/data/<你的包名>/的修改,则修改system/core/rootdir/init.rc
将 mount yaffs2 mtd@userdata /data nosuid nodev 改为 mount yaffs2 mtd@userdata /data nodev
4、通过java app进行验证
package com.test;import java.io.DataOutputStream;import java.io.IOException;import android.app.Activity;import android.os.Bundle;import android.util.Log;public class TestActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);try {Process process = Runtime.getRuntime().exec("su");//(这里执行是系统已经开放了root权限,而不是说通过执行这句来获得root权限)DataOutputStream os = new DataOutputStream(process.getOutputStream());os.writeBytes("ifconfig eth0 192.168.18.122\n");os.writeBytes("exit\n");os.flush();} catch (IOException e) {e.printStackTrace();}}}
public void smdtTakeScreenshot(){ //String cmd = "screencap -p /sdcard/screenshot.png"; //String cmd = "screencap -p " + path + name; String cmd = "/system/xbin/su"; Process process = null; DataOutputStream os = null; BufferedReader successResult = null; BufferedReader errorResult = null; StringBuilder successMsg = null; StringBuilder errorMsg = null; try { //静默安装需要root权限 process = Runtime.getRuntime().exec(cmd); os = new DataOutputStream(process.getOutputStream()); //os.writeBytes("ls"); os.flush(); os.writeBytes("\n"); os.flush(); os.writeBytes("exit\n"); os.flush(); //执行命令 process.waitFor(); //获取返回结果 successMsg = new StringBuilder(); errorMsg = new StringBuilder(); successResult = new BufferedReader(new InputStreamReader(process.getInputStream())); errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream())); String s; while ((s = successResult.readLine()) != null) { successMsg.append(s); } while ((s = errorResult.readLine()) != null) { errorMsg.append(s); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (os != null) { os.close(); } if (process != null) { process.destroy(); } if (successResult != null) { successResult.close(); } if (errorResult != null) { errorResult.close(); } } catch (Exception e) { e.printStackTrace(); } } //显示结果 Log.e(TAG,errorMsg + " lei "); Log.e(TAG,successMsg + " lei "); //Toast.makeText(this, "成功消息:" + successMsg.toString() + "\n" + "错误消息: " + errorMsg.toString(), Toast.LENGTH_SHORT).show(); }
Reference
1、http://android-dls.com/wiki/index.php?title=Magic_Root_Access
2、https://github.com/git-core/su-binary/wiki
3、http://my.unix-center.net/~Simon_fu/?p=1069
4、http://blog.chinaunix.net/uid-12845622-id-3063276.html
- Android root简单分析
- android root 权限分析
- android root 权限分析
- Android root原理分析
- android root 分析
- android root权限破解分析
- android root权限破解分析
- android root权限破解分析
- android root权限破解分析
- Android root权限破解分析
- android root权限破解分析
- android root权限破解分析
- Android root权限破解分析
- android root权限破解分析
- android root权限破解分析
- android root权限破解分析
- android root权限破解分析
- Android-root 破解原理分析
- java集合类库学习记录———ArrayList
- 为什么要开始学UX设计了
- 2017-10-27C#初级:冒泡排序
- SpringMVC源码剖析(二)DispatcherServlet的前世今生
- C语言记忆1
- Android root简单分析
- 简单理解与实验生成对抗网络GAN
- Java
- Gemcom Minex v6.03-ISO 1CD专为层状矿床设计的地质、采矿软件\
- 一个简单的单例示例
- ubuntu 15.04+java1.8+hadoop2.8.1
- UVa11280
- php 文件操作
- JZ2440_4_MMU