專(zhuān)利名稱(chēng)::一種Windows平臺(tái)下對(duì)抗API掛接的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及Windows平臺(tái)編程界面安全,特別是一種Windows平臺(tái)下對(duì)抗API掛接的方法。
背景技術(shù):
:Windows平臺(tái)下的API掛接是一種廣泛使用的對(duì)WindowsAPI進(jìn)行監(jiān)控甚至修改其行為的技術(shù),其中WindowsAPI是Windows提供的應(yīng)用程序編程接口函數(shù)。出于對(duì)安全的考慮,對(duì)于想調(diào)用的API,使用者希望該API是沒(méi)有被掛接的,并且其功能也沒(méi)有被修改;這就需要一種判斷API是否被修改并還原的方法。目前采用的是比較傳統(tǒng)的手段,例如某些安全領(lǐng)域的軟件會(huì)判斷API首地址的內(nèi)容是否為已知的特征機(jī)器碼,如jmpxxx(匯編語(yǔ)言的跳轉(zhuǎn)指令)/callxxx(調(diào)用函數(shù)指令)/pushxxx;ret(匯編語(yǔ)言的另一種跳轉(zhuǎn)指令)這些特征,從而判斷該API是否被修改,這種方法原理是判斷API首地址的內(nèi)容是否為匯編語(yǔ)言的無(wú)條件跳轉(zhuǎn)指令。然而這種方法并不能應(yīng)對(duì)所有API掛接的具體實(shí)現(xiàn)方法,即不能完全正確地判斷一個(gè)API的內(nèi)容正確性。例如惡意進(jìn)程可以把API修改成其他的不影響執(zhí)行流程的匯編語(yǔ)言指令,最后加上條件跳轉(zhuǎn)指令,大大增加傳統(tǒng)手段檢測(cè)的難度。
發(fā)明內(nèi)容本發(fā)明的目的在于提供一種Windows平臺(tái)下對(duì)抗API掛接的方法,該方法可以阻止惡意修改編程接口的程序。本發(fā)明的技術(shù)方案如下一種Windows平臺(tái)下對(duì)抗API掛接的方法,其特征在于進(jìn)程調(diào)用API函數(shù)CreateFile打開(kāi)提供API的PE文件,再將打開(kāi)的PE文件映射到虛擬內(nèi)存緩沖區(qū),取得API在虛擬內(nèi)存緩沖區(qū)內(nèi)的偏移量,記為偏移一,然后進(jìn)程通過(guò)調(diào)用API函數(shù)GetProcAddress取得API在進(jìn)程空間的偏移量,記為偏移二,最后通過(guò)判斷比較兩個(gè)偏移的內(nèi)容,將與偏移一不相同的偏移二的內(nèi)容恢復(fù)成偏移一的內(nèi)容。所述API即ApplicationProgrammingInterface應(yīng)用程序編程接口。所述PE文件即Portableexecutableformat,是Windows32平臺(tái)下的可執(zhí)行檔格式,是對(duì)應(yīng)的API提供者。通常的PE文件包括后綴名為.dll的動(dòng)態(tài)鏈接庫(kù)文件和后綴名為.exe的Windows平臺(tái)下的可執(zhí)行文件。所述文件映射是共享內(nèi)存的一種方法。所述API的偏移量是指API首地址離起點(diǎn)處距離的字節(jié)數(shù)。所述判斷比較兩個(gè)偏移的內(nèi)容,偏移一的內(nèi)容與偏移二的內(nèi)容相同,則進(jìn)程結(jié)束。本發(fā)明具有以下優(yōu)點(diǎn)本發(fā)明利用從PE文件分析得出API原來(lái)的內(nèi)容,并能保證所得到API的內(nèi)容的正確性,可以真正實(shí)現(xiàn)對(duì)抗API掛接;同時(shí)提高了惡意進(jìn)程掛接API的難度,惡意進(jìn)程必須改寫(xiě)磁盤(pán)上的PE文件才能實(shí)現(xiàn)掛接,這時(shí)候在WindowsNT平臺(tái)下惡意進(jìn)程將觸發(fā)WindowsFileProtection機(jī)制。圖1為本發(fā)明的工作流程圖具體實(shí)施方式實(shí)施例1一種Windows平臺(tái)下對(duì)抗API掛接的方法,進(jìn)程通過(guò)調(diào)用API函數(shù)CreateFile打開(kāi)提供API的PE文件,再將打開(kāi)的PE文件映射到虛擬內(nèi)存緩沖區(qū),取得API在虛擬內(nèi)存緩沖區(qū)內(nèi)的偏移量,記為偏移一,然后進(jìn)程通過(guò)調(diào)用API函數(shù)GetProcAddress取得API在進(jìn)程空間的偏移量,記為偏移二,最后通過(guò)判斷比較兩個(gè)偏移的內(nèi)容,將與偏移一不相同的偏移二的內(nèi)容恢復(fù)成偏移一的內(nèi)容。所述API即ApplicationProgrammingInterface應(yīng)用程序編程接口。所述PE文件即Portableexecutableformat,是Windows32平臺(tái)下的可執(zhí)行檔格式,是對(duì)應(yīng)的API提供者。通常的PE文件包括后綴名為.dll的動(dòng)態(tài)鏈接庫(kù)文件和后綴名為.exe的Windows平臺(tái)下的可執(zhí)行文件。所述文件映射是共享內(nèi)存的一種方法。所述API的偏移量是指API首地址離起點(diǎn)處距離的字節(jié)數(shù)。判斷比較兩個(gè)偏移的內(nèi)容時(shí),當(dāng)偏移一的內(nèi)容與偏移二的內(nèi)容相同,則結(jié)束進(jìn)程,否則將偏移二的內(nèi)容恢復(fù)成偏移一的內(nèi)容。權(quán)利要求1.一種Windows平臺(tái)下對(duì)抗API掛接的方法,其特征在于進(jìn)程調(diào)用API函數(shù)CreateFile打開(kāi)提供API的PE文件,再將打開(kāi)的PE文件映射到虛擬內(nèi)存緩沖區(qū),取得API在虛擬內(nèi)存緩沖區(qū)內(nèi)的偏移量,記為偏移一,然后進(jìn)程通過(guò)調(diào)用API函數(shù)GetProcAddress取得API在進(jìn)程空間的偏移量,記為偏移二,最后通過(guò)判斷比較兩個(gè)偏移的內(nèi)容,將與偏移一不相同的偏移二的內(nèi)容恢復(fù)成偏移一的內(nèi)容。2.根據(jù)權(quán)利要求1所述的一種Windows平臺(tái)下對(duì)抗API掛接的方法,其特征在于所述API即ApplicationProgrammingInterface應(yīng)用程序編程接口。3.根據(jù)權(quán)利要求1所述的一種Windows平臺(tái)下對(duì)抗API掛接的方法,其特征在于所述PE文件即Portableexecutableformat,是Windows32平臺(tái)下的可執(zhí)行檔格式,是對(duì)應(yīng)的API提供者。4.根據(jù)權(quán)利要求1所述的一種Windows平臺(tái)下對(duì)抗API掛接的方法,其特征在于所述文件映射是共享內(nèi)存的一種方法。5.根據(jù)權(quán)利要求1所述的一種Windows平臺(tái)下對(duì)抗API掛接的方法,其特征在于所述API的偏移量是指API首地址離起點(diǎn)處距離的字節(jié)數(shù)。6.根據(jù)權(quán)利要求1所述的一種Windows平臺(tái)下對(duì)抗API掛接的方法,其特征在于所述判斷比較兩個(gè)偏移的內(nèi)容,偏移一的內(nèi)容與偏移二的內(nèi)容相同,則進(jìn)程結(jié)束。全文摘要本發(fā)明公開(kāi)了一種Windows平臺(tái)下對(duì)抗API掛接的方法,其特征在于進(jìn)程調(diào)用API函數(shù)CreateFile打開(kāi)提供API的PE文件,再將打開(kāi)的PE文件映射到虛擬內(nèi)存緩沖區(qū),取得API在虛擬內(nèi)存緩沖區(qū)內(nèi)的偏移量,記為偏移一,然后進(jìn)程通過(guò)調(diào)用API函數(shù)GetProcAddress取得API在進(jìn)程空間的偏移量,記為偏移二,最后通過(guò)判斷比較兩個(gè)偏移的內(nèi)容,將與偏移一不相同的偏移二的內(nèi)容恢復(fù)成偏移一的內(nèi)容;本發(fā)明從PE文件分析得出API原來(lái)的內(nèi)容,并保證得到API內(nèi)容的正確性,實(shí)現(xiàn)對(duì)抗API掛接;提高惡意進(jìn)程掛接API的難度,惡意進(jìn)程須改寫(xiě)PE文件才能實(shí)現(xiàn)掛接,這時(shí)在WindowsNT平臺(tái)下將觸發(fā)WindowsFileProtection機(jī)制。文檔編號(hào)G06F21/00GK1936834SQ20061002185公開(kāi)日2007年3月28日申請(qǐng)日期2006年9月14日優(yōu)先權(quán)日2006年9月14日發(fā)明者鄺思豪申請(qǐng)人:珠海金山軟件股份有限公司