NtCreateThreadEx under x64

近日忙于大作业,顺手写了下逆向的上机作业,然后发现在Win10 x64下用NtCreateThreadEx怎么也注入不进去,GetLastError没有返回值,函数的返回值是“参数不正确”。索性试着逆向一下ntdll,然后发现,这个函数在x64和x86下的原型应该是不同的:

// NtCreateThreadEx - x32 
typedef DWORD(NTAPI *fNtCreateThreadEx)
(
 PHANDLE                 ThreadHandle,
 ACCESS_MASK             DesiredAccess,
 LPVOID                  ObjectAttributes,
 HANDLE                  ProcessHandle,
 LPTHREAD_START_ROUTINE  lpStartAddress,
 LPVOID                  lpParameter,
 BOOL                    CreateSuspended,
 DWORD                   dwStackSize,
 DWORD                   Arg8,
 DWORD                   Arg9,
 LPVOID                  Arg10
);

// NtCreateThreadEx - x64 
typedef DWORD64(NTAPI *fNtCreateThreadEx)
(
 PHANDLE                 ThreadHandle,
 ACCESS_MASK             DesiredAccess,
 LPVOID                  ObjectAttributes,
 HANDLE                  ProcessHandle,
 LPTHREAD_START_ROUTINE  lpStartAddress,
 LPVOID                  lpParameter,
 BOOL                    CreateSuspended,
 DWORD64     dwStackSize,
 DWORD64     Arg8,
 DWORD64     Arg9,
 LPVOID                  Arg10
);

上网搜了一下才发现有人已经给出来了,有一点点尴尬。

实际其他的都差不多,主要是后几个参数的类型不一样。不过不知道怎么回事,对iexplore.exe的几个子进程还是注不进去,八成和令牌有关系?有时间再试试吧。

唉,好久没碰Windows,差点连OD都要不会用了……

//对,这就是一篇水文……