麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 應(yīng)用 > 軟件技巧 > 正文

Windows平臺(tái)內(nèi)核級(jí)文件訪問

2024-07-16 17:58:54
字體:
供稿:網(wǎng)友

在windows平臺(tái)下,應(yīng)用程序通常使用API函數(shù)來進(jìn)行文件訪問,創(chuàng)建,打開,讀寫文件。從kernel32的CreateFile/ReadFile/WriteFile函數(shù),到本地系統(tǒng)服務(wù),再到FileSystem及其FilterDriver,經(jīng)歷了很多層次。在每個(gè)層次上,都存在著安全防護(hù)軟件,病毒或者后門作監(jiān)視或者過濾的機(jī)會(huì)。作為安全產(chǎn)品開發(fā)者,我們需要比別人走得更遠(yuǎn),因此我們需要一個(gè)底層的“windows平臺(tái)內(nèi)核級(jí)文件訪問”的方法來確保我們能夠看到正確的干凈的文件系統(tǒng)。

  直接訪問FSD的內(nèi)核級(jí)別文件訪問

  FSD(FileSystemDriver)層是文件API函數(shù)經(jīng)過本地系統(tǒng)服務(wù)層(native API)最后到達(dá)的驅(qū)動(dòng)層次。如果我們可以模仿操作系統(tǒng),在我們自己的驅(qū)動(dòng)程序里直接向FSD發(fā)送IRP,就可以繞過那些native API 和win32 API了,也就可以繞過設(shè)置在這些層次上面的API鉤子等監(jiān)控措施。

  文件的Create和Open

  文件的Create和Open可以通過發(fā)送IRP_MJ_CREATE給FSD,或者調(diào)用IoCreateFile函數(shù)來完成。Create和Open的區(qū)別實(shí)際上在于IoCreateFile/IRP_MJ_CREATE的一個(gè)參數(shù)Disposition的取值。

  通過發(fā)送IRP_MJ_CREATE給FSD的方法與此類似,可以參考IFSDDK document的IRP_MJ_CREATE說明。不同于上面方法的是需要自己創(chuàng)建一個(gè)FILE_OBJECT,好于上面方法的是這種方法不需要一個(gè)HANDLE,HANDLE是線程依賴的,FileObject則是線程無關(guān)。

  文件的Read和Write

  我們通過給FSD發(fā)送IRP_MJ_READ來讀取文件,給FSD發(fā)送IRP_MJ_WRITE來改寫文件。

  如果我們是通過一個(gè)HANDLE來執(zhí)行(如使用IoCreateFile打開的文件),就要先用ObReferenceObjectByHandle函數(shù)來獲得這個(gè)Handle對(duì)應(yīng)的FileObject。我們只能給FileObject發(fā)送IRP。

  之后我們使用IoAllocateIrp分配一個(gè)IRP。根據(jù)FileObject->DeviceObject->Flags的值,我們判斷目標(biāo)文件系統(tǒng)使用什么樣的IO方式。

  對(duì)每種不同的IO方式使用不同的地址傳遞方式。隨后我們填充IRP內(nèi)的各個(gè)參數(shù)域,就可以發(fā)送IRP了。

  接著要考慮如果IRP不能及時(shí)完成,會(huì)異步的返回的情況,我們安裝一個(gè)CompletionRoutine,在CompletionRoutine里面設(shè)置一個(gè)事件為已激活,通知我們的主線程讀取或者寫入操作已經(jīng)完成。

  現(xiàn)在可以發(fā)送IRP了。如果不采取特殊的措施的話,IRP發(fā)送目標(biāo)是FileObject對(duì)應(yīng)的DeviceObject。發(fā)送后,等待IRP的完成并且釋放資源,返回。

  文件的Delete

  Delete實(shí)際上是通過向FSD發(fā)送IRP_MJ_SET_INFORMATION的IRP,并把IrpSp->Parameters.SetFile.FileInformationClass設(shè)置為FileDispositionInformation,用一個(gè)FILE_DISPOSITION_INFORMATION結(jié)構(gòu)填充buffer來執(zhí)行的。

  文件的Rename

  類似于Delete,Rename是向FSD發(fā)送IRP_MJ_SET_INFORMATION的IRP,把IrpSp->Parameters.SetFile.FileInformationClass設(shè)置為FileRenameInformation,填充buffer為FILE_RENAME_INFORMATION結(jié)構(gòu)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美黄 片免费观看 | 美女网站黄在线观看 | 成人毛片视频免费看 | 久久精品亚洲精品国产欧美kt∨ | 日本精品黄色 | 久久九九热re6这里有精品 | 国产自在线| 国产精品久久久久久久亚洲按摩 | 欧美福利视频一区二区三区 | 欧美成人免费 | 成年人在线视频 | 久久久入口 | 亚洲成人黄色片 | 久草在线新时代视觉 | 成人国产视频在线观看 | 国产亚洲精品久久久久婷婷瑜伽 | 天天碰天天操 | 久久91精品国产91久久yfo | 国产精品啪 | www成人在线观看 | 欧日一级片 | 羞羞色院91精品网站 | 欧美成人免费电影 | 午夜精品影院 | 欧美日韩1区2区3区 黄片毛片一级 | 2019亚洲日韩新视频 | 中文字幕亚洲视频 | 欧美日韩国产一区二区三区在线观看 | 51国产偷自视频区视频小蝌蚪 | 久久精品欧美一区二区三区不卡 | 黄色1级视频 | 最新av免费网址 | 久久精品超碰 | 男人久久天堂 | 午夜精品久久久久久久99热浪潮 | 成人一级毛片 | 久久视频精品 | 久久亚洲国产精品 | 草人人| 亚洲成a人在线 | 日本黄色一级视频 |