專利名稱:安卓應(yīng)用程序永久獲取Root權(quán)限的方法
安卓應(yīng)用程序永久獲取Root權(quán)限的方法技術(shù)領(lǐng)域:
本發(fā)明涉及安卓系統(tǒng)上的應(yīng)用程序權(quán)限管理技術(shù)領(lǐng)域,尤其涉及一種已經(jīng)Root 的安卓手機上,安卓應(yīng)用程序永久獲取Root權(quán)限的方法。背景技術(shù):
安卓Android系統(tǒng)中,第三方應(yīng)用程序是以臨時用戶的身份進行運行的,這就使得該應(yīng)用程序的權(quán)限受限制,如應(yīng)用程序要訪問或者修改安卓系統(tǒng)文件時,就會因為權(quán)限不足而失敗?,F(xiàn)在有的安卓手機已經(jīng)進行了 Root設(shè)置,該Root是Linux等類UNIX系統(tǒng)中的超級管理員用戶帳戶。對于Android手機,平常所說的Root,其實就是通過各種方法,將系統(tǒng)的SU程序文件拷貝到/system/bin目錄下,并安裝SuperUser授權(quán)管理,第三方應(yīng)用程序可以通過su程序(su程序是權(quán)限管理文件)執(zhí)行需要Root權(quán)限的操作。但已經(jīng)Root 設(shè)置的手機,第三方應(yīng)用程序就能直接擁有Root權(quán)限的操作嗎?其實不然,Root的手機上,會在/system/bin目錄下存放一個名為su程序的文件,并且安裝有SuperUser (授權(quán)管理)應(yīng)用程序。其他應(yīng)用程序想要以Root權(quán)限執(zhí)行,就必須通過su程序執(zhí)行shell命令, 而此時,SuperUser就會彈出授權(quán)對話框,用戶必須點擊允許,命令才能成功被執(zhí)行。點擊允許時,如果沒有選擇“記住”選項,那么應(yīng)用每次通過su程序執(zhí)行shell命令時,都會彈出授權(quán)提醒的對話框。另外,如果應(yīng)用程序升級了,那么就算之前已經(jīng)記住允許操作了,再通過su程序執(zhí)行shell命令時,也要重新通過su程序進行重復(fù)授權(quán)。
另外彈出的授權(quán)提醒的對話框會帶來如下問題對于用戶在手機的一個界 面上操作手機上的第三方應(yīng)用時,授權(quán)框的彈出并沒有太大問題,因為此時用戶肯定是看著手機在執(zhí)行某些操作,用戶能夠及時的發(fā)現(xiàn)授權(quán)對話框彈出并確認(rèn),只是操作比較繁瑣而已。但是,有些應(yīng)用程序的操作界面并不再手機上,而是在PC機上,用戶將手機連接到PC機,然后通過PC機來管理手機,此時,用戶并不會去關(guān)注手機屏幕,如此,在授權(quán)對話框彈出時用戶就不能及時發(fā)現(xiàn)并確認(rèn),而且會因為手機進入屏保,授權(quán)框無法顯示,這樣就導(dǎo)致授權(quán)失敗。當(dāng)然,用戶在第一次授權(quán)時,可以勾選“記住”選項,下次就不用再授權(quán),但是應(yīng)用程序是會經(jīng)常更新版本的,更新后,又得重新進行授權(quán),給用戶的使用帶來極大不便。
現(xiàn)有技術(shù)中提供了一種“Android平臺下的應(yīng)用程序動態(tài)權(quán)限管理方法”,見公開號為CN102289633A,
公開日為2011. 12.21的中國專利,包括應(yīng)用程序安裝時動態(tài)選擇保存自身系統(tǒng)權(quán)限表;安裝后,用戶通過人機接口動態(tài)選擇修改所述系統(tǒng)權(quán)限表;訪問需要權(quán)限的API時,Android平臺根據(jù)該應(yīng)用程序的系統(tǒng)權(quán)限表中的記錄判斷是否該API被禁用;當(dāng)所述API被禁用時,該應(yīng)用程序通過人機接口提示用戶是否選擇修改;若用戶選擇修改權(quán)限,Android平臺允許該應(yīng)用程序訪問所述API,否則該應(yīng)用程序退出訪問。這種權(quán)限管理方法,用戶能根據(jù)需要及個人經(jīng)驗隨時修改應(yīng)用程序的權(quán)限,從而能很大程度上防止應(yīng)用程序的惡意訪問資源,修改、竊取個人信息等危險行為。但該方法要是Android平臺下的應(yīng)用程序有更新時,該設(shè)置的權(quán)限管理將失效,還要重新進配置,操作麻煩。
為了讓審查人員更容易理解本發(fā)明這里需要指出的是
I、Linux中,文件權(quán)限的問題
文件權(quán)限每個Linux文件具有四種訪問權(quán)限可讀(r)、可寫(W)、可執(zhí)行(χ),無權(quán)限(-)。
權(quán)限分類所有者,組成員,其他用戶。每類的權(quán)限可以用字母表示,如rwxrwxr-x 表示即所有者及組成員擁有讀、寫、執(zhí)行的權(quán)限,其他用戶只擁有讀和執(zhí)行的權(quán)限(即 rwx ‘所有者’rwx ‘組成員’ r-χ ‘其他用戶’)。數(shù)字表示法所謂數(shù)字表示法,是指將r、w 和χ分別用4、2、1來代表,沒有授予權(quán)限(-)的則為0,然后把權(quán)限相加,如下文件權(quán)限為 rwxr-xr-x,轉(zhuǎn)換為數(shù)字為(421) (401) (401 ),相加后表示為755。
2、Linux用戶及分組
Linux是一個多任務(wù)多用戶操作系統(tǒng)。
多任務(wù)多個前臺應(yīng)用程序和后臺服務(wù)程序宏觀上的同時運行。
多用戶多個用戶同時登錄系統(tǒng)作業(yè);為保證用戶的私密性而建立的保護和限制機制。
通常的多用戶系統(tǒng)中都存在一個超級用戶,例如Linux中的root用戶,Windows系統(tǒng)中的administrator等,系統(tǒng)中可以存在若干個具有不同的權(quán)限分類等級的其他用戶, 例如由超級用戶建立的普通用戶等,目前大多Linux發(fā)行版在安裝時都要求建立一個普通用戶,并使用該用戶登陸。
3、用戶組
可以對用戶進行分組,一個用戶組可包含多個用戶,一個用戶也可以同時屬于多個分組。
例如,有以下分組及用戶
分組groupl,包含用戶 userl, user2
分組group2,包含用戶user2
現(xiàn)在由groupl中的userl創(chuàng)建一個文件f,指定其權(quán)限為775,那么userl及user2 對文件f都有讀、寫、執(zhí)行的權(quán)限,而group2中的user2則只有讀和執(zhí)行的權(quán)限
4、系統(tǒng)中的標(biāo)識位suid :
suid 是 Set User ID 的意思
如果一個文件被設(shè)置了 suid標(biāo)識位,會表現(xiàn)在所有者的權(quán)限的可執(zhí)行位上即可執(zhí)行(X)的位置上,例如
rwsr-xr-x表示suid和權(quán)限分類中的所有者的權(quán)限中可執(zhí)行位被設(shè)置。
數(shù)字表示法suid對應(yīng)的數(shù)字為4,如rwsr-xr-x就表示為4755
suid的作用讓本來沒有相應(yīng)權(quán)限的用戶運行這個程序時,可以訪問他沒有權(quán)限訪問的資源(即讓一些資源沒有訪問權(quán)限的有了訪問權(quán)限)。
例如,有用戶userl和user2 ;現(xiàn)在由用戶userl創(chuàng)建一個普通文件f,其權(quán)限為 rwxr-xr-x (755),并創(chuàng)建一個可執(zhí)行文件r,且其權(quán)限為rwxr-xr-x (未設(shè)置suid),此時由user2運行程序r, r的有效用戶id (euid)就是user2,由于user2對文件f沒有寫的權(quán)限,所以r程序也就無法修改文件f ;如果設(shè)置了文件f的suid,即權(quán)限改為rwsr-xr-x (4755),此時再由user2運行程序r,r的euid將被設(shè)置為其所有者的id,即userl,也就可以修改文件f 了。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題,在于提供一種安卓應(yīng)用程序永久獲取Root權(quán)限的方法,其解決應(yīng)用程序以Root身份執(zhí)行命令時,SuperUser會多次彈出授權(quán)提醒的問題。
本發(fā)明是這樣實現(xiàn)的一種安卓應(yīng)用程序永久獲取Root權(quán)限的方法,包括如下步驟
步驟I、將安卓應(yīng)用程序中需要用到Root權(quán)限的操作通過C/C++語言進行編寫,并編譯成一安卓系統(tǒng)可執(zhí)行程序文件,且所述可執(zhí)行程序文件能實現(xiàn)自我升級功能和與安卓應(yīng)用程序的通信的功能;將可執(zhí)行程序文件打包在安卓應(yīng)用程序中;
步驟2、在安卓系統(tǒng)下判斷/system/bin的目錄下是否存在所述可執(zhí)行程序文件, 否,則進入步驟3 ;是,則判斷可執(zhí)行程序文件是否需要升級,要升級,則安卓應(yīng)用程序與該可執(zhí)行程序文件建立通信,并調(diào)用自我升級功能,對該可執(zhí)行程序文件進行升級處理,并轉(zhuǎn)入步驟8 ;不升級,則直接進入步驟8 ;
步驟3、安卓應(yīng)用程序運行安卓系統(tǒng)的su程序?qū)Σ僮饔脩暨M行第一次授權(quán);
步驟4、將安卓系統(tǒng)的/system目錄進行重掛載為可寫狀態(tài);
步驟5、將安卓系統(tǒng)的/system/bin目錄的權(quán)限進行設(shè)置,以保證安卓應(yīng)用程序?qū)?/system/bin的目錄擁有寫的權(quán)限;
步驟6、將所述可執(zhí)行程序文件拷貝到所述/system/bin的目錄下,并修改該可執(zhí)行程序文件權(quán)限分類的所有者和所屬分組為Root ;
步驟7、設(shè)置可執(zhí)行程序文件的suid標(biāo)識位,設(shè)置suid標(biāo)識位后,可執(zhí)行程序文件就能以所有者的身份被安卓應(yīng)用程序所執(zhí)行,即擁有Root權(quán)限的操作;
步驟8、安卓應(yīng)用程序執(zhí)行可執(zhí)行程序文件并與其建立通信,此時安卓應(yīng)用程序需要用到Root權(quán)限的操作只要通過可執(zhí)行程序文件進行執(zhí)行即可,無需通過安卓系統(tǒng)的SU 程序進行重復(fù)授權(quán)。
本發(fā)明具有如下優(yōu)點本發(fā)明將需要用到Root權(quán)限的操作進行編寫,并編譯成一可執(zhí)行程序文件,將該可執(zhí)行程序文件進行部署、設(shè)置,這樣能夠使該文件每次執(zhí)行都擁有 Root權(quán)限,從而避免再次彈出授權(quán)框。由于需求的變動,該文件程序可能會需要升級,因此文件需要實現(xiàn)自我升級的功能,以避免更新時需要再次彈出授權(quán)框。本發(fā)明通過該文件以 Root的身份執(zhí)行各種操作,就算應(yīng)用程序被重裝、升級,也無需再進行重復(fù)的su程序授權(quán)操作,給用戶的使用帶來極大方便。
圖1為本發(fā)明方法流程示意圖。
具體實施方式
如圖1所示,本發(fā)明的一種安卓應(yīng)用程序永久獲取Root權(quán)限的方法,包括如下步驟
步驟I、將安卓應(yīng)用程序中需要用到Root權(quán)限的操作通過C/C++語言進行編寫,并編譯成一安卓系統(tǒng)可執(zhí)行程序文件(如,該可執(zhí)行程序文件的名稱為mySu),且所述可執(zhí)行程序文件能實現(xiàn)自我升級功能和與安卓應(yīng)用程序的通信的功能;將可執(zhí)行程序文件打包在安卓應(yīng)用程序中;
步驟2、在安卓系統(tǒng)下判斷/system/bin的目錄下是否存在所述可執(zhí)行程序文件, 否,則進入步驟3 ;是,則判斷可執(zhí)行程序文件是否需要升級,要升級,則安卓應(yīng)用程序與該可執(zhí)行程序文件建立通信(該通信時借于可執(zhí)行程序文件與安卓應(yīng)用程序有通信的功能), 并調(diào)用自我升級功能,對該可執(zhí)行程序文件進行升級處理,并轉(zhuǎn)入步驟8 ;不升級,則直接進入步驟8 ;
步驟3、安卓應(yīng)用程序運行安卓系統(tǒng)的su程序?qū)Σ僮饔脩暨M行第一次授權(quán);其具體為安卓應(yīng)用程序運行安卓系統(tǒng)的SU程序,并獲取SU程序的輸出流,之后的SU命令可直接往輸出流寫入命令并執(zhí)行,而無需重新運行SU程序,如此就只需要用戶授權(quán)一次即可,此時,往SU程序的輸出流寫入一任意的字符命令(該字符命令為無關(guān)緊要的命令,如 “id”),該字符命令主要是為了讓安卓系統(tǒng)的SuperUser會彈出授權(quán)對話框,此時,安卓系統(tǒng)的SuperUser會彈出授權(quán)對話框,操作用戶點擊允許,則繼續(xù)執(zhí)行所述步驟4,操作用戶點擊拒絕,則結(jié)束流程。
步驟4、將安卓系統(tǒng)的/system目錄進行重掛載為可寫狀態(tài);其具體為往su程序的輸出流寫入第一命令,將安卓系統(tǒng)的/system目錄進行重掛載為可寫狀態(tài),該第一命令為“mount_o remount-w-t [type] [device]/system”,其中[type]為要掛載的文件系統(tǒng)類型,[device]為要掛載的設(shè)備,此兩項為/system目錄掛載的相應(yīng)參數(shù),是通過執(zhí)行安卓系統(tǒng)的shell命令來獲取的。
步驟5、將安卓系統(tǒng)的/system/bin目錄的權(quán)限進行設(shè)置,以保證安卓應(yīng)用程序?qū)?/system/bin的目錄擁有寫的權(quán)限;其具體為往su程序的輸出流寫入第二命令,將安卓系統(tǒng)的/system/bin目錄的權(quán)限改為777,以保證安卓應(yīng)用程序?qū)?system/bin的目錄擁有寫的權(quán)限,該第二命令為“chmod 777/system/bin”。
步驟6、將所述可執(zhí)行程序文件拷貝到所述/system/bin的目錄下,并修改該可執(zhí)行程序文件權(quán)限分類的所有者和所屬分組為Root ;其具體為往SU程序的輸出流寫入第三命令,將可執(zhí)行程序文件拷貝到所述/system/bin的目錄下,該第三命令為“dd if =[fromPath]of = [toPath] ”,其中[fromPath]為可執(zhí)行程序文件此時所在的路徑, [toPath]為要拷貝到的路徑,即/system/bin/可執(zhí)行程序文件的名稱;并往su程序的輸出流寫入第四命令,修改該可執(zhí)行程序文件權(quán)限分類的所有者和所屬分組為root,第四命令為“chown root root/system/bin/可執(zhí)行程序文件的名稱(即為“mySu”,該名稱也可以用其他的命名來替換)”。
步驟7、設(shè)置可執(zhí)行程序文件的suid標(biāo)識位,設(shè)置suid標(biāo)識位后,可執(zhí)行程序文件就能以所有者的身份被安卓應(yīng)用程序所執(zhí)行,即擁有Root權(quán)限的操作;其具體為往SU程序的輸出流寫入第五命令,設(shè)置可執(zhí)行程序文件的SUid標(biāo)識位,并將可執(zhí)行程序文件權(quán)限設(shè)置為可讀可執(zhí)行,即可執(zhí)行程序文件權(quán)限設(shè)置為4755,其中“4”是SUid標(biāo)識位,可執(zhí)行程序文件就能以所有者的身份被安卓應(yīng)用程序所執(zhí)行,即擁有Root權(quán)限的操作;這樣應(yīng)用程序即能永久獲取Root權(quán)限的操作;該第五命令為“chmod 4755/system/bin/可執(zhí)行程序文件的名稱(即為“mySu”)”。
步驟8、安卓應(yīng)用程序執(zhí)行可執(zhí)行程序文件并與其建立通信,此時安卓應(yīng)用程序需要用到Root權(quán)限的操作只要通過可執(zhí)行程序文件進行執(zhí)行即可,無需通過安卓系統(tǒng)的SU 程序進行重復(fù)授權(quán)。
其中,所述Root權(quán)限的操作包括獲取文件目錄、靜默安裝程序以及卸載程序等坐寸ο
這里值得一提的是
掛載和重掛載的區(qū)別,掛載
Linux系統(tǒng)中,需要將存儲設(shè)備掛載到某個目錄,我們才能在文件管理中正常使用;則一般通過shell中執(zhí)行mount命令可以看到各個目錄的掛載信息,例如/dev/ block/mmcblk0p9/system ext4 ro ;該信息表不將存儲設(shè)備 “/dev/block/mmcblk0p9” 掛載到/system目錄,其文件系統(tǒng)類型為“ext4”,其讀寫權(quán)限為“ι ”(只讀)
重掛載一般通過shell執(zhí)行remount命令進行重新掛載存儲設(shè)備例如 “mount-o remount-w-t ext4/dev/block/mmcblk0p9/system”,表不將 /system 重掛載,其文件系統(tǒng)類型為“ext4”,其存儲設(shè)備為“/dev/block/mmcblk0p9”,其讀寫權(quán)限為“-w”,即可讀可寫。步驟4中涉及的是進行重掛載的操作。
總之,本發(fā)明通過該文件以Root的身份執(zhí)行各種操作,就算應(yīng)用程序被重裝、升級,也無需再進行重復(fù)的SU程序授權(quán)操作,給用戶的使用帶來極大方便。
以上所述僅為本發(fā)明的較佳實施例,凡依本發(fā)明申請專利范圍所做的均等變化與修飾,皆應(yīng)屬本發(fā)明的涵蓋范圍。
權(quán)利要求
1.一種安卓應(yīng)用程序永久獲取Root權(quán)限的方法,其特征在于包括如下步驟 步驟I、將安卓應(yīng)用程序中需要用到Root權(quán)限的操作通過C/C++語言進行編寫,并編譯成一安卓系統(tǒng)可執(zhí)行程序文件,且所述可執(zhí)行程序文件能實現(xiàn)自我升級功能和與安卓應(yīng)用程序的通信的功能;將可執(zhí)行程序文件打包在安卓應(yīng)用程序中; 步驟2、在安卓系統(tǒng)下判斷/system/bin的目錄下是否存在所述可執(zhí)行程序文件,否,則進入步驟3 ;是,則判斷可執(zhí)行程序文件是否需要升級,要升級,則安卓應(yīng)用程序與該可執(zhí)行程序文件建立通信,并調(diào)用自我升級功能,對該可執(zhí)行程序文件進行升級處理,并轉(zhuǎn)入步驟8 ;不升級,則直接進入步驟8 ; 步驟3、安卓應(yīng)用程序運行安卓系統(tǒng)的su程序?qū)Σ僮饔脩暨M行第一次授權(quán); 步驟4、將安卓系統(tǒng)的/system目錄進行重掛載為可寫狀態(tài); 步驟5、將安卓系統(tǒng)的/system/bin目錄的權(quán)限進行設(shè)置,以保證安卓應(yīng)用程序?qū)?system/bin的目錄擁有寫的權(quán)限; 步驟6、將所述可執(zhí)行程序文件拷貝到所述/system/bin的目錄下,并修改該可執(zhí)行程序文件權(quán)限分類的所有者和所屬分組為Root ; 步驟7、設(shè)置可執(zhí)行程序文件的suid標(biāo)識位,設(shè)置suid標(biāo)識位后,可執(zhí)行程序文件就能以所有者的身份被安卓應(yīng)用程序所執(zhí)行,即擁有Root權(quán)限的操作; 步驟8、安卓應(yīng)用程序執(zhí)行可執(zhí)行程序文件并與其建立通信,此時安卓應(yīng)用程序需要用到Root權(quán)限的操作只要通過可執(zhí)行程序文件進行執(zhí)行即可,無需通過安卓系統(tǒng)的su程序進行重復(fù)授權(quán)。
2.根據(jù)權(quán)利要求I所述的安卓應(yīng)用程序永久獲取Root權(quán)限的方法,其特征在于所述Root權(quán)限的操作包括獲取文件目錄、靜默安裝程序以及卸載程序。
3.根據(jù)權(quán)利要求I所述的安卓應(yīng)用程序永久獲取Root權(quán)限的方法,其特征在于所述步驟3具體為安卓應(yīng)用程序運行安卓系統(tǒng)的su程序,并獲取su程序的輸出流,之后的su命令可直接往輸出流寫入命令并執(zhí)行,此時,往SU程序的輸出流寫入一任意的字符命令,安卓系統(tǒng)的Superuser會彈出授權(quán)對話框,操作用戶點擊允許,則繼續(xù)執(zhí)行所述步驟4,操作用戶點擊拒絕,則結(jié)束流程。
4.根據(jù)權(quán)利要求I所述的安卓應(yīng)用程序永久獲取Root權(quán)限的方法,其特征在于所述步驟4具體為往su程序的輸出流寫入第一命令,將安卓系統(tǒng)的/system目錄進行重掛載為可寫狀態(tài),該第一命令為“mount-oremount_w - t [type] [device]/system”,其中[type]為要掛載的文件系統(tǒng)類型,[device]為要掛載的設(shè)備,此兩項為/system目錄掛載的相應(yīng)參數(shù),是通過執(zhí)行安卓系統(tǒng)的shell命令來獲取的。
5.根據(jù)權(quán)利要求I所述的安卓應(yīng)用程序永久獲取Root權(quán)限的方法,其特征在于所述步驟5具體為往su程序的輸出流寫入第二命令,將安卓系統(tǒng)的/system/bin目錄的權(quán)限改為777,以保證安卓應(yīng)用程序?qū)?system/bin的目錄擁有寫的權(quán)限,該第二命令為“chmod 777/system/bin”。
6.根據(jù)權(quán)利要求I所述的安卓應(yīng)用程序永久獲取Root權(quán)限的方法,其特征在于所述步驟6具體為往su程序的輸出流寫入第三命令,將可執(zhí)行程序文件拷貝到所述/system/bin 的目錄下,該第三命令為 “dd if = [fromPath]of = [toPath] ”,其中[fromPath]為可執(zhí)行程序文件此時所在的路徑,[toPath]為要拷貝到的路徑,即/system/bin/可執(zhí)行程序文件的名稱;并往SU程序的輸出流寫入第四命令,修改該可執(zhí)行程序文件權(quán)限分類的所有者和所屬分組為root,第四命令為“chown root root/system/bin/可執(zhí)行程序文件的名稱”。1
7.根據(jù)權(quán)利要求I所述的安卓應(yīng)用程序永久獲取Root權(quán)限的方法,其特征在于所述步驟7具體為往su程序的輸出流寫入第五命令,設(shè)置可執(zhí)行程序文件的suid標(biāo)識位,并將可執(zhí)行程序文件權(quán)限設(shè)置為可讀可執(zhí)行,即可執(zhí)行程序文件權(quán)限設(shè)置為4755,其中“4”是suid標(biāo)識位,可執(zhí)行程序文件就能以所有者的身份被安卓應(yīng)用程序所執(zhí)行,即擁有Root權(quán)限的操作;該第五命令為“chmod 4755/system/bin/可執(zhí)行程序文件的名稱”。
全文摘要
本發(fā)明提供一種安卓應(yīng)用程序永久獲取Root權(quán)限的方法,將需要用到Root權(quán)限的操作進行編寫,并編譯成一可執(zhí)行程序文件,將該文件包含在應(yīng)用程序中,應(yīng)用程序通過一次su程序授權(quán),將文件拷貝到/system/bin的目錄下,并修改其所有者和所屬分組為root,并設(shè)置其suid標(biāo)識位;如此,就能夠使該文件每次執(zhí)行都擁有Root權(quán)限,從而避免再次彈出授權(quán)框。由于需求的變動,該文件程序可能會需要升級,因此文件需要實現(xiàn)自我升級的功能,以避免更新時需要再次彈出授權(quán)框。本發(fā)明通過該文件以Root的身份執(zhí)行各種操作,就算應(yīng)用程序被重裝、升級,也無需再進行重復(fù)的su程序授權(quán)操作,給用戶的使用帶來極大方便。
文檔編號G06F9/445GK102981835SQ201210436649
公開日2013年3月20日 申請日期2012年11月2日 優(yōu)先權(quán)日2012年11月2日
發(fā)明者張長安, 劉德建, 陳宏展, 羅上清, 潘運武 申請人:福州博遠無線網(wǎng)絡(luò)科技有限公司