admin 发表于 2014-10-31 11:56:22

使用AppInit_DLLs加载DLL进行API Hook

例子是由CodeProject下载,利用API Hook技术,拦截替换了系统NtQuerySystemInformation函数,在替换的函数中将Windows系统计算器进程calc.exe过滤,当我们打开任务管理器或者一些使用NtQuerySystemInformation来获取系统进程信息的工具时,无法看到calc.exe进程。该例中还包含了一个强大的mHook工具类。
工程编译后的DLL文件添加到注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows项下的AppInit_DLLs键中。此后启动任何使用了User32.dll的程序均会加载该DLL。
注意:如果是64位系统,那么DLL文件需要编译为64位才可以正常使用。
重点代码如下:if (SystemProcessInformation == SystemInformationClass && STATUS_SUCCESS == status)
{
//
// Loop through the list of processes
//

PMY_SYSTEM_PROCESS_INFORMATION pCurrent = NULL;
PMY_SYSTEM_PROCESS_INFORMATION pNext = (PMY_SYSTEM_PROCESS_INFORMATION)SystemInformation;

do
{
pCurrent = pNext;
pNext = (PMY_SYSTEM_PROCESS_INFORMATION)((PUCHAR)pCurrent + pCurrent->NextEntryOffset);

if (!wcsncmp(pNext->ImageName.Buffer, L"calc.exe", pNext->ImageName.Length))
{
if (0 == pNext->NextEntryOffset)
{
pCurrent->NextEntryOffset = 0;
}
else
{
pCurrent->NextEntryOffset += pNext->NextEntryOffset;
}

pNext = pCurrent;
}
}
while(pCurrent->NextEntryOffset != 0);
}



效果图:
http://www.nmgwddj.com/wp-content/uploads/2014/10/2014-10-30_135452-266x300.png
http://www.nmgwddj.com/wp-content/uploads/2014/10/2014-10-30_135503-277x300.png
点击下载:AppInitHook

转自邓佳的博客。

页: [1]
查看完整版本: 使用AppInit_DLLs加载DLL进行API Hook