文章目錄
- 一、使用SuperOneClick等軟體進行ROOT破解
- 二、應用程式擷取ROOT許可權代碼
- 三、補充
原文地址::http://www.metsky.com/archives/532.html
本文介紹Android系統上擷取TF/SD卡ROOT許可權方法,應用程式擷取Root許可權有個前提是該裝置已經破解(ROOT過,比如使用SuperOneClick軟體,參考地址:http://forum.xda-developers.com/showthread.php?t=803682),否則執行SU命令毫無效果,示範程式使用chmod方式修改某個裝置(TF卡分區)的存取權限,比如要按照物理扇區訪問讀寫TF卡或希望刪除某些重要檔案時,在Android系統上必須具備ROOT許可權才可以。
一、使用SuperOneClick等軟體進行ROOT破解
:http://forum.xda-developers.com/showthread.php?t=803682
用法參考:http://hi.baidu.com/cy594/blog/item/190e8794021c150bd31b7041.html
該ROOT破解軟體的原理就是利用Android系統的漏洞進行提權,最終目的開啟ROOT賬戶登入,且在下文執行SU命令時不被Android系統放鴿子(執行失敗)。如果您對ROOT結果及潛在風險知之甚少,請謹慎而為。
二、應用程式擷取ROOT許可權代碼
樣本擷取ROOT並修改mmcblk0分區許可權為777:
package com.android.myapp.utility;import java.io.DataOutputStream;import android.app.Activity;public class MyTestPri extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); //* Create a TextView and set its content. //* the text is retrieved by calling a native //* function. setContentView(R.layout.main); String apkRoot="chmod 777 /dev/block/mmcblk0";//SD卡分區路徑,也可能是mmcblk1隨系統版本定,當前程式路徑請用getPackageCodePath(); RootCmd(apkRoot); } public boolean RootCmd(String cmd){ Process process = null; DataOutputStream os = null; try{ process = Runtime.getRuntime().exec("su"); os = new DataOutputStream(process.getOutputStream()); os.writeBytes(cmd+ "\n"); os.writeBytes("exit\n"); os.flush(); process.waitFor(); } catch (Exception e) { return false; } finally { try { if (os != null) { os.close(); } process.destroy(); } catch (Exception e) { } } return true; }}
以上程式第一次運行時,會彈出類似“XXX應用程式想要擷取root許可權”這樣提示的對話方塊。這時你只需確認許可即可,下次再次執行時,Android會自動授權該程式進行ROOT提權。
執行完成後,可以看到該裝置許可權已被修改為777,註:如果只是想按照扇區讀寫SD卡,修改為606就足夠了,或者再嘗試低一點的許可權。
另外,關於TF/SD卡的掛載點問題,好像有的版本會掛載到mmcblk0,有的會掛載到mmcblk1上,具體還是要判斷一下,有深入研究過的不妨留言補充。
三、補充
上文方法介紹首先需要SuperOneClick進行ROOT破解,這對很多非開發人員而言都會有難度,而且容易忽視潛在的風險,所以,我們還可以通過更好的方法進行解決,下文方法就是很好的例子:
http://my.unix-center.net/~Simon_fu/?p=951(Android應用程式擷取ROOT許可權)
該文章通過對Android的啟動服務修改(Init.rc)從而實現ROOT許可權提升,不過要實現該功能你得是個開發人員,懂得Android源碼修改和編譯才行。這個功能暫未測試,該文章似乎是只擷取了System許可權,但是ROOT許可權跟System許可權還是有差別的,比如直接讀寫DEV裝置類(比如上文的SD卡扇區讀寫)則必須ROOT許可權,只有System許可權是不行的。
天緣只是剛接觸到這裡但仍未測試,以後再試,有經驗的Android高手歡迎賜教。
參考資料:
http://www.cnblogs.com/ycmoon/archive/2011/05/11/2042999.html(Android應用程式擷取ROOT許可權的方法,本文主要參考來源)