本發(fā)明涉及一種APK權(quán)限管理方法、裝置和系統(tǒng),屬于Android系統(tǒng)領(lǐng)域。
背景技術(shù):
Framework層,是Android架構(gòu)中非常重要的一層,起著“承上啟下”的作用,同時(shí)它也負(fù)責(zé)對(duì)apk的行為進(jìn)行控制,apk在AndroidManifest.xml中申請(qǐng)相關(guān)的控制權(quán)限,framework負(fù)責(zé)在apk執(zhí)行對(duì)應(yīng)操作時(shí),檢查其是否已經(jīng)申請(qǐng)了該權(quán)限。Hal層,是主要由C/C++編寫(xiě),編譯成so庫(kù),主要是對(duì)設(shè)備操作的相關(guān)接口的封裝,應(yīng)用可以通過(guò)調(diào)用so中的接口來(lái)控制設(shè)備。
目前Android上,對(duì)應(yīng)用權(quán)限進(jìn)行檢查和控制,都由framework完成,如果繞開(kāi)了framework直接調(diào)用hal層的接口,就無(wú)法檢查應(yīng)用的權(quán)限,導(dǎo)致無(wú)法控制應(yīng)用的行為,具有很大的風(fēng)險(xiǎn)。
例如某個(gè)apk,它在AndroidManifest.xml中申請(qǐng)了某權(quán)限例如<uses-permission android:name="android.permission.CLOUDPOS_CONTACTLESS_CARD"/>,apk先調(diào)用他們自己用C寫(xiě)的so庫(kù),這個(gè)so庫(kù)里面使用dlopen調(diào)用系統(tǒng)hal層提供的so,起到操作某設(shè)備功能,這樣就完全繞開(kāi)了framework層,無(wú)法判斷其是否申請(qǐng)了對(duì)應(yīng)的權(quán)限,這樣會(huì)對(duì)系統(tǒng)的安全造成潛在的威脅。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述問(wèn)題,本發(fā)明通過(guò)提供一種APK權(quán)限管理方法、裝置和系統(tǒng)。
本發(fā)明采用的技術(shù)方案一方面為一種APK權(quán)限管理方法,為Android系統(tǒng)增加Hal層管理模塊,所述Hal層管理模塊用于獲取APK注冊(cè)的申請(qǐng)權(quán)限信息并基于申請(qǐng)權(quán)限信息控制APK對(duì)Hal層接口的訪問(wèn)。
優(yōu)選地,所述Hal層管理模塊獲取APK注冊(cè)的申請(qǐng)權(quán)限信息的步驟包括:S1、基于getpid函數(shù)獲取APK的進(jìn)程號(hào);S2、讀取cmdline文件以獲取APK的包名;S3、解析packages.xml文件以獲取APK申請(qǐng)的訪問(wèn)權(quán)限,標(biāo)記其為申請(qǐng)權(quán)限信息。
優(yōu)選地,所述Hal層管理模塊包括若干接口,所述接口用于基于getpid函數(shù)獲取APK的進(jìn)程號(hào),用于讀取cmdline文件以獲取APK的包名,還用于解析packages.xml文件以獲取APK申請(qǐng)的訪問(wèn)權(quán)限,標(biāo)記其為申請(qǐng)權(quán)限信息。
優(yōu)選地,所述接口基于C語(yǔ)言實(shí)現(xiàn)。
本發(fā)明采用的技術(shù)方案另一方面為一種APK權(quán)限管理裝置,該裝置用于為Android系統(tǒng)增加Hal層管理模塊,所述Hal層管理模塊用于獲取APK注冊(cè)的申請(qǐng)權(quán)限信息并基于申請(qǐng)權(quán)限信息控制APK對(duì)Hal層接口的訪問(wèn)。
優(yōu)選地,所述Hal層管理模塊獲取APK注冊(cè)的申請(qǐng)權(quán)限信息的步驟包括:S1、基于getpid函數(shù)獲取APK的進(jìn)程號(hào);S2、讀取cmdline文件以獲取APK的包名;S3、解析packages.xml文件以獲取APK申請(qǐng)的訪問(wèn)權(quán)限,標(biāo)記其為申請(qǐng)權(quán)限信息。
優(yōu)選地,所述Hal層管理模塊包括若干接口,所述接口用于基于getpid函數(shù)獲取APK的進(jìn)程號(hào),用于讀取cmdline文件以獲取APK的包名,還用于解析packages.xml文件以獲取APK申請(qǐng)的訪問(wèn)權(quán)限,標(biāo)記其為申請(qǐng)權(quán)限信息。
優(yōu)選地,所述接口基于C語(yǔ)言實(shí)現(xiàn)。
本發(fā)明采用的技術(shù)方案另一方面為一種Android系統(tǒng),所述系統(tǒng)包括Hal層管理模塊,所述Hal層管理模塊用于獲取APK注冊(cè)的申請(qǐng)權(quán)限信息并基于申請(qǐng)權(quán)限信息控制APK對(duì)Hal層接口的訪問(wèn)。
本發(fā)明的有益效果為通過(guò)增加一個(gè)Hal層管理模塊,獲取APK的申請(qǐng)的訪問(wèn)權(quán)限,通過(guò)監(jiān)視進(jìn)程獲取APK的訪問(wèn)操作,基于申請(qǐng)的訪問(wèn)權(quán)限判斷并處理訪問(wèn)操作,能夠在Hal層上實(shí)現(xiàn)對(duì)APK的監(jiān)控,防止APK越過(guò)framework層進(jìn)行訪問(wèn),能夠增加Android系統(tǒng)的防護(hù)能力。
附圖說(shuō)明
圖1所示為基于本發(fā)明實(shí)施例的獲取APK注冊(cè)的申請(qǐng)權(quán)限信息的流程圖;
圖2所示為基于本發(fā)明實(shí)施例的一種Android系統(tǒng)的示意圖。
具體實(shí)施方式
以下結(jié)合實(shí)施例對(duì)本發(fā)明進(jìn)行說(shuō)明。
基于發(fā)明的實(shí)施例,一種APK權(quán)限管理方法,為Android系統(tǒng)增加Hal層管理模塊,所述Hal層管理模塊用于獲取APK注冊(cè)的申請(qǐng)權(quán)限信息并基于申請(qǐng)權(quán)限信息控制APK對(duì)Hal層接口的訪問(wèn)。
通過(guò)在Android系統(tǒng)里面附加一個(gè)新的模塊(Hal層管理模塊),對(duì)APK的相關(guān)進(jìn)程進(jìn)行監(jiān)控,防止其避過(guò)framework層而直接調(diào)用Hal層的接口,由于正常的APK在啟動(dòng)的時(shí)候會(huì)登入其申請(qǐng)的權(quán)限(一般存儲(chǔ)在AndroidManifest.xml文件中),因此Hal層管理模塊會(huì)通過(guò)讀取記載著正式的申請(qǐng)的權(quán)限的文件,獲取該APK的申請(qǐng)的權(quán)限,同時(shí)基于該申請(qǐng)的權(quán)限的信息控制APK對(duì)Hal層接口的訪問(wèn),即正式登陸過(guò)的權(quán)限會(huì)讓其執(zhí)行,沒(méi)有申請(qǐng)的權(quán)限則認(rèn)為其非法并禁止其執(zhí)行。
如圖1所示流程圖,所述Hal層管理模塊獲取APK注冊(cè)的申請(qǐng)權(quán)限信息的步驟包括:S1、基于getpid函數(shù)獲取APK的進(jìn)程號(hào);S2、讀取cmdline文件以獲取APK的包名;S3、解析packages.xml文件以獲取APK申請(qǐng)的訪問(wèn)權(quán)限,標(biāo)記其為申請(qǐng)權(quán)限信息。
所有安裝的apk申請(qǐng)的權(quán)限,最后會(huì)統(tǒng)一注冊(cè)到/data/system/packages.xml;基于getpid函數(shù)獲得APK的進(jìn)程號(hào)(首先,Hal層管理模塊實(shí)時(shí)接收到訪問(wèn)Hal層的進(jìn)程的信息,區(qū)別出那些是APK發(fā)出的進(jìn)程,通過(guò)getpid函數(shù)追溯屬于APK的進(jìn)程的來(lái)源,即對(duì)應(yīng)的APK的進(jìn)程號(hào));有了進(jìn)程號(hào)之后,通過(guò)讀取 /proc/(pid)/cmdline文件以獲取當(dāng)前APK的包名;知道包名之后,解析/data/system/packages.xml查詢到對(duì)應(yīng)包名位置,就可以解析出apk申請(qǐng)了哪些權(quán)限,標(biāo)記這些信息為申請(qǐng)權(quán)限信息。
所述Hal層管理模塊包括若干接口,所述接口用于基于getpid函數(shù)獲取APK的進(jìn)程號(hào),用于讀取cmdline文件以獲取APK的包名,還用于解析packages.xml文件以獲取APK申請(qǐng)的訪問(wèn)權(quán)限,標(biāo)記其為申請(qǐng)權(quán)限信息。
Hal層管理模塊主要的結(jié)構(gòu)為一套接口,可以供Hal層實(shí)用,通過(guò)這一套接口,實(shí)現(xiàn)上述的用于基于getpid函數(shù)獲取APK的進(jìn)程號(hào),用于讀取cmdline文件以獲取APK的包名,還用于解析packages.xml文件以獲取APK申請(qǐng)的訪問(wèn)權(quán)限,標(biāo)記其為申請(qǐng)權(quán)限信息等功能。
所述接口基于C語(yǔ)言實(shí)現(xiàn)。
接口的編寫(xiě)語(yǔ)言主要為C語(yǔ)言。
基于本發(fā)明的實(shí)施例,一種APK權(quán)限管理裝置,該裝置用于為Android系統(tǒng)增加Hal層管理模塊,所述Hal層管理模塊用于獲取APK注冊(cè)的申請(qǐng)權(quán)限信息并基于申請(qǐng)權(quán)限信息控制APK對(duì)Hal層接口的訪問(wèn)。
所述Hal層管理模塊獲取APK注冊(cè)的申請(qǐng)權(quán)限信息的步驟包括:S1、基于getpid函數(shù)獲取APK的進(jìn)程號(hào);S2、讀取cmdline文件以獲取APK的包名;S3、解析packages.xml文件以獲取APK申請(qǐng)的訪問(wèn)權(quán)限,標(biāo)記其為申請(qǐng)權(quán)限信息。
所述Hal層管理模塊包括若干接口,所述接口用于基于getpid函數(shù)獲取APK的進(jìn)程號(hào),用于讀取cmdline文件以獲取APK的包名,還用于解析packages.xml文件以獲取APK申請(qǐng)的訪問(wèn)權(quán)限,標(biāo)記其為申請(qǐng)權(quán)限信息。
所述接口基于C語(yǔ)言實(shí)現(xiàn)。
基于本發(fā)明的實(shí)施例,一種Android系統(tǒng),其特征在于,所述系統(tǒng)包括Hal層管理模塊,所述Hal層管理模塊用于獲取APK注冊(cè)的申請(qǐng)權(quán)限信息并基于申請(qǐng)權(quán)限信息控制APK對(duì)Hal層接口的訪問(wèn)。
該Android系統(tǒng)相較一般的系統(tǒng),多了用于增加系統(tǒng)安全性的Hal層管理模塊,該Hal層管理模塊的作用與上述實(shí)施例的Hal層管理模塊一致,能夠提高Android系統(tǒng)的安全性。
如圖2所述的一種Android系統(tǒng)的示意圖,首先,APK啟動(dòng)的時(shí)候,在AndroidManifest.xml中申請(qǐng)權(quán)限,同時(shí)調(diào)用APK自己寫(xiě)的SO庫(kù),然后這個(gè)SO庫(kù)里面會(huì)使用dlopen函數(shù)調(diào)用系統(tǒng)Hal層提供的SO庫(kù),起到操作設(shè)備的目的(即執(zhí)行相關(guān)的操作),而本系統(tǒng)能在這個(gè)階段,通過(guò)對(duì)比APK的操作和其在AndroidManifest.xml中申請(qǐng)的權(quán)限(是否存在),判斷是否進(jìn)行了正式的申請(qǐng),如果其操作符合其申請(qǐng)的權(quán)限,則允許其繼續(xù)執(zhí)行操作,否則不允許操作。
以上所述,只是本發(fā)明的較佳實(shí)施例而已,本發(fā)明并不局限于上述實(shí)施方式,只要其以相同的手段達(dá)到本發(fā)明的技術(shù)效果,都應(yīng)屬于本發(fā)明的保護(hù)范圍。在本發(fā)明的保護(hù)范圍內(nèi)其技術(shù)方案和/或?qū)嵤┓绞娇梢杂懈鞣N不同的修改和變化。