(转)NtCreateUserProcess参数
http://www.skyfishes.com/vc/ntcreateuserprocess/
最近有个程序需要修改子进程的父进程来达到隐藏自身的效果,本来Hook NtCreateProcessEx简单搞定,结果发现Win7下断不下来
果断谷歌,发现Vista之后CreateProcess不再经过NtCreateProcessEx,而是调用NtCreateUserProcess进入内核,进行文件的映射等操作
赶紧来记下NtCreateUserProcess参数,好不容易才找到的
typedef struct _NT_PROC_THREAD_ATTRIBUTE_ENTRY { ULONG Attribute; // PROC_THREAD_ATTRIBUTE_XXX,参见MSDN中UpdateProcThreadAttribute的说明 SIZE_T Size; // Value的大小 ULONG_PTR Value; // 保存4字节数据(比如一个Handle)或数据指针 ULONG Unknown; // 总是0,可能是用来返回数据给调用者 } PROC_THREAD_ATTRIBUTE_ENTRY, *PPROC_THREAD_ATTRIBUTE_ENTRY;
typedef struct _NT_PROC_THREAD_ATTRIBUTE_LIST { ULONG Length; // 结构总大小 PROC_THREAD_ATTRIBUTE_ENTRY Entry[1]; } NT_PROC_THREAD_ATTRIBUTE_LIST, *PNT_PROC_THREAD_ATTRIBUTE_LIST;
NTSTATUS NtCreateUserProcess( OUT PHANDLE ProcessHandle, OUT PHANDLE ThreadHandle, IN ACCESS_MASK ProcessDesiredAccess, IN ACCESS_MASK ThreadDesiredAccess, IN POBJECT_ATTRIBUTES ProcessObjectAttributes OPTIONAL, IN POBJECT_ATTRIBUTES ThreadObjectAttributes OPTIONAL, IN ULONG CreateProcessFlags, IN ULONG CreateThreadFlags, IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters, IN PVOID Parameter9, IN PNT_PROC_THREAD_ATTRIBUTE_LIST AttributeList );