專利名稱:本地服務(wù)單元認(rèn)證安卓客戶端應(yīng)用程序的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及安卓系統(tǒng)中應(yīng)用程序安全保護(hù)領(lǐng)域,特別涉及一種本地服務(wù)單元認(rèn)證安卓客戶端應(yīng)用程序的方法。
背景技術(shù):
在安卓(Android)系統(tǒng)下,為了防止盜版軟件的猖獗,谷歌開發(fā)了安卓簽名機(jī)制,安卓簽名機(jī)制標(biāo)明了安卓客戶端應(yīng)用程序的發(fā)行機(jī)構(gòu),通過對(duì)比客戶端應(yīng)用程序的簽名情況,來判斷該客戶端應(yīng)用程序是否由“官方”發(fā)行,而不是被破解者篡改過重新簽名打包的“盜版軟件”。安卓系統(tǒng)要求每一個(gè)安裝進(jìn)系統(tǒng)的應(yīng)用程序都是經(jīng)過數(shù)字證書簽名的,數(shù)字證書的私鑰則保存在程序開發(fā)者的手中。安卓系統(tǒng)將數(shù)字證書用來標(biāo)識(shí)應(yīng)用程序的作者和在應(yīng)用程序之間建立信任關(guān)系,數(shù)字證書不是用來決定最終用戶可以安裝哪些應(yīng)用程序。這個(gè)數(shù)字證書并不需要權(quán)威的數(shù)字證書簽名機(jī)構(gòu)認(rèn)證,它只是用來讓應(yīng)用程序包自我認(rèn)證的。通過安卓簽名工具簽名后的客戶端應(yīng)用程序包中多了一個(gè)META-INF的文件夾,該文件夾中包含了加密信息,其他的文件則沒有任何改變,這樣就可以很容易去掉原有的 簽名信息,破解應(yīng)用程序包,對(duì)代碼篡改,生成惡意軟件,然后重新簽名,危害了開發(fā)者利益,甚至威脅到手機(jī)和網(wǎng)絡(luò)的安全。為了更進(jìn)一步維護(hù)開發(fā)者的版權(quán)利益,防止盜版軟件的猖獗,保護(hù)安卓系統(tǒng)下應(yīng)用軟件的安全,有開發(fā)者做了改進(jìn),增加安卓客戶端應(yīng)用程序包反編譯的難度。目前已提出一種解決方案,意在解決在安卓系統(tǒng)下盜版應(yīng)用的問題。解決方案如下服務(wù)商提供一個(gè)本地服務(wù)單元(比如,本地服務(wù)程序),本地服務(wù)程序在安卓系統(tǒng)下作為原生service (月艮務(wù)),與安卓系統(tǒng)同時(shí)啟動(dòng),在后臺(tái)一直運(yùn)行,本地服務(wù)程序提供如內(nèi)存加密、文件加密、云服務(wù)器端函數(shù)遠(yuǎn)程調(diào)用等功能。安卓客戶端應(yīng)用程序調(diào)用本地服務(wù)程序提供的接口將關(guān)鍵值(比如游戲類應(yīng)用程序中的金幣值)、關(guān)鍵文件、關(guān)鍵代碼等通過本地服務(wù)程序進(jìn)行加密變換,在客戶端應(yīng)用程序運(yùn)行時(shí),根據(jù)客戶端應(yīng)用程序的調(diào)用需求對(duì)加密對(duì)象用本地服務(wù)程序進(jìn)行實(shí)時(shí)解密運(yùn)行,使得客戶端應(yīng)用程序難以進(jìn)行反編譯和靜態(tài)分析,從而實(shí)現(xiàn)了對(duì)安卓系統(tǒng)應(yīng)用的有效保護(hù)。在這一過程中,客戶端應(yīng)用程序的關(guān)鍵值和關(guān)鍵代碼通過本地服務(wù)程序存儲(chǔ)在云服務(wù)器端,當(dāng)客戶端應(yīng)用程序向云服務(wù)器端存儲(chǔ)或獲取關(guān)鍵值等需求時(shí),需調(diào)用本地服務(wù)程序的遠(yuǎn)程(云服務(wù)器端)調(diào)用接口,由本地服務(wù)程序向云服務(wù)器端通信。本地服務(wù)程序作為客戶端應(yīng)用程序和云服務(wù)器端的中轉(zhuǎn)站,起到連接兩端橋梁的作用。但是如果有一些惡意的客戶端應(yīng)用程序利用現(xiàn)有的本地服務(wù)程序不斷地向云服務(wù)器端進(jìn)行惡意操作(比如不斷地向云服務(wù)器端存金幣或者獲取某些關(guān)鍵值)以獲取利益,那么本地服務(wù)程序則無法辨別該客戶端應(yīng)用程序是否是從正規(guī)渠道下載下來的客戶端應(yīng)用程序,而不是用戶自己編寫的惡意客戶端應(yīng)用程序。因此,存在這樣一種技術(shù)需求,即需要提供一種方法,該方法能夠辨別安卓客戶端應(yīng)用程序是否被替換,從而及時(shí)阻止惡意客戶端應(yīng)用程序的執(zhí)行,防止客戶端應(yīng)用程序的應(yīng)用代碼被惡意篡改。
發(fā)明內(nèi)容
為了防止安卓系統(tǒng)中有惡意軟件利用本地服務(wù)程序修改云服務(wù)器端數(shù)據(jù)以謀取利益,本發(fā)明提供了一種本地服務(wù)程序認(rèn)證客戶端應(yīng)用程序的方法,所述方法包括如下步驟
步驟I:采用加密算法對(duì)所述應(yīng)用程序的客戶端應(yīng)用程序包進(jìn)行加密,生成認(rèn)證信息文件,其中所述客戶端應(yīng)用程序包對(duì)應(yīng)于所述認(rèn)證信息文件;
步驟2:在安卓系統(tǒng)后臺(tái)運(yùn)行本地服務(wù)單元,;
步驟3 :所述應(yīng)用程序與所述本地服務(wù)單元建立binder通信;
步驟4 :所述本地服務(wù)單元根據(jù)所述應(yīng)用程序發(fā)送的信息搜索所述客戶端應(yīng)用程序
包;
步驟5 :如果搜索所述客戶端應(yīng)用程序包成功,則執(zhí)行步驟6 ;否則,斷開所述本地服務(wù)單元與所述應(yīng)用程序的binder通信;
步驟6 :所述本地服務(wù)單元讀取所述認(rèn)證信息文件;
步驟7 :所述本地服務(wù)單元對(duì)所述認(rèn)證信息文件進(jìn)行認(rèn)證;
步驟8 :如果認(rèn)證成功,則所述應(yīng)用程序正常運(yùn)行;否則,斷開所述本地服務(wù)單元與所述應(yīng)用程序的binder通信。根據(jù)本發(fā)明的一個(gè)方面,在所述步驟I中,所述認(rèn)證信息文件存于所述客戶端應(yīng)用程序包內(nèi)部,或者存在遠(yuǎn)程云服務(wù)器端。根據(jù)本發(fā)明的一個(gè)方面,在所述步驟4中,所述本地服務(wù)單元根據(jù)所述應(yīng)用程序發(fā)送的用戶ID和進(jìn)程ID搜索對(duì)應(yīng)的所述客戶端應(yīng)用程序包。根據(jù)本發(fā)明的一個(gè)方面,在所述步驟4中,所述客戶端應(yīng)用程序包是APK包。根據(jù)本發(fā)明的一個(gè)方面,在所述步驟6中,如果讀取不到所述認(rèn)證信息文件,所述本地服務(wù)單元向遠(yuǎn)程云服務(wù)器端搜索所述認(rèn)證信息文件;如果在所述遠(yuǎn)程云服務(wù)器端搜索不到所述認(rèn)證信息文件,則斷開所述本地服務(wù)單元與所述應(yīng)用程序的binder通信。根據(jù)本發(fā)明的一個(gè)方面,如果搜索到所述認(rèn)證信息文件,并且所述認(rèn)證信息文件中包含密文和加密算法,則在步驟7中根據(jù)加密算法的類型選擇相應(yīng)的認(rèn)證方法對(duì)認(rèn)證信息文件中的密文進(jìn)行認(rèn)證。根據(jù)本發(fā)明的一個(gè)方面,如果采用單向加密算法,由所述本地服務(wù)單元根據(jù)加密算法對(duì)所述客戶端應(yīng)用程序包進(jìn)行加密以生成密文,然后將生成的所述密文與所述的認(rèn)證信息文件中的密文進(jìn)行認(rèn)證;
如果采用雙向加密算法,則由所述本地服務(wù)單元獲取密鑰,來解密所述認(rèn)證信息文件中的密文。
根據(jù)本發(fā)明的一個(gè)方面,如果采用雙向加密算法,則雙向加密算法的密鑰存儲(chǔ)在所述本地服務(wù)單元的包中,或者存在云服務(wù)器端。根據(jù)本發(fā)明的一個(gè)方面,在所述步驟8中,認(rèn)證成功后,則所述應(yīng)用程序正常運(yùn)行,并且所述應(yīng)用程序被允許調(diào)用所述本地服務(wù)單元的所提供的服務(wù)。
圖I為本發(fā)明的流程示意 圖2為本發(fā)明中本地服務(wù)程序與客戶端應(yīng)用程序之間建立binder通信過程的示意
圖3為本發(fā)明實(shí)施例一中本地服務(wù)程序?qū)蛻舳藨?yīng)用程序的認(rèn)證過程的示意圖。圖4為本發(fā)明實(shí)施例二中本地服務(wù)程序?qū)蛻舳藨?yīng)用程序的認(rèn)證過程的示意圖。
具體實(shí)施方式
·
為了防止安卓系統(tǒng)中有惡意應(yīng)用程序利用本地服務(wù)單元(在下文中稱為本地服務(wù)程序)修改云服務(wù)器端數(shù)據(jù),本發(fā)明提供了一種通過本地服務(wù)程序認(rèn)證客戶端應(yīng)用程序的方法。本地服務(wù)程序認(rèn)證客戶端應(yīng)用程序的方法為
采用加密算法對(duì)客戶端應(yīng)用程序包加密,生成認(rèn)證信息文件,其中客戶端應(yīng)用程序包對(duì)應(yīng)于一個(gè)認(rèn)證信息文件;根據(jù)本發(fā)明的一個(gè)實(shí)施例,該認(rèn)證信息文件的存儲(chǔ)位置由開發(fā)者決定,可以存于客戶端應(yīng)用程序包內(nèi),也可以存于遠(yuǎn)程服務(wù)器中??蛻舳藨?yīng)用程序啟動(dòng);
本地服務(wù)程序與客戶端應(yīng)用程序建立binder通信;
本地服務(wù)程序與客戶端應(yīng)用程序雙方建立binder通信后,本地服務(wù)程序根據(jù)客戶端應(yīng)用程序的用戶ID和進(jìn)程ID搜索對(duì)應(yīng)的客戶端應(yīng)用程序包,例如,客戶端應(yīng)用程序包是安卓系統(tǒng)下常見的.APK包;
如果沒有搜索到客戶端應(yīng)用程序包,則本地服務(wù)程序斷開與客戶端應(yīng)用程序的binder通信,使得客戶端應(yīng)用程序無法獲取本地服務(wù)程序提供的服務(wù);
如果搜索到客戶端應(yīng)用程序包,則由本地服務(wù)程序讀取客戶端應(yīng)用程序包中的認(rèn)證信息文件;
如果讀取不到認(rèn)證信息文件,則存在兩種可能一是客戶端應(yīng)用程序包不完整,二是生成該認(rèn)證信息文件的加密算法不同導(dǎo)致認(rèn)證信息文件存儲(chǔ)的位置不同,也就是說,該客戶端應(yīng)用程序的認(rèn)證信息文件可能存于云服務(wù)器端;然后本地服務(wù)程序向云服務(wù)器端搜索認(rèn)證信息文件,如果在云服務(wù)器端搜索不成功,則該客戶端應(yīng)用程序包確實(shí)不完整或者不合法,則本地服務(wù)程序?qū)⒃摽蛻舳藨?yīng)用程序斷開binder通信,不向這個(gè)客戶端應(yīng)用程序提供諸如加密功能服務(wù);如果本地服務(wù)程序在云服務(wù)器端搜索到了認(rèn)證信息文件,而且該認(rèn)證信息文件包含密文和加密算法,那么根據(jù)本發(fā)明的一個(gè)實(shí)施例,本地服務(wù)程序根據(jù)加密算法對(duì)客戶端應(yīng)用程序包進(jìn)行加密以生成密文,然后將生成的密文與認(rèn)證信息文件中的密文進(jìn)行比對(duì)認(rèn)證。此外,根據(jù)本發(fā)明的一個(gè)實(shí)施例,除了上述單向加密算法的處理方式,還可用以下處理方式先判斷加密算法的類型,如果是單向加密算法,那么本地服務(wù)程序根據(jù)加密算法對(duì)客戶端應(yīng)用程序包進(jìn)行加密以生成密文,然后將生成的密文與認(rèn)證信息文件中的密文進(jìn)行比對(duì)認(rèn)證;若是雙向加密算法,就用本地服務(wù)程序獲取的密鑰解密(認(rèn)證)客戶端應(yīng)用程序的密文。
如果認(rèn)證不成功,則本地服務(wù)程序與客戶端應(yīng)用程序斷開binder通信,不向該客戶端應(yīng)用程序提供服務(wù),如果認(rèn)證成功,則客戶端應(yīng)用程序正常執(zhí)行。圖I表示了其中的大部分處理流程。所述的客戶端應(yīng)用程序包對(duì)應(yīng)的認(rèn)證信息文件是指經(jīng)加密算法對(duì)客戶端應(yīng)用程序包加密所產(chǎn)生的密文。該認(rèn)證信息文件根據(jù)加密算法的不同存儲(chǔ)的位置也不同,認(rèn)證信息文件可存放于客戶端應(yīng)用程序包內(nèi),也可存放于云服務(wù)器端,這是由所使用的加密算法的特點(diǎn)決定的。根據(jù)認(rèn)證信息文件存儲(chǔ)的位置不同,所對(duì)應(yīng)的本地服務(wù)程序認(rèn)證客戶端應(yīng)用程序的方法也不同。認(rèn)證信息文件根據(jù)需要,除了包含密文,也可以包括加密算法、密鑰存儲(chǔ)位置等其它信息。加密算法大體分為雙向加密和單向加密。單向加密嚴(yán)格上說是一種摘要算法,是非可逆加密,例如MD5算法,其作用是將任意長度的信息變換成一定長的十六進(jìn)制數(shù)字串 (稱作“摘要信息”),同時(shí)保證不同信息的摘要信息彼此不同。針對(duì)這種單向加密的算法,認(rèn)證信息文件包括密文即摘要信息,加密算法為MD5等信息。根據(jù)單向加密的特征,該認(rèn)證信息文件可存儲(chǔ)在云服務(wù)器端,那么在客戶端應(yīng)用程序與本地服務(wù)程序建立連接后,本地服務(wù)程序從云服務(wù)器端下載認(rèn)證信息文件,本地服務(wù)程序根據(jù)認(rèn)證信息文件中的加密算法對(duì)客戶端應(yīng)用程序包重新生成密文與云服務(wù)器端下載的認(rèn)證信息文件的密文進(jìn)行比對(duì)驗(yàn)證,從而判斷客戶端應(yīng)用程序是否合法。根據(jù)本發(fā)明的一個(gè)實(shí)施例,單向加密的認(rèn)證信息文件也可存于客戶端應(yīng)用程序包內(nèi),那么在客戶端應(yīng)用程序與本地服務(wù)程序建立連接后,本地服務(wù)程序根據(jù)認(rèn)證信息文件中的加密算法對(duì)客戶端應(yīng)用程序包重新生成的密文與客戶端應(yīng)用程序包內(nèi)的認(rèn)證信息文件的密文進(jìn)行比對(duì)驗(yàn)證,從而判斷客戶端應(yīng)用程序是否合法。雙向加密算法分為對(duì)稱加密和非對(duì)稱加密,以非對(duì)稱加密算法為例,根據(jù)公鑰和私鑰對(duì),由私鑰將客戶端應(yīng)用程序加密形成密文,那么該客戶端應(yīng)用程序的認(rèn)證信息文件包括密文、公鑰存儲(chǔ)的位置等信息,其中公鑰存儲(chǔ)的位置可以在本地服務(wù)程序包內(nèi),也可以在云服務(wù)器端。本地服務(wù)程序根據(jù)認(rèn)證信息文件中公鑰存儲(chǔ)的位置信息獲取公鑰,根據(jù)獲取的公鑰去驗(yàn)證客戶端應(yīng)用程序的認(rèn)證信息文件的密文。所述的本地服務(wù)程序在安卓系統(tǒng)下表現(xiàn)為一個(gè)原生service (服務(wù)),與安卓系統(tǒng)一同啟動(dòng),在后臺(tái)運(yùn)行,提供服務(wù)。本地服務(wù)程序提供認(rèn)證客戶端應(yīng)用程序是否合法的服務(wù),其同時(shí)也可以提供如內(nèi)存加密、文件加密、遠(yuǎn)程(云服務(wù)器端)函數(shù)調(diào)用等功能模塊,一方面為客戶端應(yīng)用程序提供本地加密服務(wù),另一方面作為客戶端應(yīng)用程序與云服務(wù)器端的中轉(zhuǎn)站與云服務(wù)器端進(jìn)行數(shù)據(jù)交互。本地服務(wù)程序與客戶端應(yīng)用程序的交互是基于binder的Client-Server的通信方式。binder是安卓系統(tǒng)進(jìn)程間通信(IPC)方式之一。binder通信概述binder通信是一種client-server的通信結(jié)構(gòu),I.從表面上來看,是client通過獲得一個(gè)server的代理接口,對(duì)server進(jìn)行直接調(diào)用;2.實(shí)際上,代理
接口中定義的方法與server中定義的方法是--對(duì)應(yīng)的;3. client調(diào)用某個(gè)代理接口中
的方法時(shí),代理接口的方法會(huì)將client傳遞的參數(shù)打包成為Parcel對(duì)象;4.代理接口將該P(yáng)arcel發(fā)送給內(nèi)核中的binderdriver ;5. server會(huì)讀取binderdriver中的請求數(shù)據(jù),如果是發(fā)送給自己的,解包Parcel對(duì)象,處理并將結(jié)果返回;6.整個(gè)的調(diào)用過程是一個(gè)同步過程,在server處理的時(shí)候,client會(huì)block住。安卓系統(tǒng)為每個(gè)安裝好的APK分配WD,故UID是鑒別應(yīng)用身份的重要標(biāo)志,在安卓系統(tǒng)下,每一個(gè)不同的程序都有一個(gè)唯一的WD,一個(gè)應(yīng)用里面可以有多個(gè)PID,binder利用通訊自帶的UID/PID來實(shí)現(xiàn)進(jìn)程和數(shù)據(jù)的隔離。binder是基于Client-Server通信模式,在傳輸過程中,Client端發(fā)送的信息中添加安卓系統(tǒng)分配的UID/PID,這樣Server端就可以根據(jù)發(fā)送方的UID/PID來鑒別Client端的身份,安全性高。在安卓系統(tǒng)中,本地服務(wù)程序作為binder的Server端,客戶端應(yīng)用程序作為binder的Client端。ServiceManager 概述ServiceManager 是一個(gè) Linux 級(jí)的進(jìn)程,是 service 的管理器。任何service在被使用之前,均要向SM(ServiceManager)注冊,同時(shí)客戶端需要訪問某個(gè)service時(shí),應(yīng)該首先向SM查詢是否存在該服務(wù)。如果SM存在這個(gè)service,那么會(huì)將該service的handle返回給client, handle是每個(gè)service的唯一標(biāo)識(shí)符。和DNS類似,ServiceManager的作用是將字符形式的binder名字轉(zhuǎn)化成Client 中對(duì)該binder的引用,使得Client能夠通過binder名字獲得對(duì)Server中binder實(shí)體的引用。注冊了名字的binder叫實(shí)名binder,就象每個(gè)網(wǎng)站除了有IP地址外還有自己的網(wǎng)址。Server創(chuàng)建了 binder實(shí)體,為其取一個(gè)字符形式,可讀易記的名字,將這個(gè)binder連同名字以數(shù)據(jù)包的形式通過binder驅(qū)動(dòng)發(fā)送給ServiceManager,通知ServiceManager注冊一個(gè)名叫張三的binder,它位于某個(gè)Server中。驅(qū)動(dòng)為這個(gè)穿過進(jìn)程邊界的binder創(chuàng)建位于內(nèi)核中的實(shí)體節(jié)點(diǎn)以及ServiceManager對(duì)實(shí)體的引用,將名字及新建的引用打包傳遞給ServiceManager。ServiceManager收數(shù)據(jù)包后,從中取出名字和引用填入一張查找表中。ServiceManager管理service進(jìn)程,本地服務(wù)程序先在ServiceManager注冊名字,成為實(shí)名binder,比如一個(gè)叫張三的binder對(duì)應(yīng)著本地服務(wù)程序的引用??蛻舳藨?yīng)用程序作為相對(duì)于本地服務(wù)程序的Client端,它通過ServiceManager搜索名叫張三對(duì)應(yīng)的binder引用,該引用即為本地服務(wù)程序的binder引用,客戶端應(yīng)用程序通過ServiceManager回復(fù)的binder引用向本地服務(wù)程序發(fā)送請求。雙方建立連接后,開始通信,本地服務(wù)程序根據(jù)binder自帶客戶端應(yīng)用程序在安卓系統(tǒng)下的用戶ID、進(jìn)程ID (WD/PID)號(hào)去識(shí)別客戶端應(yīng)用程序的身份,進(jìn)而實(shí)現(xiàn)諸如進(jìn)程間數(shù)據(jù)隔離、客戶端應(yīng)用程序是否合法的認(rèn)證等功能。綜上所述,本發(fā)明有效地防止了非法客戶端應(yīng)用程序惡意篡改應(yīng)用數(shù)據(jù)造成的破壞。為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照圖并給出具體的實(shí)施例,對(duì)本發(fā)明進(jìn)一步詳細(xì)說明。本領(lǐng)域的技術(shù)人員都應(yīng)清楚,下述實(shí)施例僅僅是實(shí)現(xiàn)本發(fā)明的具體實(shí)現(xiàn)情況,而非對(duì)本發(fā)明的具體限制。本領(lǐng)域的技術(shù)人員根據(jù)下面具體實(shí)施例的技術(shù)教導(dǎo),完全能夠在不脫離本發(fā)明的范圍的情況下進(jìn)行各種改進(jìn)、替換。實(shí)施例一
在本實(shí)施例中,生成客戶端程序包的認(rèn)證信息文件的加密算法為雙向加密算法中的非對(duì)稱加密算法,本實(shí)施例采用RSA私鑰對(duì)安卓客戶端程序包APK中的class, dex文件加密。生成的認(rèn)證信息文件存儲(chǔ)在客戶端應(yīng)用程序包內(nèi)部或者云服務(wù)器端。圖2是本地服務(wù)程序與客戶端應(yīng)用程序建立binder通信的過程。本地服務(wù)程序安裝后隨著安卓系統(tǒng)的啟動(dòng)一直在后臺(tái)運(yùn)行,提供例如內(nèi)存加密、文件加密和遠(yuǎn)程(云服務(wù)器端)函數(shù)調(diào)用等功能??蛻舳藨?yīng)用程序要想獲得本地服務(wù)程序提供的服務(wù),要先與本地服務(wù)程序建立binder通信。圖2主要包括三個(gè)模塊,分別為ServiceManager、Service、Client。ServiceManager用來管理Service, Service用來管理Client。根據(jù)本發(fā)明的一個(gè)具體實(shí)施方式
,本地服務(wù)程序?qū)?yīng)Service模塊,客戶端應(yīng)用程序?qū)?yīng)Client模塊。本地服務(wù)程序先在ServiceManager注冊服務(wù)。例如注冊了一個(gè)叫做Is的binder, ServiceManager管理一個(gè)表,表中維護(hù)著一個(gè)叫Is的binder引用??蛻舳藨?yīng)用程序啟動(dòng),向ServiceManager發(fā)送請求獲取本地服務(wù)程序binder的引用。Client 端向 ServiceManager 請求訪問叫 “Is” 的 binder 引用,ServiceManager端通過查找名字叫做”ls”對(duì)應(yīng)的binder引用,將該引用作為回復(fù)發(fā)送給請求的Client端的客戶端應(yīng)用程序。至此,本地服務(wù)程序與客戶端應(yīng)用程序建立了 binder通信,安卓系統(tǒng)會(huì)為每次binder通信自動(dòng)添加WD、PID信息,從而實(shí)現(xiàn)用戶和進(jìn)程間的數(shù)據(jù)隔離。圖3是本實(shí)施例中本地服務(wù)程序?qū)蛻舳藨?yīng)用程序的認(rèn)證過程。步驟I :用RSA私鑰對(duì)APK包內(nèi)的class, dex文件加密,得到的密文保存在認(rèn)證信息文件中,例如info, txt文件。公鑰的存儲(chǔ)位置保存在info, txt文件中,那么info, txt文件就是該客戶端應(yīng)用程序的認(rèn)證信息文件。根據(jù)本發(fā)明的一個(gè)實(shí)施例,認(rèn)證信息文件可保存在客戶端應(yīng)用程序包內(nèi)部,也可存于云服務(wù)器端。步驟2 :客戶端應(yīng)用程序與本地服務(wù)程序建立binder通信,具體過程參見圖2。步驟3 :本地服務(wù)程序根據(jù)客戶端應(yīng)用程序發(fā)送信息中附帶的UID/PID搜索對(duì)應(yīng)的客戶端應(yīng)用程序包,在安卓系統(tǒng)下應(yīng)用程序包一般后綴為APK包。步驟4 :搜索客戶端應(yīng)用程序包成功,則執(zhí)行步驟5 ;否則斷開本地服務(wù)程序與客戶端程序的binder通信。步驟5 :本地服務(wù)程序開始檢測搜索到的客戶端程序包內(nèi)是否含有認(rèn)證信息文件,本例中為info, txt文件,如果存在,則執(zhí)行步驟7 ;否則執(zhí)行步驟6。步驟6 :本地服務(wù)程序開始檢測云服務(wù)器端是否存在搜索到的客戶端應(yīng)用對(duì)應(yīng)的認(rèn)證信息文件。如果存在,則執(zhí)行步驟7 ;否則斷開本地服務(wù)程序與客戶端程序的binder通 目。步驟7 :本地服務(wù)程序讀取認(rèn)證信息文件的內(nèi)容,獲取公鑰存儲(chǔ)位置。步驟8 :若公鑰存儲(chǔ)在云服務(wù)器端,則執(zhí)行步驟9 ;若公鑰存儲(chǔ)在本地服務(wù)程序包內(nèi)部,則執(zhí)行步驟10 ;若讀取不到公鑰存儲(chǔ)的位置信息,則執(zhí)行步驟11。步驟9 :公鑰存儲(chǔ)在云服務(wù)器端,本地服務(wù)程序通過遠(yuǎn)程調(diào)用函數(shù)獲取云服務(wù)器端的公鑰,若獲取成功,則執(zhí)行步驟12 ;否則斷開本地服務(wù)程序與客戶端應(yīng)用程序的binder 通信。步驟10 :公鑰存儲(chǔ)在本地服務(wù)程序包內(nèi)部,本地服務(wù)程序在自己的程序包內(nèi)搜索公鑰,若搜索成功,則執(zhí)行步驟12,否則斷開本地服務(wù)程序與客戶端應(yīng)用程序的binder通 目。步驟11 :若在認(rèn)證信息文件中讀取不到公鑰存儲(chǔ)的位置信息,那么本地服務(wù)程序先在本地服務(wù)程序自己的程序包內(nèi)搜索公鑰,若搜索成功,則執(zhí)行步驟12 ;否則向云服務(wù)器端獲取公鑰;
步驟12 :本地服務(wù)程序根據(jù)獲取的公鑰去解密認(rèn)證信息文件的密文,若認(rèn)證成功,則客戶端應(yīng)用程序可正常運(yùn)行,并且可調(diào)用本地服務(wù)程序的服務(wù);若認(rèn)證不成功,說明客戶端應(yīng)用程序不合法,則斷開本地服務(wù)程序與客戶端應(yīng)用程序的binder通信。實(shí)施例二
本實(shí)施例采用單向加密算法的MD5對(duì)客戶端應(yīng)用程序包加密,該算法常用于文件校驗(yàn),不管文件多大,經(jīng)MD5后都能生成唯一的MD5值。本例的認(rèn)證信息文件包括MD5值和相應(yīng)的單向加密算法。如果客戶端應(yīng)用程序有變動(dòng),用MD5算法加密產(chǎn)生的MD5值一定不同,根據(jù)這一原理來實(shí)現(xiàn)對(duì)客戶端應(yīng)用程序的認(rèn)證?!?br>
圖4是本實(shí)施例的流程示意圖,描述了在單向加密算法下本地服務(wù)程序?qū)蛻舳藨?yīng)用程序的認(rèn)證過程。步驟I :用MD5算法對(duì)客戶端應(yīng)用程序包加密,產(chǎn)生的MD5值和加密算法組成的認(rèn)證信息文件,認(rèn)證信息文件可存儲(chǔ)在云服務(wù)器端也可存于客戶端應(yīng)用程序包內(nèi)部。步驟2 :客戶端應(yīng)用程序與本地服務(wù)程序建立binder通信,具體過程參見圖2。步驟3 :本地服務(wù)程序根據(jù)客戶端應(yīng)用程序發(fā)送信息中附帶的UID/PID搜索對(duì)應(yīng)的客戶端應(yīng)用程序包,在安卓系統(tǒng)下應(yīng)用程序包一般后綴為APK包。步驟4 :搜索客戶端應(yīng)用程序包成功,則執(zhí)行步驟5 ;否則斷開本地服務(wù)程序與客戶端程序的binder通信。步驟5 :本地服務(wù)程序檢測客戶端應(yīng)用程序包是否存在認(rèn)證信息文件,若存在,則執(zhí)行步驟7;否則執(zhí)行步驟6。步驟6 :本地服務(wù)程序檢測云端是否存在認(rèn)證信息文件,若存在,則執(zhí)行步驟7 ;否則判斷客戶端應(yīng)用程序不合法,斷開本地服務(wù)程序與客戶端應(yīng)用程序的binder通信。步驟7 :本地服務(wù)程序讀取認(rèn)證信息文件中的加密算法,用該加密算法對(duì)客戶端應(yīng)用程序包加密產(chǎn)生密文,用該密文與認(rèn)證信息文件中的密文比對(duì)認(rèn)證,如果認(rèn)證成功,則執(zhí)行步驟8 ;否則斷開本地服務(wù)程序與客戶端應(yīng)用程序的binder通信。步驟8 :認(rèn)證成功后,則客戶端應(yīng)用程序可正常運(yùn)行,并且可調(diào)用本地服務(wù)程序的服務(wù)。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換以及改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種在安卓系統(tǒng)中對(duì)應(yīng)用程序進(jìn)行認(rèn)證的方法,其特征在于,所述方法包括如下步驟 步驟I:采用加密算法對(duì)所述應(yīng)用程序的客戶端應(yīng)用程序包進(jìn)行加密,生成認(rèn)證信息文件,其中所述客戶端應(yīng)用程序包對(duì)應(yīng)于所述認(rèn)證信息文件; 步驟2 :在安卓系統(tǒng)后臺(tái)運(yùn)行本地服務(wù)單元; 步驟3 :所述應(yīng)用程序與所述本地服務(wù)單元建立binder通信; 步驟4 :所述本地服務(wù)單元根據(jù)所述應(yīng)用程序發(fā)送的信息搜索所述客戶端應(yīng)用程序包; 步驟5 :如果搜索所述客戶端應(yīng)用程序包成功,則執(zhí)行步驟6 ;否則,斷開所述本地服務(wù)單元與所述應(yīng)用程序的binder通信; 步驟6 :所述本地服務(wù)單元讀取所述認(rèn)證信息文件; 步驟7 :所述本地服務(wù)單元對(duì)所述認(rèn)證信息文件進(jìn)行認(rèn)證; 步驟8 :如果認(rèn)證成功,則所述應(yīng)用程序正常運(yùn)行;否則,斷開所述本地服務(wù)單元與所述應(yīng)用程序的binder通信。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,在所述步驟I中,所述認(rèn)證信息文件存于所述客戶端應(yīng)用程序包內(nèi)部,或者存在遠(yuǎn)程云服務(wù)器端。
3.根據(jù)權(quán)利要求1-2所述的方法,其特征在于,在所述步驟4中,所述本地服務(wù)單元根據(jù)所述應(yīng)用程序發(fā)送的用戶ID和進(jìn)程ID搜索對(duì)應(yīng)的所述客戶端應(yīng)用程序包。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,在所述步驟4中,所述客戶端應(yīng)用程序包是APK包。
5.根據(jù)權(quán)利要求2所述的方法,其特征在于,在所述步驟6中,如果讀取不到所述認(rèn)證信息文件,所述本地服務(wù)單元向遠(yuǎn)程云服務(wù)器端搜索所述認(rèn)證信息文件;如果在所述遠(yuǎn)程云服務(wù)器端搜索不到所述認(rèn)證信息文件,則斷開所述本地服務(wù)單元與所述應(yīng)用程序的binder 通信。
6.根據(jù)權(quán)利要求I所述的方法,其特征在于,如果搜索到所述認(rèn)證信息文件,并且所述認(rèn)證信息文件中包含密文和加密算法,則在步驟7中根據(jù)加密算法的類型選擇相應(yīng)的認(rèn)證方法對(duì)認(rèn)證信息文件中的密文進(jìn)行認(rèn)證。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于, 如果采用單向加密算法,由所述本地服務(wù)單元根據(jù)加密算法對(duì)所述客戶端應(yīng)用程序包進(jìn)行加密以生成密文,然后將生成的所述密文與所述的認(rèn)證信息文件中的密文進(jìn)行認(rèn)證;如果采用雙向加密算法,則由所述本地服務(wù)單元獲取密鑰,來解密所述認(rèn)證信息文件中的密文。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于,如果采用雙向加密算法,則雙向加密算法的密鑰存儲(chǔ)在所述本地服務(wù)單元的包中,或者存在云服務(wù)器端。
9.根據(jù)權(quán)利要求I所述的方法,其特征在于,在所述步驟8中,認(rèn)證成功后,則所述應(yīng)用程序正常運(yùn)行,并且所述應(yīng)用程序被允許調(diào)用所述本地服務(wù)單元的所提供的服務(wù)。
全文摘要
本發(fā)明提供了一種本地服務(wù)程序認(rèn)證安卓客戶端應(yīng)用程序的方法。該方法先對(duì)客戶端應(yīng)用程序進(jìn)行簽名生成認(rèn)證信息文件,當(dāng)客戶端應(yīng)用程序在安卓系統(tǒng)中運(yùn)行時(shí),本地服務(wù)程序?qū)φJ(rèn)證信息文件進(jìn)行認(rèn)證,認(rèn)證通過之后客戶端應(yīng)用程序才可正常使用本地服務(wù)程序提供的服務(wù)。通過本發(fā)明提供的方法,使得經(jīng)篡改的客戶端應(yīng)用程序無法獲取本地服務(wù)程序的功能,區(qū)隔了合法軟件和惡意軟件,確保了安卓系統(tǒng)和網(wǎng)絡(luò)的安全性。
文檔編號(hào)H04L9/32GK102891843SQ20121034478
公開日2013年1月23日 申請日期2012年9月18日 優(yōu)先權(quán)日2012年9月18日
發(fā)明者不公告發(fā)明人 申請人:北京深思洛克軟件技術(shù)股份有限公司