• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    Windows環(huán)境下驅(qū)動保護進程淺析

    2014-01-01 00:00:00梁小龍周陸洲
    數(shù)字化用戶 2014年3期

    【摘 要】隨著技術(shù)的發(fā)展,計算機系統(tǒng)已經(jīng)通過特定程序可實現(xiàn)任意操作,微軟的windows是使用最廣泛的系統(tǒng)之一,其中,Rootkit技術(shù)在windows下最常見的實現(xiàn)方式當(dāng)屬驅(qū)動級的內(nèi)存技術(shù)對抗,它被廣泛的應(yīng)用于游戲保護,殺毒軟件防護等方面。

    【關(guān)鍵詞】對抗 驅(qū)動 Windows API Hook

    一、Intel X86處理器

    Intel的X86處理器是通過Ring級別來控制訪問權(quán)限的,級別共分4層,從Ring0到Ring3(后面簡稱R0,R1,R2,R3)。R0層擁有最高的權(quán)限,R3層擁有最低權(quán)限。而現(xiàn)在的操作系統(tǒng),包括Windows和Linux都沒有采用4層權(quán)限,而只是使用了2層—R0層和R3層,分別用來存放操作系統(tǒng)數(shù)據(jù)和應(yīng)用程序數(shù)據(jù)。

    二、用戶模式和內(nèi)核模式

    Windows從總體上分為內(nèi)核模式(Kernel Mode)和用戶模式(User Mode),Windows將內(nèi)核模式運行在CPU的R0層,而將用戶模式運行在CPU的R3層。而驅(qū)動程序一旦加載,就運行在R0層,就擁有了和操作系統(tǒng)同樣的權(quán)限,可以做任何事情。

    三、WIN32子系統(tǒng)

    Win32是Windows的一個子系統(tǒng),還有另外的子系統(tǒng)如OS/2、POSIX、WOW等。不同的子系統(tǒng)系統(tǒng)提供了不同的編程接口,即API,一般說的API指的就是Win32 API。Win32子系統(tǒng)是最純正的Windows子系統(tǒng),提供了大量的API函數(shù),程序員只需要熟練的使用這些API就可以寫出Windows應(yīng)用程序,當(dāng)然程序員也可以考慮第三方庫,如VC提供的MFC,但這些庫不過是在應(yīng)用程序和Win32子系統(tǒng)中間加了一層封裝而以,沒有本質(zhì)的區(qū)別。Windows API 分為三類 分別是USER函數(shù),GDI函數(shù),和KERNEL函數(shù)。USER函數(shù)(user32.dll):這類函數(shù)管理窗口,菜單,對話框和控件;GDI函數(shù)(gdi32.dll):這類函數(shù)在物理設(shè)備上執(zhí)行繪圖操作;KERNEL函數(shù)(kernel32.dll):這類函數(shù)管理非GUI資源,如進程、線程和同步服務(wù)等。

    四、Native API(Ntdll.dll)

    大部分Win32子系統(tǒng)的API都是通過Native API實現(xiàn)的。Native API的函數(shù)一般都是在Win32 API上加上Nt兩個字母。Native API 是可由用戶模式和內(nèi)核模式程序調(diào)用的NT系統(tǒng)服務(wù)集接口,它們直接由操作系統(tǒng)實現(xiàn)。

    五、SSDT

    SSDT的全稱是System Services Descriptor Table,系統(tǒng)服務(wù)描述符表。這個表就是一個把R3的Win32 API和R0的內(nèi)核API聯(lián)系起來。SSDT并不僅僅只包含一個龐大的地址索引表,它還包含著一些其它有用的信息,諸如地址索引的基地址、服務(wù)函數(shù)個數(shù)等。系統(tǒng)服務(wù)是由操作系統(tǒng)提供的一個函數(shù)集,這些函數(shù)可以幫助調(diào)用者實現(xiàn)系統(tǒng)的各種功能。用戶態(tài)的應(yīng)用程序可以通過API函數(shù)間接地調(diào)用系統(tǒng)服務(wù)。在內(nèi)核態(tài)中,系統(tǒng)通過服務(wù)描述符表尋找相應(yīng)系統(tǒng)服務(wù)函數(shù)。在系統(tǒng)中有2個描述符表(SYSTEM_DESCRIPTOR_TABLE 結(jié)構(gòu)):(1)KeServiceDescriptorTable,由ntosknl.exe導(dǎo)出,主要為KERNEL32和ADVAPI32中的API提供服務(wù);(2)KeServiceDescriptorTable Shadow,未被導(dǎo)出,主要完成USER32/GUI32中的請求。每個描述符表由4個連續(xù)的系統(tǒng)服務(wù)表(System Service Table, SST)的表項組成,每項可以描述一組服務(wù)。每組服務(wù)由一個系統(tǒng)服務(wù)分發(fā)表(System Service Dispatch Table, SSDT)和一個系統(tǒng)服務(wù)參數(shù)表(System Service Parameter Table, SSPT)組成,分別對服務(wù)的入口地址和所需參數(shù)進行索引。每個服務(wù)有一個服務(wù)序號,系統(tǒng)根據(jù)這個序號查找2個表,最終可找到相應(yīng)的服務(wù)函數(shù)和參數(shù)信息。

    六、sysenter和sysexit指令

    從R3切換到R0層,早期的操作系統(tǒng)一般通過中斷來實現(xiàn),如Linux下的 int 80h,Windows NT和Windows2000下的 int 2Eh。而在Windows XP以后則使用了快速系統(tǒng)調(diào)用sysenter和sysexist來進行系統(tǒng)調(diào)用和返回。

    七、驅(qū)動文件

    亦為PE格式的一種,含有用戶模式驅(qū)動、文件系統(tǒng)驅(qū)動等,各類驅(qū)動配合操作系統(tǒng)內(nèi)核組成了龐大的windows系統(tǒng),用戶層應(yīng)用程序調(diào)用API,該API對應(yīng)用程序提供的參數(shù)進行校驗再將所有東西轉(zhuǎn)化為unicode,然后調(diào)用ntdll.dll中的KiFastSystemCall函數(shù)切換入內(nèi)核,如將服務(wù)序號放入eax、將存放參數(shù)的用戶棧指針放入edx,再切換到內(nèi)核態(tài)。當(dāng)程序的處理流程進入R0之后,系統(tǒng)會根據(jù)服務(wù)號(eax)在SSDT這個系統(tǒng)服務(wù)描述符表中查找對應(yīng)的表項,這個找到的表項就是系統(tǒng)服務(wù)函數(shù)的真正地址。之后,系統(tǒng)會根據(jù)這個地址調(diào)用相應(yīng)的系統(tǒng)服務(wù)函數(shù),并把結(jié)果原路返回給ntdll.dll中的API。在調(diào)用sysenter或int 2Eh之后,Windows系統(tǒng)將會捕獲你的這個調(diào)用,然后進入ring0層,調(diào)用內(nèi)核服務(wù)函數(shù)NtOpenProcess。由此,如果驅(qū)動程序在內(nèi)核態(tài)Hook住了NtOpenProcess函數(shù),通過對傳入?yún)?shù)的進行過濾,如果是被保護的程序則返回參數(shù)為0,即可實現(xiàn)對程序的簡單保護。

    八、SSDT HOOK的簡單實現(xiàn)

    (環(huán)境 Windows XP sp3 32bit)驅(qū)動層代碼t_addr=(LONG)KeServiceDescriptorTable->ServiceTableBase;SSDT_Adr=(PLONG)(t_addr+0x23*4); //SSDT表索引值0x23(即NtOpenProcess)SSDT_NtOpenProcess_Cur_Addr=*SSDT_Adr;RealNtOpenAddress = *SSDT_Adr; //保留原始地址RealNtOpenProcess = ( NTOPENPROCESS *)RealNtOpenAddress; __asm //去掉頁面保護。在驅(qū)動入口DriverEntry()派遣函數(shù)中調(diào)用Hook(),從exe文件中傳入進程PID,設(shè)置SSDT Hook,實現(xiàn)對進程的簡單保護。

    九、結(jié)語

    在內(nèi)核下存在著我們看不到的戰(zhàn)爭,隨著技術(shù)的發(fā)展,先前頗為流行的窗口掛鉤、inline hook、API掛鉤、進程注入等技術(shù)已然成為昨日黃花,大有逐漸淡出之勢,取而代之的,則是更狠毒、更為赤裸裸的詞匯:驅(qū)動、隱藏進程、Rootkit……驅(qū)動級的對抗技術(shù)如今已被廣泛應(yīng)用到了殺毒軟件的主動防御、各種軟件的自我保護以及游戲的保護、反外掛等技術(shù)中去。如360的驅(qū)動加載攔截,就是創(chuàng)建了一個LoadImage()的系統(tǒng)回調(diào)函數(shù),用XueTr刪除后發(fā)現(xiàn)其他程序加載驅(qū)動后360就無再提示,進入了Ring0態(tài)可以完成任何操作,如結(jié)束掉殺毒軟件等為下一步利用計算機做準(zhǔn)備;將合理利用驅(qū)動還可以實現(xiàn)提示用戶有惡意程序結(jié)束掉可信賴的程序,并給出程序名稱與路徑等關(guān)鍵信息,為進一步查殺病毒提供了便利;監(jiān)視注冊表;監(jiān)視磁盤讀??;系統(tǒng)還原等。正因為Ring0如此重要的地位,使其成了兵家必爭之地,可以說誰搶占了先機,凌駕Ring3之上,誰就在這場戰(zhàn)爭中增加了勝算。

    參考文獻:

    [1]《天書夜讀-從匯編語言到Windows內(nèi)核編程》.電子工業(yè)出版社 2009

    [2]《Windows驅(qū)動開發(fā)技術(shù)詳解》.電子工業(yè)出版社 2009

    [3]《內(nèi)核態(tài)下的系統(tǒng)服務(wù)掛鉤對抗》.計算機工程 2010

    [4]《多態(tài)技術(shù)加殼軟件的實現(xiàn)》.甘肅科技 2010

    临潭县| 曲沃县| 安徽省| 大港区| 彰化市| 哈密市| 娱乐| 金昌市| 永吉县| 崇义县| 武山县| 台南市| 德格县| 望奎县| 德阳市| 台南县| 浮梁县| 台北县| 榆林市| 容城县| 白山市| 阳西县| 金川县| 吴桥县| 鄂尔多斯市| 青州市| 云和县| 房产| 墨玉县| 玉树县| 改则县| 纳雍县| 洪雅县| 扶绥县| 独山县| 株洲县| 麻城市| 宣威市| 内乡县| 平果县| 上栗县|