例子是由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);
- }
复制代码
效果图:
点击下载:AppInitHook
转自邓佳的博客。
|
|