Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android系統獲取Root權限原理詳解

Android系統獲取Root權限原理詳解

編輯:Android開發教程

android root權限破解分析

許多機友新購來的Android機器沒有破解過Root權限,無法使用一些需要高權限的軟件,以及進行一些高權限的操作,其實破解手機Root權限是比較簡單及安全的,破解Root權限的原理就是在手機的/system/bin/或/system/xbin/目錄下放置一個可執行文件“su”,這是一個二進制文件,相當於電腦上的exe文件,僅僅在系統中置入這個“su”文件是不會給手機的軟件或硬件造成任何故障。

下面的代碼是android系統原版的su中的部分代碼,可以看出只允許getuid()為AID_ROOT和AID_SHELL的進程可以使用su進行登陸。

<span style="font-size:18px;"><strong>/* Until we have something better, only root and the shell can use su. */
myuid = getuid();  
if (myuid != AID_ROOT && myuid != AID_SHELL) {  
fprintf(stderr,"su: uid %d not allowed to su\n", myuid);  
return 1;  
}</strong></span>

面在Superuser這個android程序中的su不再有上面的一部分,這樣任何進程都可以使用su進行登陸了,有一部分android程序要使用root權限可能的用法類似於(這個也是Superuser中的一部分代碼):

01.Process process = Runtime.getRuntime().exec("su");  
02.DataOutputStream os = new DataOutputStream(process.getOutputStream());
03.os.writeBytes("mount -oremount,rw /dev/block/mtdblock3 /system\n");
04.os.writeBytes("busybox cp /data/data/com.koushikdutta.superuser/su /system/bin/su\n");
05.os.writeBytes("busybox chown 0:0 /system/bin/su\n");
06.os.writeBytes("chmod 4755 /system/bin/su\n");
07.os.writeBytes("exit\n");
08.os.flush();

而在上面提到的Superuser和android程序中的su源碼中都有這部分代碼:

if(setgid(gid) || setuid(uid)) {  
fprintf(stderr,"su: permission denied\n");  
return 1;  
}

看上去這裡就是進行權限切換的地方了。面普通用戶要能使用su,su的權限要是這樣:

-rwsr-xr-x. 1 root root 34904 11月 3 2010 /bin/su

這個和電腦版的su上是一樣的。

從出上面的分析可以認為破解android的root權限的實質是:在系統中加入一個任何用戶都可能用於登陸的su命令。當然這首先要取得root權限才能做到。在z4root這個android下的破解android的root權限的程序中有一個rageagainstthecage,可能就是設法得到root權限的程序。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved