本發(fā)明涉及通信技術(shù)領(lǐng)域,特別是涉及一種應(yīng)用進(jìn)程監(jiān)控的方法和裝置。
背景技術(shù):
代碼注入是外掛、病毒等惡意軟件常用的技術(shù),惡意軟件是將包含惡意形為的可執(zhí)行文件動(dòng)態(tài)注入到第三方應(yīng)用進(jìn)程中運(yùn)行,達(dá)到篡改、竊取數(shù)據(jù)和破壞第三方應(yīng)用進(jìn)程的效果。常見的第三方應(yīng)用進(jìn)程比如銀行、網(wǎng)購、支付以及游戲等往往容易成為這類惡意軟件的目標(biāo)應(yīng)用進(jìn)程。
通常,對(duì)應(yīng)用進(jìn)程進(jìn)行代碼注入的過程包括兩步,第一步是惡意軟件附加到目標(biāo)應(yīng)用進(jìn)程,使其處于可調(diào)試的狀態(tài),第二步是向目標(biāo)應(yīng)用進(jìn)程發(fā)送調(diào)試命令,使其加載包含惡意行為的可執(zhí)行代碼。相應(yīng)的,防止惡意軟件加載的方式包括兩種:第一種,不斷檢測(cè)所述應(yīng)用進(jìn)程是否處于被附加狀態(tài),依次判斷是否正在被惡意軟件調(diào)試,一旦發(fā)現(xiàn)就立即退出;第二種,創(chuàng)建一個(gè)附加到所述應(yīng)用進(jìn)程的守護(hù)進(jìn)程,利用一個(gè)應(yīng)用進(jìn)程只能被一個(gè)進(jìn)程附加的特點(diǎn),防止惡意軟件附加。然而,以上防止惡意軟件注入的方式仍具有以下問題:
1、通過不斷檢測(cè)判斷應(yīng)用進(jìn)程是否正在被惡意軟件調(diào)試,一旦發(fā)現(xiàn)被調(diào)試就立即退出,用戶并不能及時(shí)得知應(yīng)用進(jìn)程退出的真實(shí)原因,導(dǎo)致一些通過加載程序進(jìn)行功能升級(jí)的應(yīng)用進(jìn)程不能正常使用,給用戶造成使用的困擾;
2、創(chuàng)建一個(gè)附加到所述應(yīng)用進(jìn)程的守護(hù)進(jìn)程需要一個(gè)額外的守護(hù)進(jìn)程,對(duì)應(yīng)用性能造成一定程度上的影響,且如果守護(hù)進(jìn)程被殺死,將無法阻止被惡意軟件附加。
相關(guān)技術(shù)中,對(duì)于上述問題,尚無有效解決方案。
技術(shù)實(shí)現(xiàn)要素:
基于此,有必要提供一種風(fēng)險(xiǎn)防范更準(zhǔn)確、且應(yīng)用性能更高應(yīng)用進(jìn)程監(jiān)控的方法和裝置。
一種應(yīng)用進(jìn)程監(jiān)控的方法,包括:
獲取應(yīng)用進(jìn)程啟動(dòng)指令;
根據(jù)所述應(yīng)用進(jìn)程啟動(dòng)指令調(diào)用動(dòng)態(tài)鏈接庫打開函數(shù);
通過所述動(dòng)態(tài)鏈接庫打開函數(shù)判斷所述應(yīng)用進(jìn)程是否包含加載程序;
當(dāng)所述應(yīng)用進(jìn)程包含加載程序時(shí),判斷所述加載程序是否為危險(xiǎn)加載程序;
若是,則阻斷所述應(yīng)用進(jìn)程并返回失敗。
一種應(yīng)用進(jìn)程監(jiān)控的裝置,包括:
獲取模塊,用于獲取應(yīng)用進(jìn)程啟動(dòng)指令;
調(diào)用模塊,用于根據(jù)所述應(yīng)用進(jìn)程啟動(dòng)指令調(diào)用動(dòng)態(tài)鏈接庫打開函數(shù);
第一判斷模塊,用于通過所述動(dòng)態(tài)鏈接庫打開函數(shù)判斷所述應(yīng)用進(jìn)程是否包含加載程序;
第二判斷模塊,用于當(dāng)所述應(yīng)用進(jìn)程包含加載程序時(shí),判斷所述加載程序是否為危險(xiǎn)加載程序;
進(jìn)程阻斷模塊,用于當(dāng)所述加載程序?yàn)槲kU(xiǎn)加載程序時(shí),則阻斷所述應(yīng)用進(jìn)程并返回失敗。
上述應(yīng)用進(jìn)程監(jiān)控的方法和裝置,通過在應(yīng)用進(jìn)程啟動(dòng)時(shí)調(diào)用動(dòng)態(tài)鏈接庫打開函數(shù)對(duì)應(yīng)用進(jìn)程是否被附加、以及被附加的程序是否為危險(xiǎn)加載程序進(jìn)行判斷,當(dāng)發(fā)現(xiàn)應(yīng)用進(jìn)程包含被附加程序時(shí)不會(huì)直接立即退出,而只有當(dāng)判斷應(yīng)用進(jìn)程加載有危險(xiǎn)加載程序時(shí)才阻斷對(duì)應(yīng)的應(yīng)用進(jìn)程并返回失敗,從而應(yīng)用進(jìn)程退出時(shí)用戶可以得知原因?yàn)樵搼?yīng)用進(jìn)程存在風(fēng)險(xiǎn),通過識(shí)別危險(xiǎn)加載程序的方式對(duì)于風(fēng)險(xiǎn)的防范更加準(zhǔn)確,避免給用戶的使用造成困擾,其次該應(yīng)用進(jìn)程的監(jiān)控方法是在應(yīng)用進(jìn)程發(fā)生預(yù)設(shè)啟動(dòng)行為時(shí)判斷包含危險(xiǎn)加載程序時(shí)進(jìn)行阻隔,不需要不斷的檢測(cè)應(yīng)用進(jìn)程自身的狀態(tài)來確定是否存在被附加程序,也不需要?jiǎng)?chuàng)建守護(hù)進(jìn)程,因此應(yīng)用性能更高,該監(jiān)控方法不依賴于是否包含守護(hù)進(jìn)程,能夠有效的防止惡意軟件的注入行為。
附圖說明
圖1為一實(shí)施例中終端的內(nèi)部結(jié)構(gòu)示意圖;
圖2為一實(shí)施例中應(yīng)用進(jìn)程監(jiān)控的方法的流程圖;
圖3為另一個(gè)實(shí)施例中應(yīng)用進(jìn)程監(jiān)控的方法流程圖;
圖4為一個(gè)實(shí)施例所提供的應(yīng)用進(jìn)程啟動(dòng)時(shí)調(diào)用動(dòng)態(tài)鏈接庫打開函數(shù)的時(shí)序圖;
圖5為再一個(gè)實(shí)施例中應(yīng)用進(jìn)程監(jiān)控的方法流程圖;
圖6為一個(gè)實(shí)施例中應(yīng)用進(jìn)程監(jiān)控的裝置的結(jié)構(gòu)示意圖;
圖7為另一個(gè)實(shí)施例中應(yīng)用進(jìn)程監(jiān)控的裝置的結(jié)構(gòu)示意圖;
圖8為再一個(gè)實(shí)施例中應(yīng)用進(jìn)程監(jiān)控的裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
除非另有定義,本文所使用的所有的技術(shù)和科學(xué)術(shù)語與屬于本發(fā)明的技術(shù)領(lǐng)域的技術(shù)人員通常理解的含義相同。本文中在本發(fā)明的說明書中所使用的術(shù)語只是為了描述具體的實(shí)施例的目的,不是旨在于限制本發(fā)明。本文所使用的術(shù)語“及/或”包括一個(gè)或多個(gè)相關(guān)的所列項(xiàng)目的任意的和所有的組合。
本發(fā)明實(shí)施例提供的應(yīng)用進(jìn)程監(jiān)控的方法可應(yīng)用于圖1所示的終端中,該終端100優(yōu)選為移動(dòng)終端。如圖1所示,終端100包括通過系統(tǒng)總線連接的處理器、非易失性存儲(chǔ)介質(zhì)、內(nèi)存儲(chǔ)器、網(wǎng)絡(luò)接口以及顯示屏。處理器具有計(jì)算功能和控制終端工作的功能,如該處理器被配置為執(zhí)行一種應(yīng)用進(jìn)程監(jiān)控的方法。非易失性存儲(chǔ)介質(zhì)包括磁存儲(chǔ)介質(zhì)、光存儲(chǔ)介質(zhì)和閃存式存儲(chǔ)介質(zhì)中的至少一種,非易失性存儲(chǔ)介質(zhì)存儲(chǔ)有操作系統(tǒng)和應(yīng)用進(jìn)程監(jiān)控的裝置。該應(yīng)用進(jìn)程監(jiān)控的裝置用于實(shí)現(xiàn)對(duì)終端所運(yùn)行應(yīng)用進(jìn)程監(jiān)控的方法。網(wǎng)絡(luò)接口用于連接到服務(wù)器,用于與服務(wù)器進(jìn)行通信,接收來自網(wǎng)絡(luò)的資源。
如圖2所示,在一個(gè)實(shí)施例中,提供一種應(yīng)用進(jìn)程監(jiān)控的方法,該方法可 應(yīng)用于圖1所示的終端中,具體包括如下步驟。
步驟101,獲取應(yīng)用進(jìn)程啟動(dòng)指令。
應(yīng)用進(jìn)程包含用戶可以使用的各種程序設(shè)計(jì)語言,以及用各種程序設(shè)計(jì)語言編制的應(yīng)用程序的集合。應(yīng)用進(jìn)程通常為滿足用戶不同領(lǐng)域、不同問題的應(yīng)用需求而提供的軟件程序,常用的應(yīng)用進(jìn)程包括銀行網(wǎng)站、網(wǎng)購平臺(tái)、支付平臺(tái)以及游戲軟件等。應(yīng)用程序的啟動(dòng)指令可以為下載應(yīng)用程序、安裝應(yīng)用程序或者打開應(yīng)用程序的操作指令。
步驟103,根據(jù)應(yīng)用進(jìn)程啟動(dòng)指令調(diào)用動(dòng)態(tài)鏈接庫打開函數(shù)。
動(dòng)態(tài)鏈接庫打開函數(shù)是指以指定模式打開指定的動(dòng)態(tài)鏈接庫文件,并返回一個(gè)句柄給地址返回函數(shù)的調(diào)用進(jìn)程的函數(shù),該地址返回函數(shù)根據(jù)句柄與符號(hào)返回符號(hào)對(duì)應(yīng)的地址。本實(shí)施例中,動(dòng)態(tài)鏈接庫打開函數(shù)為dlopen函數(shù),地址返回函數(shù)為dlsym函數(shù)。當(dāng)獲取應(yīng)用進(jìn)程啟動(dòng)指令時(shí),通過調(diào)用動(dòng)態(tài)鏈接庫打開函數(shù)對(duì)相應(yīng)的應(yīng)用進(jìn)程的執(zhí)行文件所包含軟件程序進(jìn)行調(diào)用。
步驟105,通過動(dòng)態(tài)鏈接庫打開函數(shù)判斷應(yīng)用進(jìn)程是否包含加載程序。
判斷應(yīng)用進(jìn)程是否包含加載程序,即判斷應(yīng)用進(jìn)程是否處于附加狀態(tài),從而確定是否有附加程序試圖注入到當(dāng)前的應(yīng)用進(jìn)程。通過動(dòng)態(tài)鏈接庫打開函數(shù)可以讀取應(yīng)用進(jìn)程的狀態(tài)參數(shù),以判斷應(yīng)用進(jìn)程是否包含加載程序。
步驟107,當(dāng)所述應(yīng)用進(jìn)程包含加載程序時(shí),判斷所述加載程序是否為危險(xiǎn)加載程序。
當(dāng)應(yīng)用進(jìn)程包含加載程序,表明有附加程序附加到當(dāng)前的應(yīng)用進(jìn)程,從而可以進(jìn)一步區(qū)分該加載程序是否包含惡意行為的軟件代碼,以確定加載程序是否為危險(xiǎn)加載程序。
步驟109,若是,則阻斷所述應(yīng)用進(jìn)程并返回失敗。
當(dāng)確定加載程序?yàn)槲kU(xiǎn)加載程序時(shí),可以確定相應(yīng)的加載程序?yàn)閻阂廛浖淖⑷?,?yīng)該阻止當(dāng)前應(yīng)用進(jìn)程,從而阻斷應(yīng)用進(jìn)程并返回失敗,以實(shí)現(xiàn)攔截惡意軟件注入的目的。
本實(shí)施例中所提供的應(yīng)用進(jìn)程監(jiān)控的方法,通過在應(yīng)用進(jìn)程啟動(dòng)時(shí),調(diào)用動(dòng)態(tài)鏈接庫打開函數(shù)判斷應(yīng)用進(jìn)程是否被附加、以及被附加的程序是否為危險(xiǎn) 加載程序,當(dāng)發(fā)現(xiàn)應(yīng)用進(jìn)程包含被附加程序時(shí)不會(huì)直接立即退出,而只有當(dāng)判斷應(yīng)用進(jìn)程加載有危險(xiǎn)加載程序時(shí)才阻斷對(duì)應(yīng)的應(yīng)用進(jìn)程并返回失敗,從而應(yīng)用進(jìn)程退出時(shí)用戶可以得知退出原因?yàn)樵搼?yīng)用進(jìn)程存在風(fēng)險(xiǎn),對(duì)于風(fēng)險(xiǎn)的防范更加準(zhǔn)確,避免給用戶的使用造成困擾,其次該應(yīng)用進(jìn)程的監(jiān)控方法是在應(yīng)用進(jìn)程發(fā)生預(yù)設(shè)啟動(dòng)行為時(shí)判斷包含危險(xiǎn)加載程序時(shí)進(jìn)行阻隔,不需要不斷的檢測(cè)應(yīng)用進(jìn)程自身的狀態(tài)來確定是否存在被附加程序,也不需要?jiǎng)?chuàng)建守護(hù)進(jìn)程,因此保障了應(yīng)用性能,該監(jiān)控方法不依賴于是否包含守護(hù)進(jìn)程,能夠有效的防止惡意軟件的注入行為。
在另一個(gè)實(shí)施例中,請(qǐng)參閱圖3,步驟103,根據(jù)應(yīng)用進(jìn)程啟動(dòng)指令調(diào)用動(dòng)態(tài)鏈接庫打開函數(shù)的步驟之前,還包括:
步驟1021,獲取root權(quán)限;
步驟1022,在root權(quán)限下,利用hook技術(shù)應(yīng)用進(jìn)程的系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù),并注入動(dòng)態(tài)鏈接庫打開函數(shù)以替換系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù)。
其中,root權(quán)限是指操作系統(tǒng)中系統(tǒng)內(nèi)核的超級(jí)用戶所擁有的權(quán)限,是系統(tǒng)中的最高權(quán)限。hook技術(shù)是指計(jì)算機(jī)程序中劫持對(duì)某個(gè)函數(shù)調(diào)用的技術(shù)。hook技術(shù)通常包括gothook和inlinehook,gothook指在函數(shù)運(yùn)行時(shí)修改elf(electroniclocationfinder,電子定位器)可重新定位文件中的got表的函數(shù)hook方式;inlinehook指在運(yùn)行時(shí)修改被調(diào)用的函數(shù)起始位置指令的函數(shù)hook方式。本實(shí)施例中,所述終端為安裝android操作系統(tǒng)的移動(dòng)終端,root權(quán)限則是指android操作系統(tǒng)中l(wèi)inux內(nèi)核的超級(jí)用戶所擁有的權(quán)限,在應(yīng)用進(jìn)程啟動(dòng)時(shí),在root權(quán)限下利用函數(shù)hook技術(shù)應(yīng)用進(jìn)程的系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù),即劫持系統(tǒng)所提供的原有的動(dòng)態(tài)鏈接庫打開函數(shù),并注入創(chuàng)建的新的動(dòng)態(tài)鏈接庫打開函數(shù)以替換系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù)。
作為一具體的實(shí)施例,可以使用inlinehook技術(shù)hook應(yīng)用進(jìn)程原有的系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù),將創(chuàng)建的新的動(dòng)態(tài)鏈接庫打開函數(shù)被調(diào)用的函數(shù)起始位置修改為原有的系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù)的函數(shù)起始位置進(jìn)行注入,使得應(yīng)用進(jìn)程啟動(dòng)時(shí)調(diào)用動(dòng)態(tài)鏈接庫打開函數(shù)打開代碼庫時(shí),都會(huì)先進(jìn)入注入的動(dòng)態(tài) 鏈接庫打開函數(shù)。優(yōu)選的,本實(shí)施例所提供的應(yīng)用進(jìn)程監(jiān)控的方法可通過kingroot軟件實(shí)現(xiàn),通過kingroot軟件獲取風(fēng)險(xiǎn)行為監(jiān)控或反劫持安全防護(hù)的操作指令而開啟相應(yīng)的監(jiān)控與防護(hù)功能,以實(shí)現(xiàn)在root權(quán)限下,利用hook技術(shù)應(yīng)用進(jìn)程的系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù),并注入動(dòng)態(tài)鏈接庫打開函數(shù)以替換系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù)。
通過注入新的動(dòng)態(tài)鏈接庫打開函數(shù)替換應(yīng)用進(jìn)程啟動(dòng)時(shí)的系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù),該新的動(dòng)態(tài)鏈接庫打開函數(shù)包含攔截程序用于識(shí)別應(yīng)用進(jìn)程是否包含加載程序以及加載程序是否為危險(xiǎn)加載程序,使得應(yīng)用進(jìn)程啟動(dòng)時(shí)可以通過先調(diào)用注入的動(dòng)態(tài)鏈接庫打開函數(shù)對(duì)應(yīng)用進(jìn)程進(jìn)行識(shí)別,實(shí)現(xiàn)阻止惡意程序附加的風(fēng)險(xiǎn),操作安全且防護(hù)效率高。
優(yōu)選的,該應(yīng)用進(jìn)程監(jiān)控的方法還包括:
步驟108,當(dāng)所述應(yīng)用進(jìn)程不包含加載程序時(shí)或者當(dāng)所述應(yīng)用進(jìn)程包含加載程序且所述加載程序不是危險(xiǎn)加載程序時(shí),則調(diào)用系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù)以允許啟動(dòng)應(yīng)用進(jìn)程。
通過注入創(chuàng)建的新的動(dòng)態(tài)鏈接庫打開函數(shù)以替換系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù),通過讀取當(dāng)前應(yīng)用進(jìn)程的狀態(tài),判斷應(yīng)用進(jìn)程是否處于被附加狀態(tài),即應(yīng)用進(jìn)程是否包含加載程序,當(dāng)判斷應(yīng)用進(jìn)程不包含加載程序時(shí),表明應(yīng)用進(jìn)程不可能包含惡意程序的注入風(fēng)險(xiǎn),因此,可以調(diào)用應(yīng)用進(jìn)程原有的系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù)打開代碼庫以啟動(dòng)應(yīng)用進(jìn)程。通過注入的新的動(dòng)態(tài)鏈接庫打開函數(shù)用于實(shí)現(xiàn)應(yīng)用進(jìn)程是否包含加載程序的判斷,當(dāng)排除應(yīng)用進(jìn)程被惡意程序附加的風(fēng)險(xiǎn)時(shí),調(diào)用應(yīng)用進(jìn)程原有的系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù)執(zhí)行后續(xù)操作,從而實(shí)現(xiàn)成本較低、且有效地保障了本實(shí)施例所提供的應(yīng)用進(jìn)程監(jiān)控的方法的通用性。請(qǐng)結(jié)合參閱圖4,為本實(shí)施例所提供的應(yīng)用進(jìn)程監(jiān)控的方法中應(yīng)用進(jìn)程啟動(dòng)時(shí)調(diào)用動(dòng)態(tài)鏈接庫打開函數(shù)的時(shí)序圖。
進(jìn)一步的,當(dāng)應(yīng)用進(jìn)程包含加載程序時(shí)且判斷加載程序是否為危險(xiǎn)加載程序的判斷結(jié)果為否時(shí),也表明當(dāng)前的應(yīng)用進(jìn)程不包含惡意程序的注入風(fēng)險(xiǎn),因 此當(dāng)排除應(yīng)用進(jìn)程被惡意程序附加的風(fēng)險(xiǎn)時(shí),通過調(diào)用應(yīng)用進(jìn)程原有的系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù)以執(zhí)行后續(xù)操作,從而新注入的動(dòng)態(tài)鏈接庫打開函數(shù)主要配置為完成風(fēng)險(xiǎn)的識(shí)別和阻隔,有效地保障了本實(shí)施例所提供的應(yīng)用進(jìn)程監(jiān)控的方法的通用性??蛇x的,也可以通過調(diào)用新的動(dòng)態(tài)鏈接庫打開函數(shù)以允許啟動(dòng)應(yīng)用進(jìn)程。
如圖5所示,在再一個(gè)實(shí)施例中,步驟107,當(dāng)應(yīng)用進(jìn)程包含加載程序時(shí),判斷加載程序是否為危險(xiǎn)加載程序的步驟包括:
步驟1071,當(dāng)應(yīng)用進(jìn)程包含加載程序時(shí),通過動(dòng)態(tài)鏈接庫打開函數(shù)的路徑獲取加載程序的可執(zhí)行文件路徑;
步驟1072,當(dāng)加載程序的可執(zhí)行文件路徑為外部路徑時(shí)判斷加載程序?yàn)槲kU(xiǎn)加載程序。
通過鏈接庫打開函數(shù)的路徑可以獲取相應(yīng)的應(yīng)用進(jìn)程的加載程序的可執(zhí)行文件路徑,判斷可執(zhí)行文件路徑是否屬于系統(tǒng)庫或者預(yù)設(shè)的程序庫,當(dāng)可執(zhí)行文件路徑屬于系統(tǒng)庫或者預(yù)設(shè)的程序庫時(shí),則確定相應(yīng)的應(yīng)用進(jìn)程的加載程序的可執(zhí)行文件路徑為內(nèi)部路徑,否則,則確定相應(yīng)的應(yīng)用進(jìn)程的加載程序的可執(zhí)行文件路徑為外部路徑。當(dāng)加載程序的可執(zhí)行文件路徑為外部路徑時(shí),確定該加載程序?yàn)槲kU(xiǎn)加載程序,可以確定相應(yīng)的加載程序包含惡意行為的注入風(fēng)險(xiǎn),提高風(fēng)險(xiǎn)識(shí)別的準(zhǔn)確性;反之,當(dāng)加載程序的可執(zhí)行文件路徑為內(nèi)部路徑時(shí),確定該加載程序?yàn)榘踩虞d程序,可以確定相應(yīng)的加載程序并非為惡意程序的附加,不包含惡意行為的注入風(fēng)險(xiǎn)。對(duì)于一些通過附加加載程序進(jìn)行功能升級(jí)的應(yīng)用進(jìn)程而言,可以將相應(yīng)的加載程序的可執(zhí)行文件路徑存入系統(tǒng)庫或者預(yù)設(shè)的程序庫作為內(nèi)部路徑,便可確保應(yīng)用進(jìn)程的正常啟動(dòng)。通過對(duì)可執(zhí)行文件的路徑進(jìn)行識(shí)別,可準(zhǔn)確且高效的識(shí)別出包含有惡意軟件的加載程序。
優(yōu)選的,步驟109,若是,則阻斷所述應(yīng)用進(jìn)程并返回失敗的步驟之后,還包括:
步驟1091,發(fā)送阻隔應(yīng)用進(jìn)程的提示信息,并獲取是否允許應(yīng)用進(jìn)程的操 作確認(rèn)信息;
步驟1093,當(dāng)操作確認(rèn)信息為是時(shí),存儲(chǔ)相應(yīng)應(yīng)用進(jìn)程的加載程序的可執(zhí)行文件路徑為內(nèi)部路徑,并返回步驟101,獲取應(yīng)用進(jìn)程啟動(dòng)指令的步驟。
對(duì)附加到應(yīng)用進(jìn)程的加載程序進(jìn)行判斷,并在判斷該加載程序包含惡意程序的注入風(fēng)險(xiǎn)時(shí)阻斷應(yīng)用進(jìn)程并返回失敗,并通過將阻隔應(yīng)用進(jìn)程的提示信息發(fā)送給用戶,進(jìn)一步獲取用戶是否允許應(yīng)用進(jìn)程的操作確認(rèn)信息。用戶是否允許應(yīng)用進(jìn)程的操作信息為是時(shí),表明用戶確認(rèn)相應(yīng)的應(yīng)用進(jìn)程的加載程序并非為惡意程序的附加,因此可以將該加載程序補(bǔ)入預(yù)設(shè)的程序庫中,即將該加載程序的可執(zhí)行文件路徑存儲(chǔ)為內(nèi)部路徑;當(dāng)用戶是否允許應(yīng)用進(jìn)程的操作信息為否時(shí),表明用戶確認(rèn)相應(yīng)的應(yīng)用進(jìn)程的加載程序包含惡意程序的附加,確定所述加載程序不屬于系統(tǒng)庫或者預(yù)設(shè)的程序庫。當(dāng)返回獲取應(yīng)用進(jìn)程啟動(dòng)指令后,根據(jù)加載程序的可執(zhí)行文件路徑是否為內(nèi)部路徑判斷加載程序是否為危險(xiǎn)加載程序的步驟中,可以根據(jù)獲取用戶之前的是否允許應(yīng)用進(jìn)程的操作信息的確認(rèn)結(jié)果來判斷相應(yīng)的應(yīng)用進(jìn)程的加載程序是否存在惡意注入的風(fēng)險(xiǎn),即可彌補(bǔ)初次判斷可能帶來的誤差,且通過對(duì)用戶的操作信息的存儲(chǔ)記憶功能,提高危險(xiǎn)加載程序的識(shí)別成功率和識(shí)別效率。
如圖6所示,在一個(gè)實(shí)施例中,提供了一種應(yīng)用進(jìn)程監(jiān)控的裝置,包括獲取模塊10、調(diào)用模塊30、第一判斷模塊50、第二判斷模塊70以及進(jìn)程阻斷模塊90。獲取模塊10用于獲取應(yīng)用進(jìn)程啟動(dòng)指令。調(diào)用模塊30用于根據(jù)應(yīng)用進(jìn)程啟動(dòng)指令調(diào)用動(dòng)態(tài)鏈接庫打開函數(shù)。第一判斷模塊50用于通過所述動(dòng)態(tài)鏈接庫打開函數(shù)判斷應(yīng)用進(jìn)程是否包含加載程序。第二判斷模塊70用于當(dāng)應(yīng)用進(jìn)程包含加載程序時(shí),判斷加載程序是否為危險(xiǎn)加載程序。進(jìn)程阻斷模塊90用于當(dāng)加載程序?yàn)槲kU(xiǎn)加載程序時(shí),則阻斷應(yīng)用進(jìn)程并返回失敗。
在另一個(gè)實(shí)施例中,如圖7所示,應(yīng)用進(jìn)程監(jiān)控的裝置還包括權(quán)限獲取模塊21及注入模塊22。權(quán)限獲取模塊21用于獲取root權(quán)限。注入模塊22用于在root權(quán)限下,利用hook技術(shù)劫持應(yīng)用進(jìn)程的系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù),并注 入動(dòng)態(tài)鏈接庫打開函數(shù)以替換系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù)。
優(yōu)選的,應(yīng)用進(jìn)程監(jiān)控的裝置還包括進(jìn)程允許模塊80。進(jìn)程允許模塊80用于當(dāng)所述應(yīng)用進(jìn)程不包含加載程序時(shí)或者當(dāng)所述應(yīng)用進(jìn)程包含加載程序且所述加載程序不是危險(xiǎn)加載程序時(shí),調(diào)用系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù)以允許啟動(dòng)應(yīng)用進(jìn)程。即在第一判斷模塊50的判斷結(jié)果為否時(shí)及/或第二判斷模塊70的判斷結(jié)果為否時(shí),進(jìn)程允許模塊80調(diào)用系統(tǒng)動(dòng)態(tài)鏈接庫打開函數(shù)以允許啟動(dòng)應(yīng)用進(jìn)程。
如圖8所示,在再一個(gè)實(shí)施例中,第二判斷模塊70包括路徑獲取單元72及判斷單元74。路徑獲取單元72用于當(dāng)應(yīng)用進(jìn)程包含加載程序時(shí),通過動(dòng)態(tài)鏈接庫打開函數(shù)的路徑獲取加載程序的可執(zhí)行文件路徑。判斷單元74用于當(dāng)加載程序的可執(zhí)行文件路徑為外部路徑時(shí)判斷加載程序?yàn)槲kU(xiǎn)加載程序。
優(yōu)選的,應(yīng)用進(jìn)程監(jiān)控的裝置還包括提示單元91和返回單元93。提示單元91用于發(fā)送阻隔應(yīng)用進(jìn)程的提示信息,并獲取是否允許應(yīng)用進(jìn)程的操作確認(rèn)信息。返回單元93用于當(dāng)操作確認(rèn)信息為是時(shí),存儲(chǔ)相應(yīng)應(yīng)用進(jìn)程的加載程序的可執(zhí)行文件路徑為內(nèi)部路徑,并返回獲取應(yīng)用進(jìn)程啟動(dòng)指令的步驟。
該應(yīng)用進(jìn)程監(jiān)控的裝置通過獲取模塊獲取應(yīng)用進(jìn)程啟動(dòng)指令時(shí),調(diào)用動(dòng)態(tài)鏈接庫打開函數(shù)判斷應(yīng)用進(jìn)程是否被附加、以及判斷被附加的程序是否為危險(xiǎn)加載程序,當(dāng)判斷應(yīng)用進(jìn)程包含加載程序且判斷加載程序?yàn)槲kU(xiǎn)加載程序時(shí)才通過進(jìn)程阻斷模塊阻斷對(duì)應(yīng)的應(yīng)用進(jìn)程并返回失敗,相比于現(xiàn)有技術(shù)中當(dāng)發(fā)現(xiàn)應(yīng)用進(jìn)程包含被附加程序直接立即退出的方式而言,應(yīng)用進(jìn)程退出時(shí)用戶可以得知原因?yàn)樵搼?yīng)用進(jìn)程存在風(fēng)險(xiǎn),避免給用戶的使用造成困擾,且對(duì)于風(fēng)險(xiǎn)的防范更加準(zhǔn)確,其次該應(yīng)用進(jìn)程的監(jiān)控方法是在應(yīng)用進(jìn)程預(yù)設(shè)啟動(dòng)行為發(fā)生時(shí)判斷包含危險(xiǎn)加載程序并進(jìn)行阻隔,不需要不斷的檢測(cè)應(yīng)用進(jìn)程自身的狀態(tài)來確定是否存在被附加程序,也不需要?jiǎng)?chuàng)建守護(hù)進(jìn)程,因此保障了應(yīng)用性能,該 應(yīng)用進(jìn)程監(jiān)控的裝置對(duì)應(yīng)用進(jìn)程的監(jiān)控不依賴于是否應(yīng)用進(jìn)程本身包含守護(hù)進(jìn)程,能夠有效的防止惡意軟件的注入行為。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(read-onlymemory,rom)或隨機(jī)存儲(chǔ)記憶體(randomaccessmemory,ram)等。
以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。