欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種對具有自我保護的目標進程實現(xiàn)攔截的方法

文檔序號:6371843閱讀:182來源:國知局
專利名稱:一種對具有自我保護的目標進程實現(xiàn)攔截的方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機領(lǐng)域,具體涉及一種避開具有自我保護的進程屏蔽HOOK攔截的方法。
背景技術(shù)
Windows操作系統(tǒng)是建立在事件驅(qū)動機制之上的,系統(tǒng)各部分之間也都是通過消息的相互傳遞而實現(xiàn)溝通的,但在通常情況下,應(yīng)用程序只能處理來自進程內(nèi)部的消息或是從其他進程發(fā)過來的消息,如果需要對在進程外傳遞的消息進行攔截處理就必須采取一種被稱為HOOK(鉤子)的技術(shù)。HOOK是Windows操作系統(tǒng)中非常重要的一種系統(tǒng)接口,用它可以輕松截獲并處理在其他應(yīng)用程序之間傳遞的消息,并由此完成一些普通 應(yīng)用程序難以實現(xiàn)的特殊功能。在Windows操作系統(tǒng)里面,API是指由操作系統(tǒng)提供功能的、由應(yīng)用程序調(diào)用的函數(shù)。這些函數(shù)在Windows操作系統(tǒng)里面有上千個之多,分布于不同的DLL文件里面或者EXE文件里面。應(yīng)用程序通過調(diào)用這些函數(shù)來獲得一些功能的支持。API HOOK技術(shù)是一種用于改變API執(zhí)行結(jié)果的技術(shù),Microsoft自身也在Windows操作系統(tǒng)里面使用了這個技術(shù),如Windows兼容模式等,可以通過API H00K改變一個系統(tǒng)API的原有功能,基本的方法就是通過H00K “接觸”到需要修改的API函數(shù)入口點,然后改變它的地址并指向新的自定義的函數(shù)。API H00K并不屬于MSDN上介紹的13類H00K中的任何一種,所以說,API H00K并不是什么特別不同的H00K,它也需要通過基本的H00K提高自己的權(quán)限,跨越不同進程間訪問的限制,達到修改API函數(shù)地址的目的。對于自身進程空間下使用到的API函數(shù)地址的修改,是不需要用到API H00K技術(shù)就可以實現(xiàn)的。鑒于很多計算機病毒(如灰鴿子后門程序等)采用Win32 API H00K技術(shù)來達到隱藏自身的目的,因此,許多進程為了達到自我保護的目的進行了對API H00K的檢測,一但檢測到API H00K的攔截就進行屏蔽,這樣雖然能減少一些惡意的修改,但往往也屏蔽了一些并無惡意的攔截行為。

發(fā)明內(nèi)容
為解決現(xiàn)有技術(shù)中具有自我保護功能的進程對所有API H00K的攔截都進行屏蔽的問題,本發(fā)明提供一種針對目標進程新建一個功能相同的仿目標進程,并在仿目標進程中改變目標進程中調(diào)用系統(tǒng)服務(wù)指令的指向地址來實現(xiàn)攔截目的的方法,具體方案如下本發(fā)明針對自我保護程序識別目標進程中特定調(diào)用系統(tǒng)服務(wù)指令的指向代碼,進而屏蔽對此指令進行攔截的現(xiàn)象,替換了目標進程中調(diào)用系統(tǒng)服務(wù)指令的指向代碼中指向系統(tǒng)服務(wù)函數(shù)調(diào)用號或函數(shù)地址的偏移量的代碼,從而避開了目標進程的自我保護程序的檢查,進而實現(xiàn)了通過API H00K攔截目標進程的目的。本發(fā)明在目標進程和仿目標進程之間建立對應(yīng)關(guān)系,當系統(tǒng)調(diào)用目標進程時,本方法即將對目標進程的調(diào)用改為調(diào)用仿目標進程,由于仿目標進程所有功能與目標進程一致,僅是利用指向代碼的不同來避開自我保護程序,因此最終的執(zhí)行效果完全與目標進程一致,而且在對仿目標進程進行攔截時,由于指向代碼的不同,不在自我保護程序的屏蔽范圍內(nèi),因此避開了自我保護程序的屏蔽,能夠?qū)崿F(xiàn)API HOOK的攔截。本方法適合于WINDOWS系統(tǒng)下的所有操作。


圖I本發(fā)明的步驟流程圖。圖2本發(fā)明的執(zhí)行步驟流 程圖。圖3本發(fā)明中對目標進程的代碼匹配過程示意圖。
具體實施例方式下面結(jié)合附圖和具體實施例進一步說明本發(fā)明實施例的技術(shù)方案。如圖I所示,本發(fā)明包括如下步驟101、將目標進程調(diào)入內(nèi)存中進行調(diào)試并查找其中的調(diào)用系統(tǒng)服務(wù)指令;本方法在內(nèi)存中建立一個虛擬環(huán)境,然后將目標進程調(diào)入內(nèi)存中的虛擬環(huán)境中,對目標進程進行反匯編并得到反匯編代碼。在反匯編代碼中進行匹配,匹配的目的是查找出目標進程中所有調(diào)用系統(tǒng)服務(wù)指令,具體的匹配指令由用戶自行定義,定義的標準是依據(jù)目標進程的自我保護程序進行屏蔽的指令,常規(guī)是call、jmp、jz.jnz這樣的調(diào)用指令或者跳轉(zhuǎn)指令,建立一張上述調(diào)用指令和跳轉(zhuǎn)指令構(gòu)成的匹配表,對目標進程中代碼內(nèi)的相同指令進行一一匹配,一旦匹配到相應(yīng)指令,則在當前位置處設(shè)置斷點,并對獲得的當前指令指向的操作數(shù)目的指向地址進行分行分析,分析的結(jié)果包括兩種情況,I、直接指向具體的調(diào)用系統(tǒng)服務(wù)函數(shù)的調(diào)用號或系統(tǒng)服務(wù)函數(shù)地址的偏移量,對于這種情況,需要對此調(diào)用號和偏移量進行進一步確定,校驗是否是屬于目標進程自我保護程序要屏蔽的指令,如果是,則轉(zhuǎn)到102的重建步驟,否則繼續(xù)向下匹配。2、跳轉(zhuǎn)到下一級程序(子程序),對于這種情況,則進入下一級程序繼續(xù)進行匹配,如再次匹配到相應(yīng)指令,則在此指令處重新設(shè)置斷點并取消前一個斷點,并對此指令的指向地址進行分析,同樣此指向地址還存在上述兩種情況,繼續(xù)按同樣的步驟執(zhí)行,直至遍歷完目標進程的所有代碼。由于每級程序的末尾都設(shè)置有回轉(zhuǎn)指令,本方法在遇到回轉(zhuǎn)指令時即跳出當前程序而轉(zhuǎn)到設(shè)置的斷點處繼續(xù)向下匹配。匹配出的指令及其指向代碼暫存在虛擬環(huán)境的存儲器中。102、對每一個確定的調(diào)用系統(tǒng)服務(wù)指令的指向代碼,建立格式不同但同樣執(zhí)行原功能的映射代碼;對于在101中匹配到的調(diào)用系統(tǒng)服務(wù)指令且其指向代碼屬于自我保護程序?qū)PIHOOK攔截進行屏蔽的目標,根據(jù)此指向代碼的格式建立一個映射代碼,映射代碼的實際功能還是調(diào)用此指向代碼原調(diào)用的函數(shù)號或偏移量,但是映射代碼的編排方式與指向代碼的編排方式不一樣,這樣在執(zhí)行此指令時自我保護程序就識別不出此代碼的形式,從而達到欺騙自我保護程序的目的,進而在API HOOK在攔截此指令時,自我保護程序就不會進行屏蔽。另外一種欺騙自我保護程序的方法是采用再次跳轉(zhuǎn)的方式,即用跳轉(zhuǎn)指令或調(diào)用指令替換指向代碼的原內(nèi)容,而跳轉(zhuǎn)指令或調(diào)用指令再次跳轉(zhuǎn)后的內(nèi)容,即是原指向代碼的內(nèi)容,這種方法是將目標進程中的被屏蔽指令進行剝離,達到避免屏蔽的目的。103、建立仿目標進程文件,并在調(diào)式過程中將目標進程的代碼按原順序拷貝到仿目標進程文件中,同時用映射代碼替換對應(yīng)指令的指向代碼;在對目標進程進行調(diào)試的同時建立一個仿目標進程文件,仿目標進程文件中沒有內(nèi)容,在對目標進程的代碼進行匹配時,對匹配后不符合條件的目標進程代碼按順序完全拷貝到仿目標進程文件中,對匹配后符合條件的調(diào)用系統(tǒng)服務(wù)指令后的指向代碼用相應(yīng)的映射代碼替換。新建立的仿目標進程文件代碼內(nèi)容與目標進程代碼內(nèi)容大部分一樣,僅是對屬于自我保護程序屏蔽的調(diào)用系統(tǒng)服務(wù)指令的指向代碼用對應(yīng)的映射代碼進行了替換。104、對仿目標進程文件進行編譯形成可執(zhí)行的仿目標進程,當系統(tǒng)調(diào)用目標進程時用仿目標進程進行替換執(zhí)行,此時對仿目標進程進行攔截也就實現(xiàn)了目標進程的攔截。目標進程文件的代碼匹配完成后,仿目標進程文件的也同時建立完成,對仿目標進程文件進行編譯得到可執(zhí)行的仿目標進程。當系統(tǒng)調(diào)用目標進程時,本方法截獲調(diào)用命令而代之仿目標進程執(zhí)行,對于執(zhí)行的仿目標進程再利用API HOOK進行攔截,即可繞過自我保護程序的屏蔽,執(zhí)行完畢后,再將結(jié)果返回給系統(tǒng)。從而達到避開具有自我保護的目標進程對攔截進行屏蔽的最終目的。
以下根據(jù)附圖2所示,對本發(fā)明的方法流程做出說明;調(diào)入目標進程10到內(nèi)存中,對目標進程進行反匯編11,對得到的代碼按順序進行系統(tǒng)服務(wù)指令匹配12,當匹配到的指令時在指令處設(shè)置斷點13,并對指令進行分析14,確定是否是目標進程的屏蔽指令,如不是則繼續(xù)查找17,如果是,則找到指令對應(yīng)的指向代碼并分析指向代碼15,根據(jù)指向代碼的內(nèi)容建立映射代碼16,然后繼續(xù)查找17,當找到下一個匹配指令時同樣再建立對應(yīng)的映射代碼,直至所有的目標進程代碼匹配完畢,然后結(jié)否18。其中在分析指向代碼15時,如果指向代碼的目的是跳轉(zhuǎn)或調(diào)用到下級程序時,則進入下級程序30進行匹配31,當找到匹配指令時,設(shè)置斷點32并取消前面的設(shè)置斷點13,分析33匹配指令是否是目標進程屏蔽的指令,然后根據(jù)是或否繼續(xù)向下分析,直至遍歷完所有的子程序。在調(diào)入目標進程10的同時建立仿目標進程文件20,根據(jù)匹配11的匹配順序,同時拷貝目標進程代碼21到仿目標進程文件中,當遇到被目標進程屏蔽的指令時,用映射代碼替換該指令的指向代碼22,依據(jù)上述方式完成整個仿目標進程文件的建立,再對建立后的仿目標進程文件進行編譯形成仿目標進程23,當系統(tǒng)調(diào)用目標進程時由仿目標進程進行替換執(zhí)行,再用APIH00K執(zhí)行攔截26,即可實現(xiàn)對目標進程進行攔截的目的。如圖3所示,本發(fā)明中對目標進程代碼的內(nèi)容分析包括下面的處理步驟進行仿目標進程代碼重建過程分為兩種情況首先將最上層的代碼進行拷貝(即圖3中所有的反匯編代碼),根據(jù)獲取的系統(tǒng)服務(wù)函數(shù)的調(diào)用號或者系統(tǒng)服務(wù)函數(shù)地址的偏移量的指令內(nèi)容,在匹配到j(luò)mp、call、jz、jnz等指令時,對其操作數(shù)地址(指向代碼)進行查看,如果不是指向函數(shù)功能號或者偏移量,則將操作數(shù)目標地址的代碼拷貝到仿目標進程中(即圖3中的操作數(shù)地址A),然后進入操作數(shù)目標地址遞歸進行進一步查看匹配代碼(即圖3中的操作數(shù)地址B),要對每一級下層都采用同樣的查看方式,并將未涉及到函數(shù)功能號或者偏移量的操作數(shù)目標地址的代碼直接進行拷貝,如果操作數(shù)地址是指向函數(shù)功能號或者偏移量(即圖3中操作數(shù)地址A里的系統(tǒng)服務(wù)函數(shù)),只需根據(jù)函數(shù)功能號或者偏移量建立相應(yīng)的映射代碼,并用映射代碼替換指向函數(shù)功能號或者偏移量的指向代碼,直到將目標代碼完全匹配結(jié)束,由此重建的仿目標進程的代碼與目標進程的代碼功能相同,形成一個與目標進程指向系統(tǒng)服務(wù)函數(shù)地址相同的仿目標進程。
最后應(yīng)說明的是以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照所述實施例對本發(fā)明進行了具體的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當理解其依然可以對所述各實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替 換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。
權(quán)利要求
1.一種對具有自我保護的目標進程實現(xiàn)攔截的方法,其特征在于,包括如下步驟 步驟I、將目標進程調(diào)入內(nèi)存中進行調(diào)試并查找其中所有的調(diào)用系統(tǒng)服務(wù)指令; 步驟2、對每一個確定的調(diào)用系統(tǒng)服務(wù)指令的指向代碼,建立格式不同但同樣執(zhí)行原功能的映射代碼; 步驟3、建立仿目標進程文件,并在調(diào)式過程中將目標進程的代碼按原順序拷貝到仿目標進程文件中,同時用映射代碼替換對應(yīng)指令的指向代碼; 步驟4、對仿目標進程文件進行編譯形成可執(zhí)行的仿目標進程,當系統(tǒng)調(diào)用目標進程時用仿目標進程進行替換執(zhí)行,此時對仿目標進程進行攔截也就實現(xiàn)了目標進程的攔截。
2.如權(quán)利要求I所述的方法,其特征在于,所述步驟I中的調(diào)試過程為 步驟21、首先對目標進程在內(nèi)存中的所有代碼進行反匯編; 步驟22、然后根據(jù)要查找的調(diào)用系統(tǒng)服務(wù)指令的名稱在反匯編后的代碼中進行匹配,查找出所有符合條件的調(diào)用系統(tǒng)服務(wù)指令; 步驟23、獲取調(diào)用系統(tǒng)服務(wù)指令所指向的調(diào)用系統(tǒng)服務(wù)函數(shù)的調(diào)用號或系統(tǒng)服務(wù)函數(shù)地址的偏移量的指向代碼。
3.如權(quán)利要求2所述的方法,其特征在于,所述步驟22中,匹配采用遍歷的方式相對所有的代碼,具體步驟如下 步驟31、當匹配到某個符合的調(diào)用系統(tǒng)服務(wù)指令時,在此處設(shè)置斷點; 步驟32、對此調(diào)用系統(tǒng)服務(wù)指令的指向代碼進行分析,進一步確定指向代碼的內(nèi)容是否屬于目標進程實施了屏蔽的調(diào)用號或偏移量; 步驟321、如當前調(diào)用號或偏移量是屏蔽對象,則跳轉(zhuǎn)到步驟2進行重建; 步驟322、如當前調(diào)用號或偏移量不是屏蔽對象,則繼續(xù)向下匹配。
4.如權(quán)利要求3所述的方法,其特征在于,所述步驟32中,如當前調(diào)用系統(tǒng)服務(wù)指令跳轉(zhuǎn)的目的是進入下一級程序,則進入下一級程序的代碼繼續(xù)進行匹配,直至遇到當前程序末尾的回轉(zhuǎn)指令時才跳轉(zhuǎn)回斷點處繼續(xù)向下匹配。
5.如權(quán)利要求2所述的方法,其特征在于,所述步驟22中,每匹配到一個新的調(diào)用系統(tǒng)服務(wù)指令時,則取消前面設(shè)置的斷點,重新在當前位置設(shè)置新斷點,即分析過程中只設(shè)置一個斷點。
6.如權(quán)利要求I所述的方法,其特征在于,所述步驟3中仿目標進程文件的建立是與匹配過程同步進行的,建立過程如下 步驟61、在匹配過程中,依次將目標進程中匹配過但不符合條件的代碼拷貝到仿目標進程文件中; 步驟62、在拷貝過程中涉及到要重建的調(diào)用系統(tǒng)服務(wù)指令的指向代碼時,則用相應(yīng)重建的映射代碼代替; 步驟63、當匹配完成時,對仿目標進程文件的代碼拷貝也同時完成,對完成后的仿目標進程文件進行編譯形成仿目標進程。
7.如權(quán)利要求1-6所述的任意一種方法,其特征在于,所述調(diào)用系統(tǒng)服務(wù)指令是指調(diào)用系統(tǒng)服務(wù)函數(shù)的調(diào)用號或系統(tǒng)服務(wù)函數(shù)地址的偏移量的跳轉(zhuǎn)指令和調(diào)用指令。
8.如權(quán)利要求7所述的方法,其特征在于,所述重建的指向代碼中不包括雖然是調(diào)用系統(tǒng)服務(wù)函數(shù)指令,但不屬于目標進程的屏蔽目標的調(diào)用系統(tǒng)服務(wù)指令。
全文摘要
本發(fā)明公開一種對具有自我保護的目標進程實現(xiàn)攔截的方法,包括如下步驟將目標進程調(diào)入內(nèi)存中進行調(diào)試并查找其中所有的調(diào)用系統(tǒng)服務(wù)指令;對每一個確定的調(diào)用系統(tǒng)服務(wù)指令的指向代碼,建立格式不同但同樣執(zhí)行原功能的映射代碼;建立仿目標進程文件,并在調(diào)式過程中將目標進程的代碼按原順序拷貝到仿目標進程文件中,同時用映射代碼替換對應(yīng)指令的指向代碼;對仿目標進程文件進行編譯形成可執(zhí)行的仿目標進程,當系統(tǒng)調(diào)用目標進程時用仿目標進程進行替換執(zhí)行,此時對仿目標進程進行攔截也就實現(xiàn)了目標進程的攔截。本發(fā)明在目標進程和仿目標進程之間建立對應(yīng)關(guān)系,利用仿目標進程替換目標進程的執(zhí)行,從而實現(xiàn)能夠應(yīng)用API HOOK進行攔截的目的。
文檔編號G06F11/00GK102799493SQ201210206268
公開日2012年11月28日 申請日期2012年6月21日 優(yōu)先權(quán)日2012年6月21日
發(fā)明者李瑞平 申請人:北京伸得緯科技有限公司, 國際伸得緯有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
四平市| 尚志市| 伽师县| 定安县| 勐海县| 北流市| 玉林市| 秦安县| 达尔| 溧水县| 泰来县| 沧源| 瓮安县| 泾源县| 纳雍县| 河间市| 工布江达县| 曲阜市| 桃园市| 丰台区| 武义县| 长汀县| 大同县| 广灵县| 满洲里市| 黄龙县| 全椒县| 平邑县| 蓬莱市| 全州县| 渝中区| 台北县| 诏安县| 化德县| 龙川县| 拉萨市| 梧州市| 温泉县| 红原县| 苍溪县| 孟津县|