專利名稱:一種目標(biāo)地址定位方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及安全軟件領(lǐng)域,尤其涉及ー種目標(biāo)地址定位方法和系統(tǒng)。
背景技術(shù):
由于在設(shè)計(jì)理論上存在著一定的缺陷(例如缺乏完整性校驗(yàn)機(jī)制等),微軟Windows 32位操作系統(tǒng)平臺(tái)存在著大量的被篡改可能。安全軟件在查殺惡意程序(計(jì)算機(jī)病毒)的過程中,需要查找、定位涉嫌中毒程序、函數(shù)的原始地址,之后再將其原始地址值與其現(xiàn)在的值對(duì)比,找出差異的地方,這些差異之處就是被病毒篡改的隱秘修改點(diǎn),之后將隱秘修改點(diǎn)的值恢復(fù)為原始默認(rèn)值,這是安全軟件與病毒進(jìn)行攻防的重要步驟。從上述安全軟件殺毒的描述中可以知道原始地址定位技術(shù)是安全軟件的關(guān)鍵技術(shù)之一。在現(xiàn)有原始地址定位技術(shù)中,可以歸納為“特征碼掃描”定位法和“基于長(zhǎng)度反匯 編引擎的特征碼掃描”定位法兩種,這兩種方法的核心都在于定位的方法是從ニ進(jìn)制代碼段入手,根據(jù)某些特定的ニ進(jìn)制字節(jié)流查找目標(biāo)例程,之后從提取出的相對(duì)偏移累加上重定位信息最終得出原始地址。根據(jù)ニ進(jìn)制字節(jié)流的方法依賴與特定的操作系統(tǒng)版本或編譯器選項(xiàng)設(shè)置,新平臺(tái)只要出現(xiàn)ー個(gè)比特的改變都將導(dǎo)致特征硬編碼失效,因此,現(xiàn)有的原始地址定位技術(shù)跨平臺(tái)能力弱、向后兼容性差。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供ー種目標(biāo)地址定位方法和系統(tǒng),在獲取目標(biāo)驅(qū)動(dòng)程序的原始地址后,將獲取的目標(biāo)驅(qū)動(dòng)程序的原始地址與系統(tǒng)開機(jī)時(shí)加載的目標(biāo)驅(qū)動(dòng)程序的地址進(jìn)行對(duì)比,井根據(jù)對(duì)比結(jié)果判定目標(biāo)驅(qū)動(dòng)程序的地址是否被篡改,如果判定目標(biāo)驅(qū)動(dòng)程序的地址被篡改,則找出篡改點(diǎn);將篡改點(diǎn)恢復(fù)為原始默認(rèn)值。為了解決上述問題,本發(fā)明公開了ー種目標(biāo)地址定位方法,包括加載目標(biāo)驅(qū)動(dòng)程序到用戶態(tài)內(nèi)存空間;模擬目標(biāo)驅(qū)動(dòng)程序運(yùn)行所需的參數(shù)和環(huán)境;目標(biāo)驅(qū)動(dòng)程序在用戶態(tài)下運(yùn)行,獲取目標(biāo)驅(qū)動(dòng)程序的原始地址。進(jìn)ー步的,還包括將獲取的目標(biāo)驅(qū)動(dòng)程序的原始地址與系統(tǒng)開機(jī)時(shí)加載的目標(biāo)驅(qū)動(dòng)程序的地址進(jìn)行對(duì)比,井根據(jù)對(duì)比結(jié)果判定目標(biāo)驅(qū)動(dòng)程序的地址是否被篡改。進(jìn)ー步的,還包括如果判定目標(biāo)驅(qū)動(dòng)程序的地址被篡改,則找出篡改點(diǎn);將篡改點(diǎn)恢復(fù)為原始默認(rèn)值。進(jìn)ー步的,還包括將I/O請(qǐng)求包直接發(fā)送到獲取的目標(biāo)驅(qū)動(dòng)程序的原始地址。進(jìn)ー步的,模擬目標(biāo)驅(qū)動(dòng)程序運(yùn)行所需的參數(shù)和環(huán)境,包括偽造并遍歷、替換目標(biāo)驅(qū)動(dòng)程序的所有導(dǎo)入函數(shù);創(chuàng)建線程,偽造并初始化填充目標(biāo)驅(qū)動(dòng)程序?qū)ο蠼Y(jié)構(gòu)及字符串指針;在線程中調(diào)用目標(biāo)驅(qū)動(dòng)程序的導(dǎo)出入口。進(jìn)ー步的,獲取目標(biāo)驅(qū)動(dòng)程序的原始地址,包括讀取系統(tǒng)變量、例程地址數(shù)值;獲取目標(biāo)驅(qū)動(dòng)程序地址重定位信息,計(jì)算得到目標(biāo)驅(qū)動(dòng)程序原始地址。進(jìn)ー步的,獲取目標(biāo)驅(qū)動(dòng)程序地址重定位信息,包括調(diào)用預(yù)設(shè)例程重置目標(biāo)驅(qū)動(dòng)程序重定位信息;讀取所述重定位信息。進(jìn)一步的,在獲取目標(biāo)驅(qū)動(dòng)程序原始地址后,還包括從用戶態(tài)內(nèi)存空間卸載目標(biāo)驅(qū)動(dòng)程序。進(jìn)一步的,在加載目標(biāo)驅(qū)動(dòng)程序到用戶態(tài)內(nèi)存空間之前,還包括發(fā)起初始化請(qǐng)求;獲取互斥對(duì)象資源。進(jìn)一步的,在獲取目標(biāo)驅(qū)動(dòng)程序原始地址后,還包括釋放內(nèi)存和互斥對(duì)象資源。進(jìn)一步的,還包括設(shè)置與目標(biāo)驅(qū)動(dòng)程序運(yùn)行中錯(cuò)誤信息相對(duì)應(yīng)的錯(cuò)誤碼;調(diào)用預(yù)設(shè)例程獲得目標(biāo)驅(qū)動(dòng)程序運(yùn)行中詳細(xì)的錯(cuò)誤信息。本發(fā)明還公開了一種目標(biāo)地址定位系統(tǒng),包括加載裝置,用于加載目標(biāo)驅(qū)動(dòng)程序到用戶態(tài)內(nèi)存空間;模擬裝置,用于模擬目標(biāo)驅(qū)動(dòng)程序運(yùn)行所需的參數(shù)和環(huán)境;獲取裝置,用于目標(biāo)驅(qū)動(dòng)程序在用戶態(tài)下運(yùn)行,獲取目標(biāo)驅(qū)動(dòng)程序的原始地址。 進(jìn)一步的,模擬裝置包括導(dǎo)入模塊,用于偽造并遍歷、替換目標(biāo)驅(qū)動(dòng)程序的所有導(dǎo)入函數(shù);創(chuàng)建模塊,用于創(chuàng)建線程,偽造并初始化填充目標(biāo)驅(qū)動(dòng)程序?qū)ο蠼Y(jié)構(gòu)及字符串指針;調(diào)用模塊,用于在所述線程中調(diào)用目標(biāo)驅(qū)動(dòng)程序的導(dǎo)出入口。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)本發(fā)明的目標(biāo)地址定位方法,通過模擬目標(biāo)驅(qū)動(dòng)程序運(yùn)行的內(nèi)核環(huán)境和參數(shù)等相關(guān)信息,讓目標(biāo)驅(qū)動(dòng)程序在用戶態(tài)下運(yùn)行,進(jìn)而獲取其實(shí)際的原始地址,解決了現(xiàn)有技術(shù)中依賴于二進(jìn)制字節(jié)流查找原始地址而無(wú)法克服的硬編碼的問題,其跨平臺(tái)能力強(qiáng)、向后兼容性好。本發(fā)明方法中,讓目標(biāo)驅(qū)動(dòng)程序在用戶態(tài)運(yùn)行,可以克服其在內(nèi)核態(tài)運(yùn)行可能出現(xiàn)的藍(lán)屏或死機(jī)的問題,利于用戶觀察、判斷系統(tǒng)運(yùn)行狀況,獲取相關(guān)參數(shù),找到惡意程序的隱秘篡改點(diǎn)。
圖I為本發(fā)明方法實(shí)施例I的流程圖;圖2為本發(fā)明方法實(shí)施例I中步驟102的具體流程圖;圖3為本發(fā)明方法實(shí)施例I中步驟103的具體流程圖;圖4為本發(fā)明方法實(shí)施例2中為了獲取錯(cuò)誤信息的流程圖;圖5為本發(fā)明方法實(shí)施例3的流程圖;圖6為本發(fā)明系統(tǒng)實(shí)施例4中一種目標(biāo)地址定位系統(tǒng)的結(jié)構(gòu)示意圖;圖7為本發(fā)明系統(tǒng)實(shí)施例4中模擬裝置的組成結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的具體實(shí)施方式
作進(jìn)一步詳細(xì)描述。以下實(shí)例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。Windows的內(nèi)核往往是病毒篡改的目標(biāo),改了之后怎么辦,現(xiàn)有的處理辦法是通過技術(shù)手段讓磁盤的內(nèi)容映射到內(nèi)核(磁盤中的內(nèi)容是干凈的代碼),然后同內(nèi)核現(xiàn)存的代碼對(duì)比,差異的地方就是病毒的篡改點(diǎn),殺毒的一個(gè)重要?jiǎng)幼骶褪腔謴?fù)這些篡改點(diǎn)的值為默認(rèn)值?,F(xiàn)有技術(shù)找到篡改點(diǎn)的辦法是通過源代碼進(jìn)行對(duì)比,一個(gè)一個(gè)的比對(duì),這樣存在硬編碼的問題,而所謂的反匯編辦法也僅僅是代碼對(duì)比的一種改進(jìn),核心還是不變化的。
本發(fā)明的方法是在用戶態(tài)下模擬內(nèi)核環(huán)境,讓內(nèi)核的一些驅(qū)動(dòng)程序在用戶態(tài)狀態(tài)下運(yùn)行,例如*. sys等驅(qū)動(dòng)程序。這些驅(qū)動(dòng)程序一旦運(yùn)行的話通過分析、跟蹤其調(diào)用函數(shù)等動(dòng)作就可以得到驅(qū)動(dòng)程序的原始地址。之后對(duì)比這些原始地址和當(dāng)前地址的差異,找到篡改點(diǎn)。同時(shí)在用戶態(tài)下模擬內(nèi)核環(huán)境可以更好的觀察這些驅(qū)動(dòng)程序的運(yùn)行,驅(qū)動(dòng)程序的虛擬執(zhí)行放在用戶態(tài)實(shí)現(xiàn)的主要原因是為了盡量避免(放在內(nèi)核態(tài))可能導(dǎo)致的藍(lán)屏問題。本發(fā)明的核心思想在于在用戶態(tài)模擬目標(biāo)驅(qū)動(dòng)程序在內(nèi)核態(tài)運(yùn)行時(shí)所需的參數(shù)和環(huán)境,讓目標(biāo)驅(qū)動(dòng)程序在用戶態(tài)下運(yùn)行,進(jìn)而獲取目標(biāo)驅(qū)動(dòng)程序的原始地址。實(shí)施例1,參考圖1,示出了ー種目標(biāo)地址定位方法,具體可以包括步驟101,加載目標(biāo)驅(qū)動(dòng)程序到用戶態(tài)內(nèi)存空間;步驟102,模擬目標(biāo)驅(qū)動(dòng)程序運(yùn)行所需的參數(shù)和環(huán)境;
步驟103,目標(biāo)驅(qū)動(dòng)程序在用戶態(tài)下運(yùn)行,獲取目標(biāo)驅(qū)動(dòng)程序的原始地址。在具體實(shí)施時(shí),步驟102可以包括(參考圖2)步驟1021,偽造并遍歷、替換目標(biāo)驅(qū)動(dòng)程序的所有導(dǎo)入函數(shù);步驟1022,創(chuàng)建線程,偽造并初始化填充目標(biāo)驅(qū)動(dòng)程序?qū)ο蠼Y(jié)構(gòu)及字符串指針;步驟1023,在所述線程中調(diào)用目標(biāo)驅(qū)動(dòng)程序的導(dǎo)出入口。在具體實(shí)施上述實(shí)施例I步驟103獲取目標(biāo)驅(qū)動(dòng)程序的原始地址時(shí),可以包括(參考圖3)步驟1031,讀取系統(tǒng)變量、例程地址數(shù)值;步驟1032,獲取目標(biāo)驅(qū)動(dòng)程序地址重定位信息,計(jì)算得到目標(biāo)驅(qū)動(dòng)程序原始地址。在步驟1032獲取目標(biāo)驅(qū)動(dòng)程序地址重定位信息中,可以包括調(diào)用預(yù)設(shè)例程重置目標(biāo)驅(qū)動(dòng)程序重定位信息;讀取所述重定位信息。在上述實(shí)施例I中,完成獲取目標(biāo)驅(qū)動(dòng)程序的原始地址的動(dòng)作之后,還可以從用戶態(tài)內(nèi)存空間卸載目標(biāo)驅(qū)動(dòng)程序。在上述實(shí)施例I中,在加載目標(biāo)驅(qū)動(dòng)程序到用戶態(tài)內(nèi)存空間之前,還可以包括發(fā)起初始化請(qǐng)求;獲取互斥對(duì)象資源。如果在加載目標(biāo)驅(qū)動(dòng)程序到用戶態(tài)內(nèi)存空間之前増加了上述兩個(gè)步驟,那么在實(shí)施例I中,獲取目標(biāo)驅(qū)動(dòng)程序原始地址后,也對(duì)應(yīng)的還可以設(shè)有釋放內(nèi)存和互斥對(duì)象資源的步驟。這里對(duì)應(yīng)用本發(fā)明方法的360安全軟件進(jìn)一步的詳細(xì)描述一下以對(duì)比文件系統(tǒng)驅(qū)動(dòng)為例內(nèi)存中有一份被系統(tǒng)開機(jī)時(shí)加載了的、不可信的、可能被木馬篡改了的ntfs.sys驅(qū)動(dòng);另外,我們假定磁盤上的ntfs. sys是沒有被篡改的、原始的、干凈的驅(qū)動(dòng)文件。此吋,映射并且重定位這份干凈的ntfs. sys進(jìn)內(nèi)存就可以和之前那份做對(duì)比、找篡改點(diǎn)。在360安全衛(wèi)士的環(huán)境下,安全軟件會(huì)實(shí)時(shí)監(jiān)控系統(tǒng)驅(qū)動(dòng)的感染行為一不允許隨意破壞系統(tǒng)文件,所以保證了磁盤ntfs. sys文件的可信。在本發(fā)明方法實(shí)施例2中,為了獲取錯(cuò)誤信息,還可以包括如下步驟,參考圖4 步驟201,設(shè)置與目標(biāo)驅(qū)動(dòng)程序運(yùn)行中錯(cuò)誤信息相對(duì)應(yīng)的錯(cuò)誤碼;步驟202,調(diào)用預(yù)設(shè)例程獲得目標(biāo)驅(qū)動(dòng)程序運(yùn)行中詳細(xì)的錯(cuò)誤信息。為了使得獲得的錯(cuò)誤信息同步,可以設(shè)置為內(nèi)核同步調(diào)用返回用戶態(tài)調(diào)用結(jié)果。如果調(diào)用失敗,用戶態(tài)接ロ可以設(shè)置相應(yīng)的錯(cuò)誤碼,這樣,調(diào)用者線程可以通過預(yù)設(shè)例程得到詳細(xì)的錯(cuò)誤信息。
在本發(fā)明方法實(shí)施例3中,以虛擬執(zhí)行文件系統(tǒng)驅(qū)動(dòng)(NTFS. SYS/FASTFAT. SYS)為例,流程圖參考圖5,詳細(xì)實(shí)現(xiàn)步驟可以包括(I)調(diào)用者初始化時(shí)發(fā)起SetMiscParameters請(qǐng)求;(2) SetMiscParameters請(qǐng)求需等待/獲取MemMutex互斥對(duì)象資源;(3) SetMiscParameters調(diào)用LoadPEFile例程加載目標(biāo)驅(qū)動(dòng)到用戶態(tài)內(nèi)存空間;調(diào)用ResetRelocData例程重置PE重定位信息;(4)如LoadPEFile例程初始化失敗則返回對(duì)應(yīng)的錯(cuò)誤碼;(5) SetMiscParameters創(chuàng)建線程CallFSDThread,線程的內(nèi)部完成文件模擬執(zhí)行過程。(6)線程CalIFSDThread調(diào)用WalkImportTable例程修復(fù)導(dǎo)入函數(shù),導(dǎo)入函數(shù)集合 需要自己提前實(shí)現(xiàn),這個(gè)集合要足夠支撐目標(biāo)驅(qū)動(dòng)的正確運(yùn)行;(7)以虛擬執(zhí)行文件系統(tǒng)驅(qū)動(dòng)為例,偽造輸入?yún)?shù)_DRIVER_OBJECT、_UNIC0DE_STRING ;(8)在異常處理的保護(hù)下,線程CallFSDThread調(diào)用驅(qū)動(dòng)的導(dǎo)出入口GsDriverEntry/DriverEntry,虛擬執(zhí)行正式開始;(9)系統(tǒng)變量、例程地址等被執(zhí)行填充,結(jié)合PE地址重定位信息,計(jì)算出實(shí)際的原始地址;(10)調(diào)用例程UnloadPEFile解除可執(zhí)行文件鏡像映射;(11)釋放內(nèi)存,釋放互斥對(duì)象資源,文件模擬執(zhí)行全過程結(jié)束。文件模擬執(zhí)行操作的接口及主要函數(shù)描述初始化例程SetMiscParameters是整個(gè)文件模擬執(zhí)行的邏輯入口,該例程會(huì)調(diào)用可執(zhí)行鏡像裝載函數(shù)LoadPEFile完成模塊加載工作。CalIFSDThread執(zhí)行線程也是由這個(gè)函數(shù)封裝創(chuàng)建的。LoadPEFiIe/UnIoadPEFiIe例程是一組基于文件穿透的PE操作庫(kù),它們會(huì)MapSectionOfModule映射模塊并處理PE文件重定位信息。CallFSDThread執(zhí)行線程是模擬執(zhí)行的實(shí)現(xiàn)函數(shù)。在異常處理的保護(hù)下,目標(biāo)驅(qū)動(dòng)文件將在用戶態(tài)“仿真”運(yùn)行。在本發(fā)明方法實(shí)施例4中,就獲取目標(biāo)驅(qū)動(dòng)程序的原始地址后的應(yīng)用做了舉例說明,在獲取目標(biāo)驅(qū)動(dòng)程序后,可以包括將獲取的目標(biāo)驅(qū)動(dòng)程序的原始地址與系統(tǒng)開機(jī)時(shí)加載的目標(biāo)驅(qū)動(dòng)程序的地址進(jìn)行對(duì)比,并根據(jù)對(duì)比結(jié)果判定目標(biāo)驅(qū)動(dòng)程序的地址是否被篡改。當(dāng)判定目標(biāo)驅(qū)動(dòng)程序的地址沒有被篡改,則結(jié)束類似殺毒掃描的工作,如果判定目標(biāo)驅(qū)動(dòng)程序的地址已經(jīng)被篡改,則可以將獲取的目標(biāo)驅(qū)動(dòng)程序的原始地址與系統(tǒng)開機(jī)時(shí)加載的目標(biāo)驅(qū)動(dòng)程序的地址進(jìn)行對(duì)比,找出篡改點(diǎn);將篡改點(diǎn)恢復(fù)為原始默認(rèn)值。經(jīng)過上述兩個(gè)步驟后,恢復(fù)了被惡意程序修改的篡改點(diǎn),修補(bǔ)了安全隱患。在本發(fā)明方法實(shí)施例5中,給出了在獲取目標(biāo)驅(qū)動(dòng)程序的原始地址后的又一個(gè)具體應(yīng)用?;凇拔募┩浮钡脑?,通過構(gòu)建I/O請(qǐng)求包并向真實(shí)的、可信的文件系統(tǒng)處理函數(shù)處發(fā)送該I/o請(qǐng)求包,進(jìn)而創(chuàng)建一條文件操作的可信通道,這是安全軟件與惡意程序攻防中重要的操作步驟?!罢鎸?shí)的、可信的”文件系統(tǒng)處理函數(shù)地址的獲得就是基于“虛擬執(zhí)行”定位的原始地址,因此在獲取目標(biāo)驅(qū)動(dòng)程序的原始地址后,可以將I/o請(qǐng)求包直接發(fā)送到所述獲取的目標(biāo)驅(qū)動(dòng)程序的原始地址。在實(shí)施例6中,本發(fā)明還公開了一種目標(biāo)地址定位系統(tǒng)(參考圖6)。實(shí)施例6, —種目標(biāo)地址定位系統(tǒng)包括加載裝置601,用于加載目標(biāo)驅(qū)動(dòng)程序到用戶態(tài)內(nèi)存空間;模擬裝置602,用于模擬目標(biāo)驅(qū)動(dòng)程序運(yùn)行所需的參數(shù)和環(huán)境;獲取裝置603,用于目標(biāo)驅(qū)動(dòng)程序在用戶態(tài)下運(yùn)行,獲取目標(biāo)驅(qū)動(dòng)程序的原始地址。在加載裝置601將目標(biāo)驅(qū)動(dòng)程序加載到用戶態(tài)內(nèi)存空間后,模擬裝置602在用戶態(tài)下模擬出目標(biāo)驅(qū)動(dòng)程序運(yùn)行所需的參數(shù)和環(huán)境;在目標(biāo)驅(qū)動(dòng)程序運(yùn)行過程中,所需要的一些系統(tǒng)變量和例程地址等數(shù)值被執(zhí)行填充,累加目標(biāo)驅(qū)動(dòng)程序的重定位信息得出系統(tǒng)變量和例程地址的實(shí)際原始地址。在另ー個(gè)系統(tǒng)實(shí)施例7中,上述系統(tǒng)實(shí)施6中的模擬裝置可以包括如下模塊(參見圖7)導(dǎo)入模塊701,用于偽造并遍歷、替換目標(biāo)驅(qū)動(dòng)程序的所有導(dǎo)入函數(shù);創(chuàng)建模塊702,用于創(chuàng)建線程,偽造并初始化填充目標(biāo)驅(qū)動(dòng)程序?qū)ο蠼Y(jié)構(gòu)及字符串指針;
調(diào)用模塊703,用于在所述線程中調(diào)用目標(biāo)驅(qū)動(dòng)程序的導(dǎo)出入口。以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明技術(shù)原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種目標(biāo)地址定位方法,其特征在于,包括 加載目標(biāo)驅(qū)動(dòng)程序到用戶態(tài)內(nèi)存空間; 模擬目標(biāo)驅(qū)動(dòng)程序運(yùn)行所需的參數(shù)和環(huán)境; 目標(biāo)驅(qū)動(dòng)程序在用戶態(tài)下運(yùn)行,獲取目標(biāo)驅(qū)動(dòng)程序的原始地址。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,還包括 將獲取的目標(biāo)驅(qū)動(dòng)程序的原始地址與系統(tǒng)開機(jī)時(shí)加載的目標(biāo)驅(qū)動(dòng)程序的地址進(jìn)行對(duì)t匕,并根據(jù)對(duì)比結(jié)果判定目標(biāo)驅(qū)動(dòng)程序的地址是否被篡改。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,還包括 如果判定目標(biāo)驅(qū)動(dòng)程序的地址被篡改,則找出篡改點(diǎn); 將篡改點(diǎn)恢復(fù)為原始默認(rèn)值。
4.根據(jù)權(quán)利要求I所述的方法,其特征在于,還包括 將I/O請(qǐng)求包直接發(fā)送到所述獲取的目標(biāo)驅(qū)動(dòng)程序的原始地址。
5.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述模擬目標(biāo)驅(qū)動(dòng)程序運(yùn)行所需的參數(shù)和環(huán)境,包括 偽造并遍歷、替換目標(biāo)驅(qū)動(dòng)程序的所有導(dǎo)入函數(shù); 創(chuàng)建線程,偽造并初始化填充目標(biāo)驅(qū)動(dòng)程序?qū)ο蠼Y(jié)構(gòu)及字符串指針; 在所述線程中調(diào)用目標(biāo)驅(qū)動(dòng)程序的導(dǎo)出入口。
6.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述獲取目標(biāo)驅(qū)動(dòng)程序的原始地址,包括 讀取系統(tǒng)變量、例程地址數(shù)值; 獲取目標(biāo)驅(qū)動(dòng)程序地址重定位信息,計(jì)算得到目標(biāo)驅(qū)動(dòng)程序原始地址。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,獲取目標(biāo)驅(qū)動(dòng)程序地址重定位信息,包括 調(diào)用預(yù)設(shè)例程重置目標(biāo)驅(qū)動(dòng)程序重定位信息; 讀取所述重定位信息。
8.根據(jù)權(quán)利要求I所述的方法,其特征在于,在獲取目標(biāo)驅(qū)動(dòng)程序原始地址后,還包括 從用戶態(tài)內(nèi)存空間卸載目標(biāo)驅(qū)動(dòng)程序。
9.根據(jù)權(quán)利要求I所述的方法,其特征在于,在加載目標(biāo)驅(qū)動(dòng)程序到用戶態(tài)內(nèi)存空間之前,還包括 發(fā)起初始化請(qǐng)求; 獲取互斥對(duì)象資源。
10.根據(jù)根據(jù)權(quán)利要求9所述的方法,其特征在于,在獲取目標(biāo)驅(qū)動(dòng)程序原始地址后,還包括 釋放內(nèi)存和互斥對(duì)象資源。
11.根據(jù)權(quán)利要求I所述的方法,其特征在于,還包括 設(shè)置與目標(biāo)驅(qū)動(dòng)程序運(yùn)行中錯(cuò)誤信息相對(duì)應(yīng)的錯(cuò)誤碼; 調(diào)用預(yù)設(shè)例程獲得目標(biāo)驅(qū)動(dòng)程序運(yùn)行中詳細(xì)的錯(cuò)誤信息。
12.—種目標(biāo)地址定位系統(tǒng),其特征在于,包括加載裝置,用于加載目標(biāo)驅(qū)動(dòng)程序到用戶態(tài)內(nèi)存空間;模擬裝置,用于模擬目標(biāo)驅(qū)動(dòng)程序運(yùn)行所需的參數(shù)和環(huán)境;獲取裝置,用于目標(biāo)驅(qū)動(dòng)程序在用戶態(tài)下運(yùn)行,獲取目標(biāo)驅(qū)動(dòng)程序的原始地址。
13.根據(jù)權(quán)利要求12所述的系統(tǒng),其特征在于,所述模擬裝置包括導(dǎo)入模塊,用于偽造并遍歷、替換目標(biāo)驅(qū)動(dòng)程序的所有導(dǎo)入函數(shù);創(chuàng)建模塊,用于創(chuàng)建線程,偽造并初始化填充目標(biāo)驅(qū)動(dòng)程序?qū)ο蠼Y(jié)構(gòu)及字符串指針;調(diào)用模塊,用于在所述線程中調(diào)用目標(biāo)驅(qū)動(dòng)程序的導(dǎo)出入口。
全文摘要
本發(fā)明公開了一種目標(biāo)地址定位方法,包括加載目標(biāo)驅(qū)動(dòng)程序到用戶態(tài)內(nèi)存空間;模擬目標(biāo)驅(qū)動(dòng)程序運(yùn)行所需的參數(shù)和環(huán)境;目標(biāo)驅(qū)動(dòng)程序在用戶態(tài)下運(yùn)行,獲取目標(biāo)驅(qū)動(dòng)程序的原始地址。本發(fā)明具有以下優(yōu)點(diǎn)本發(fā)明的目標(biāo)地址定位方法,通過模擬目標(biāo)驅(qū)動(dòng)程序運(yùn)行的內(nèi)核環(huán)境和參數(shù)等相關(guān)信息,讓目標(biāo)驅(qū)動(dòng)程序在用戶態(tài)下運(yùn)行,進(jìn)而獲取其實(shí)際的原始地址,解決了現(xiàn)有技術(shù)中依賴于二進(jìn)制字節(jié)流查找原始地址而無(wú)法克服的硬編碼的問題,其跨平臺(tái)能力強(qiáng)、向后兼容性好。
文檔編號(hào)G06F21/00GK102831334SQ20111016106
公開日2012年12月19日 申請(qǐng)日期2011年6月15日 優(yōu)先權(quán)日2011年6月15日
發(fā)明者潘劍鋒, 王宇 申請(qǐng)人:奇智軟件(北京)有限公司