欢迎来到天天文库
浏览记录
ID:9711247
大小:61.00 KB
页数:7页
时间:2018-05-05
《建立内核级钩子控制操作系统实现程序隐身》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
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
此文档下载收益归作者所有