欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
[轉]Android程序的安全系統--以root權限進(jìn)行操作

Android程序的安全系統

     最近在移植Android過(guò)程中遇到了Android程序(apk)權限的問(wèn)題。最近也對這方面進(jìn)行了一些了解,在此和大家分享。

     Android框架是基于Linux內核構建,所以Android安全系統也是基于Linux的安全架構建立的。在Linux安全系統中,用戶(hù)和組起著(zhù)重要的作用,Linux中所有的資源給不同的用戶(hù)和用戶(hù)組設置了不同的訪(fǎng)問(wèn)屬性。如果你對Linux下面用戶(hù)和組的概念不熟悉,請先補習一下Linux基礎知識。

    在A(yíng)ndroid系統中,系統為每一個(gè)應用程序(apk)創(chuàng )建了一個(gè)用戶(hù)和組。這個(gè)用戶(hù)和組都是受限用戶(hù),不能訪(fǎng)問(wèn)系統的數據,只能訪(fǎng)問(wèn)自己的文件和目錄,當然它也不能訪(fǎng)問(wèn)其他應用程序的數據。這樣設計可以盡可能地保護應用程序的私有數據,增強系統的安全性和健壯性。

     但是有一些應用程序是需要訪(fǎng)問(wèn)一些系統資源的。比如Setting程序,他就需要訪(fǎng)問(wèn)wiffi,在系統中創(chuàng )建刪除文件等等操作。怎樣做到這一點(diǎn)兒呢?Android通過(guò)一定途徑可以獲得system權限。獲得system用戶(hù)權限,需要以下步驟:

1. 在應用程序的AndroidManifest.xml中的manifest節點(diǎn)中加入android:sharedUserId="android.uid.system"這個(gè)屬性。
2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform這一行
3. 使用mm命令來(lái)編譯,生成的apk就有修改系統時(shí)間的權限了。

     一般情況下system用戶(hù)權限就已經(jīng)夠用了,system用戶(hù)可以在系統中創(chuàng )建和刪除文件,訪(fǎng)問(wèn)設備等等。但是有些情況下system權限還是不夠的。比如:設置網(wǎng)卡IP地址,ifconfig命令是需要root權限的。我可以很肯定的說(shuō),在A(yíng)ndroid下面應用程序是沒(méi)有可能拿到root權限的。但是如果我的應用程序需要root權限怎么辦呢?只能想辦法繞般過(guò)去。就以我的問(wèn)題為例,設置網(wǎng)卡IP地址,root權限下面命令為:

ifconfig eth0 192.168.1.188

在普通用戶(hù)或者system用戶(hù)權限下面這條命令是不起作用的,但是不會(huì )返回失敗和異常,這個(gè)我個(gè)人認為是Android的bug。那么怎樣實(shí)現這個(gè)功能呢?我想出了兩個(gè)辦法。

1、系統啟動(dòng)的時(shí)候init進(jìn)程創(chuàng )建一個(gè)后臺進(jìn)程,該進(jìn)程處于root用戶(hù)權限下面。用來(lái)監聽(tīng)系統中應用程序的請求(可以用socket實(shí)現),并代其完成。這樣應用程序就可以執行root用戶(hù)權限的任務(wù)了。

2、實(shí)現一個(gè)虛擬的設備,該設備的功能就是在內核態(tài)幫應用程序執行相應的命令。Linux內核態(tài)沒(méi)有權限的問(wèn)題了??隙梢詧绦谐晒?。

     我解決設置網(wǎng)卡IP地址問(wèn)題時(shí),選擇是后者。相對來(lái)說(shuō)設計比較簡(jiǎn)單。

     如果你到網(wǎng)上去搜一下,你會(huì )發(fā)現很多文章說(shuō)怎樣讓Android應用程序獲得root權限。如果你不想浪費時(shí)間就不要相信他們,因為那些途徑是根本不可能獲得root權限的。

    我的后續博文《Android應用程序獲得root權限》講解讓?xiě)贸绦颍ˋPK)通過(guò)第一種方法獲得root權限的方法,請關(guān)注。

你可以通過(guò)RSS 2.0 來(lái)跟蹤本文的所有評論。 你可以對本文發(fā)表評論,或者對本文進(jìn)行評分,或者從你的網(wǎng)站 引用 本文。

相關(guān)文章

COMMENTS

19 條評論

  1. 請教博主

    2010-10-25 14:14:51

    請教博主,“實(shí)現一個(gè)虛擬的設備,該設備的功能就是在內核態(tài)幫應用程序執行相應的命令。Linux內核態(tài)沒(méi)有權限的問(wèn)題了??隙梢詧绦谐晒??!斑@個(gè)怎么做呢,能否給個(gè)例子。比如我想在A(yíng)PK中執行一個(gè)df命令,取得一些硬盤(pán)相關(guān)的數據,該怎么做呢,謝謝!

    [回復]

    Simon_fu 回復:

    不好意思,代碼我那不出來(lái)~!不能給你例子。
    但是在kernal中實(shí)現一個(gè)設備驅動(dòng),這個(gè)設備接受字符串命令,然后幫你調用上層命令,應該是一個(gè)比較easy的問(wèn)題阿~!
    如果你是作應用程序的開(kāi)發(fā)人員,你需要驅動(dòng)開(kāi)發(fā)人員幫忙實(shí)現這個(gè)設備。

    [回復]

    請教博主 回復:

    謝謝^_^

    [回復]

    匿名 回復:

    1、系統啟動(dòng)的時(shí)候init進(jìn)程創(chuàng )建一個(gè)后臺進(jìn)程,該進(jìn)程處于root用戶(hù)權限下面。用來(lái)監聽(tīng)系統中應用程序的請求(可以用socket實(shí)現),并代其完成。這樣應用程序就可以執行root用戶(hù)權限的任務(wù)了。
    請教博主:能做個(gè)例子嗎?我無(wú)從下手

    [回復]

    Simon_fu 回復:

    呵呵~!
    這個(gè)小程序我就不提供了,你可以在init.rc中啟動(dòng)這個(gè)進(jìn)程。
    這個(gè)后臺進(jìn)程就是root權限的。

    [回復]

  2. fanfq

    2010-12-30 21:53:21

    2、實(shí)現一個(gè)虛擬的設備,該設備的功能就是在內核態(tài)幫應用程序執行相應的命令。Linux內核態(tài)沒(méi)有權限的問(wèn)題了??隙梢詧绦谐晒?。
    》》樓主的這個(gè)解決方案我有功過(guò),但前提是還是需要root權限與系統內核支持動(dòng)態(tài)加載。

    現在我有個(gè)問(wèn)題想請教一下樓主,我想獲取系統的設備文件,如cpu的信息,那么我們只需要讀取/proc/stat 而想獲取屏幕截圖的話(huà)就要讀取/dev/graphics/fb0, 現在我不想通過(guò)Native去做,那么我是想在java中直接讀取該硬件信息。發(fā)現/proc/stat是可以直接讀出來(lái)的,而/dev/graphics/fb0不行。后來(lái)發(fā)現是權限問(wèn)題,
    /proc/sta r–r–r–
    /dev/graphics/fb0 rw-rw—-
    那么我要讀取/dev/graphics/fb0只能修改其權限了。
    模擬器上自然沒(méi)有問(wèn)題,但是真機上在沒(méi)有root權限的情況下該怎么做呢,希望樓主賜教。
    以下是寫(xiě)在activity的demo.
    BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(“/dev/graphics/fb0″)), 1000);
    String load = reader.readLine();
    System.out.println(load);

    1. 在應用程序的AndroidManifest.xml中的manifest節點(diǎn)中加入android:sharedUserId=”android.uid.system”這個(gè)屬性。
    2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform這一行
    3. 使用mm命令來(lái)編譯,生成的apk就有修改系統時(shí)間的權限了。
    》》1.我懂,2,3是什么意思???2.Android.mk 用jni的時(shí)候才會(huì )用到啊,普通的apk是用不到。3,mm編譯是什么???

    一下子問(wèn)了這么多問(wèn)題,樓主見(jiàn)笑了。。

    [回復]

    Simon_fu 回復:

    1、我說(shuō)的實(shí)現一個(gè)虛擬設備確實(shí)是需要動(dòng)態(tài)加載的,在開(kāi)機的時(shí)候,直接插入到內核中就可以了。
    2、如果你在Java中通過(guò)JNI調用的Native來(lái)操作設備也不可能獲得root權限的,Native的權限和你的Java APK的權限一樣,還是不能操作fb0。需要操作fb0,要么是所有者或者所有組,要么root。你查看一下fb0所有者是不是system,如果是,可以讓APK獲得system權限,這樣就可以訪(fǎng)問(wèn)fb0了。如果不是,你只能通過(guò)開(kāi)機的時(shí)候,init初始化腳本中,修改fb0的所有者或者屬性了。這樣可以確保你的fb0可以被訪(fǎng)問(wèn)了。所有的前提都是你要能夠修改系統中的init腳本。
    3、關(guān)于LOCAL_CERTIFICATE的問(wèn)題,你可以參考一下:http://blog.csdn.net/liujian885/archive/2010/03/22/5404834.aspx
    4、你執行一下:. build/envsetup.sh這個(gè)腳本之后,Android將會(huì )為你準備好一些工具,比如:mm、mmm等等,你可以通過(guò)help查看。具體請參考:http://mmmyddd.freeshell.net/wiki/android/build.html 的“2.2 模塊編譯“。
    4、你說(shuō)的JNI的時(shí)候采用到Android.mk是因為你用Eclipse開(kāi)發(fā)APK。如果你在A(yíng)ndroid SDK源碼開(kāi)發(fā)APK,就必須要寫(xiě)Android.mk了。

    [回復]

    fanfq 回復:

    今天一上班就查看樓主是否回復,感謝樓主的及時(shí)回復,問(wèn)題解釋的也很清楚,在此小弟表示感謝。我也會(huì )嘗試用你的解決方案來(lái)處理我現在所遇到的問(wèn)題。

    [回復]

  3. fanfq

    2010-12-30 22:03:59

    問(wèn)題補充,在模擬器中本來(lái)就有root權限的,為什么apk還是得不到root權限呢?

    [回復]

    Simon_fu 回復:

    Android框架定義成這樣的,你在生成APK的時(shí)候已經(jīng)告訴Android框架你的權限是什么了,人家會(huì )根據你的聲明來(lái)給你相應的權限。獲得system權限方法,就是向Android聲明你的權限。

    [回復]

    fanfq 回復:

    感謝博主的及時(shí)回復,祝博主天天開(kāi)心,呵呵。

    [回復]

  4. pcsuite

    2011-05-08 13:42:29

    博主,你好,我想問(wèn)一下你說(shuō)的第一種方法,底層socket應該寫(xiě)在源碼的什么地方。我只寫(xiě)底層socket和應用層socket能否通信,謝謝。

    [回復]

    Simon_fu 回復:

    當然可以了??!你service監聽(tīng)本機的某個(gè)端口。應用層客戶(hù)端連接本機(127.0.0.1)這個(gè)端口,即可通訊!
    這條路我已經(jīng)走過(guò)了!只需要把service加到init.rc中,后臺運行就可以了。

    [回復]

  5. pcsuite

    2011-05-08 17:16:40

    哦,太謝謝博主了。我也是想將service加入到init.rc中,但我卻不知道將這個(gè)socket(services)代碼寫(xiě)到什么地方,不知道能否指點(diǎn),謝謝博主啊。

    [回復]

    Simon_fu 回復:

    這個(gè)不是問(wèn)題阿!隨便找個(gè)地方(根據你的項目要求),寫(xiě)一個(gè)Android.mk文件,編譯到項目中去就行了??!你可以參考init程序的Android.mk文件來(lái)寫(xiě)。

    [回復]

  6. abc

    2011-05-27 18:50:25

    你好,我通過(guò)上層java調用ifconfig eth0 192.168.1.188,即通過(guò)jni調用c的system,便是還是不行,如果上層要設置ip的話(huà),那么要怎么處理?

    [回復]

  7. lzw

    2011-07-20 17:58:37

    Hello, Simon
    按照你的方法(獲得system用戶(hù)權限三個(gè)步驟),編譯生成的apk不能安裝,提示如下:
    07-20 14:54:14.327: ERROR/PackageManager(86): Package org.android.simulateinput has no signatures that match those in shared user android.uid.system; ignoring!
    請問(wèn)這個(gè)是什么原因?
    我編譯的環(huán)境是android2.1版本下編譯的
    機器是:沒(méi)有root過(guò)的moto手機,
    固件版本 2.1-update1 by kiss771925

    [回復]

    Simon_fu 回復:

    system權限的apk不能用adb install來(lái)安裝的,需要用adb push到相應的目錄下,然后重啟。

    [回復]

  8. ChangerLow

    2011-09-16 16:34:19

    1. 在應用程序的AndroidManifest.xml中的manifest節點(diǎn)中加入android:sharedUserId=”android.uid.system”這個(gè)屬性。
    2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform這一行
    3. 使用mm命令來(lái)編譯,生成的apk就有修改系統時(shí)間的權限了。
    請教下博主,如果我自己寫(xiě)的程序想訪(fǎng)問(wèn)并修改setting中的secure表里面的設置,其實(shí)就似乎setting這個(gè)程序所訪(fǎng)問(wèn)的內容,采用以上三個(gè)步驟就可以實(shí)現嗎? 最近也是因為權限的問(wèn)題很頭大。謝謝解惑了

    [回復]

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
iMX6 Android系統下常見(jiàn)問(wèn)題解決思路
【Android 】你了解嗎?
Android操作系統記要
保護你的隱私,五種控制Android應用的權限的方法
Android應用程序永久獲取root權限方法
解密Android通信安全機制
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久