資源描述:
《試論windows2003 內(nèi)核級進(jìn)程隱藏和偵測技術(shù)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、試論Windows2003內(nèi)核級進(jìn)程隱藏和偵測技術(shù)摘要:信息對抗是目前計(jì)算機(jī)發(fā)展的一個(gè)重要的方向,為了更好的防御,必須去深入的了解敵人進(jìn)攻的招式。信息對抗促使信息技術(shù)飛速的發(fā)展。下面我選取了信息對抗技術(shù)的中一個(gè)很小一角關(guān)于ain,ain,是一樣的。 extern"C"NTSTATUSDriverEntry(INPDRIVER_OBJECTDriverObject,INPUNICODE_STRINGRegistryPath) {...} DriverEntry的第一個(gè)參數(shù)是一個(gè)指針,指向一個(gè)剛被初始化的驅(qū)動(dòng)程序?qū)ο?,該對象就代表你的?qū)動(dòng)程序,DriverE
2、ntry的第二個(gè)參數(shù)是設(shè)備服務(wù)鍵的鍵名。DriverEntry函數(shù)返回一個(gè)NTSTATUS值。NTSTATUS實(shí)際就是一個(gè)長整型,但你應(yīng)該使用NTSTATUS定義該函數(shù)的返回值而不是LONG,這樣代碼的可讀性會更好。大部分內(nèi)核模式支持例程都返回NTSTATUS狀態(tài)代碼,你可以在DDK頭文件NTSTATUS.H中找到NTSTATUS的代碼列表。 DriverEntry的作用主要就是創(chuàng)建設(shè)備對象,建立設(shè)備對象的符號鏈接,設(shè)置好各個(gè)類型的回調(diào)函數(shù)等?! ±纾篹xtern"C"NTSTATUSDriverEntry(INPDRIVER_OBJECTDriverOb
3、ject,INPUNICODE_STRINGRegistryPath){DriverObject->DriverUnload=DriverUnload;<--1DriverObject->DriverExtension->AddDevice=AddDevice;DriverObject->DriverStartIo=StartIo;DriverObject->MajorFunction[IRP_MJ_PNP]=DispatchPnp;<--2DriverObject->MajorFunction[IRP_MJ_P
4、O中通過設(shè)置AddDevice回調(diào)函數(shù)來創(chuàng)建設(shè)備對象。在NT驅(qū)動(dòng)中在DriverEntry例程中創(chuàng)建設(shè)備對象和符號鏈接?! ±纾骸 tlInitUnicodeString(deviceNameUnicodeString,deviceNameBuffer);//初始化設(shè)備名字//創(chuàng)建設(shè)備ntStatus=IoCreateDevice(DriverObject,0,deviceNameUnicodeString,##DeviceId,0,FALSE,deviceObject);if(NT_SUCCESS(ntStatus)){RtlInitUnicodeStr
5、ing(deviceLinkUnicodeString,deviceLinkBuffer);//初始化符號鏈接名字//創(chuàng)建符號鏈接ntStatus=IoCreateSymbolicLink(deviceLinkUnicodeString,deviceNameUnicodeString);if(!NT_SUCCESS(ntStatus)){IoDeleteDevice(deviceObject);//如果創(chuàng)建符號鏈接失敗,刪除設(shè)備returnntStatus;}} 建立符號鏈接的作用就是暴露一個(gè)給應(yīng)用程序的接口,應(yīng)用程序可以通過CreateFileAPI打開鏈
6、接符號,得到一個(gè)語柄,和我們的驅(qū)動(dòng)程序進(jìn)行交互操作?! ?.Unload例程 雖然各個(gè)驅(qū)動(dòng)程序的Unload例程不盡相同,但是它大致執(zhí)行下列工作: 釋放屬于驅(qū)動(dòng)程序的任何硬件?! 腶jorField域中來唯一的標(biāo)識請求的類型。MajorField域是被I/O管理器用來索引驅(qū)動(dòng)程序?qū)ο蟮腗ajorFunction表,這個(gè)表包含一個(gè)指向一個(gè)特殊I/O請求的派遣例程的功能指針,如果驅(qū)動(dòng)程序不支持這個(gè)請求,MajorFunction表就會指向I/O管理器函數(shù)_IopInvalidDeviceRequest,該函數(shù)返回一個(gè)錯(cuò)誤給原始的調(diào)用者。驅(qū)動(dòng)程序的有責(zé)任提供所
7、有的驅(qū)動(dòng)程序支持的派遣例程。所有的驅(qū)動(dòng)程序必須支持IRP_MJ_CREATE功能代碼,因?yàn)檫@個(gè)功能代碼是用來響應(yīng)J_CLOSE功能代碼,因?yàn)樗脕眄憫?yīng)ydrvDispatch(INPDEVICE_OBJECTDeviceObject,INPIRPIrp){NTSTATUSstatus;PIO_STACK_LOCATIONirpSp;//得到當(dāng)前IRP(I/O請求包)irpSp=IoGetCurrentIrpStackLocation(Irp);sation=0L;break;caseIRP_MJ_CLOSE:DbgPrint("IRP_MJ_CLOSE")
8、;Irp->IoStatus.S