|
学习Tesla.Angela大佬的[4-5]无HOOK监控进线程句柄操作课程时用到PobPreOperationCallback回调函数,此回调函数PobPreOperationCallback_PROCESS(PVOID RegistrationContext, POB_PRE_OPERATION_INFORMATION OperationInformation)
//此回调函数第一个函数是由RegistrationContext决定的,第二个是个结构体,我们就要操作这个结构体
/*第二个结构体
typedef struct _OB_PRE_OPERATION_INFORMATION {
OB_OPERATION Operation;
union {
ULONG Flags;
struct {
ULONG KernelHandle : 1;
ULONG Reserved : 31;
};
};
PVOID Object;
POBJECT_TYPE ObjectType;
PVOID CallContext;
POB_PRE_OPERATION_PARAMETERS Parameters;
} OB_PRE_OPERATION_INFORMATION, *POB_PRE_OPERATION_INFORMATION;
*/
经查询POB_PRE_OPERATION_PARAMETERS Parameters为指向OB_PRE_OPERATION_PARAMETERS联合的指针
/*
typedef union _OB_PRE_OPERATION_PARAMETERS {
OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation;
OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
} OB_PRE_OPERATION_PARAMETERS, *POB_PRE_OPERATION_PARAMETERS;
*/
第一个参数是指向OB_PRE_CREATE_HANDLE_INFORMATION结构,其中包含特定于正在打开句柄信息。
/*
typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION {
ACCESS_MASK DesiredAccess;
ACCESS_MASK OriginalDesiredAccess;
} OB_PRE_CREATE_HANDLE_INFORMATION, *POB_PRE_CREATE_HANDLE_INFORMATION;
*/
msdn:参数DesiredAccess
一个ACCESS_MASK值,该值指定要授予该句柄的访问权限。默认情况下,该成员等于OriginalDesiredAccess,但是ObjectPreCallback例程可以修改此值以限制所授予的访问。msdn有flag但没有宏定义。
PROCESS_CREATE_PROCESS 创建该流程的新子流程。
PROCESS_CREATE_THREAD 在流程的上下文中创建一个新线程。
PROCESS_DUP_HANDLE 往返于进程上下文的重复句柄,例如通过调用用户模式DuplicateHandle例程。
PROCESS_SET_QUOTA 设置进程的工作集大小,例如通过调用用户模式SetProcessWorkingSetSize例程。
PROCESS_SET_INFORMATION 修改过程设置,例如通过调用用户模式SetPriorityClass例程。
PROCESS_SUSPEND_RESUME 暂停或继续该过程。
PROCESS_TERMINATE 终止该过程,例如通过调用用户模式的TerminateProcess例程。
PROCESS_VM_OPERATION 修改进程的地址空间,例如通过调用用户模式的WriteProcessMemory和VirtualProtectEx例程。
PROCESS_VM_WRITE 写入进程的地址空间,例如通过调用用户模式的WriteProcessMemory例程。
教学中直接定义了#define PROCESS_TERMINATE 0x1,但是我只在wdm.h找到一个flag的宏定义。msdn说是ACCESS_MASK,我查阅文档,也没找到具体的和这几个flag相关的!想弄明白这个问题。这几个flag的宏定义到底是啥!为啥大佬咋知道PROCESS_TERMINATE是0x1的,我咋查不到啊! |
|