首页
社区
课程
招聘
[求助]如何调用NtCreateUserProcess
发表于: 2015-12-20 00:37 6644

[求助]如何调用NtCreateUserProcess

2015-12-20 00:37
6644
先附上一些资料
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
);

然後是我自己的代码纯c语言控制台

#include <stdio.h>
#include <windows.h>
#include <tchar.h>
#include <Ntsecapi.h>

int result = -1;
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;

typedef NTSTATUS(__stdcall *TFNNtTestAlert)();
// NTSTATUS is LONG, in case that isn't defined in the above headers
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
int main(void)
{
        int ret = 0;
        HMODULE hModule = GetModuleHandle(TEXT("ntdll.dll"));
       
        if (hModule != 0)
        {
                TFNNtTestAlert pfnNtCreateUserProcess = (TFNNtTestAlert)GetProcAddress(hModule, "NtCreateUserProcess");

                if (pfnNtCreateUserProcess != 0)
                {
                        printf("%x\n", pfnNtCreateUserProcess);
                }
                else
                {

                        printf("no\n");
                        getchar(0);
                        return 1;
                }
        }
        getchar(0);
        return 0;
}

这是我逆向的代码

67842DA 8908 mov dword ptr ds:[eax],ecx
767842DC 50 push eax  这个不了解
767842DD 8D85 48FBFFFF lea eax,dword ptr ss:[ebp-0x4B8]
767842E3 50 push eax 这个不了解
767842E4 56 push esi  这个不了解
767842E5 6A 01 push 0x1
767842E7 FFB5 B4FCFFFF push dword ptr ss:[ebp-0x34C]   这里是0
767842ED FFB5 30FBFFFF push dword ptr ss:[ebp-0x4D0]  这里是0
767842F3 FFB5 28FBFFFF push dword ptr ss:[ebp-0x4D8]   这里是0
767842F9 B8 00000002 mov eax,0x2000000
767842FE 50 push eax
767842FF 50 push eax
76784300 8D85 ACFCFFFF lea eax,dword ptr ss:[ebp-0x354]
76784306 50 push eax           这个不了解
76784307 8D85 D0FCFFFF lea eax,dword ptr ss:[ebp-0x330]
7678430D 50 push eax ; 这个不了解
7678430E FF15 68067776 call dword ptr ds:[<&ntdll.NtCreateUserP>; ntdll_12.ZwCreateUserProcess

有5个参数不知怎麽填  求助阿
另外程序员要运动,避免跟某大大一样在小区晕倒

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//