|
23 | 23 | LPVOID = ctypes.wintypes.LPVOID |
24 | 24 | LPCVOID = ctypes.wintypes.LPCVOID |
25 | 25 | PWORD = ctypes.wintypes.PWORD |
| 26 | +PSIZE_T = ctypes.wintypes.PSIZE |
26 | 27 | SIZE_T = ctypes.c_size_t |
27 | 28 | ULONG = ctypes.wintypes.ULONG |
28 | 29 | VOID = ctypes.c_void_p |
|
48 | 49 | HeapCreate.restype = HANDLE |
49 | 50 |
|
50 | 51 | NtCreateThreadEx = ntdll.NtCreateThreadEx |
51 | | -NtCreateThreadEx.argtypes = [ |
52 | | - HANDLE, # ThreadHandle |
53 | | - ACCESS_MASK, # desired access |
54 | | - LPVOID, # ObjectAttributes |
55 | | - HANDLE, # ProcessHandle |
56 | | - LPVOID, # lpStartAddress |
57 | | - LPVOID, # lpParameter |
58 | | - ULONG, # flags |
59 | | - SIZE_T, # StackZeroBits |
60 | | - SIZE_T, # SizeOfStackCommit |
61 | | - SIZE_T, # SizeOfStackReserve |
62 | | - LPVOID # lpBytesBuffer |
63 | | -] |
64 | | -NtCreateThreadEx.restype = LONG # NTSTATUS |
| 52 | +NtCreateThreadEx.argtypes = [ HANDLE, ACCESS_MASK, LPVOID, HANDLE, LPVOID, LPVOID, ULONG, SIZE_T, SIZE_T, SIZE_T, LPVOID ] |
| 53 | +NtCreateThreadEx.restype = LONG |
| 54 | + |
| 55 | +def pNtCreateThreadEx( |
| 56 | + ThreadHandle=HANDLE, DesiredAccess=ACCESS_MASK, ObjectAttributes: LPVOID=None, |
| 57 | + ProcessHandle=HANDLE, lpStartAddress=LPVOID, lpParameter: LPVOID=None, |
| 58 | + CreateFlags=ULONG, ZeroBits=SIZE_T, SizeOfStackCommit=SIZE_T, |
| 59 | + SizeOfStackReserve=SIZE_T, lpBytesBuffer: LPVOID=None |
| 60 | + ): |
| 61 | + r = NtCreateThreadEx(ThreadHandle, DesiredAccess, ObjectAttributes, |
| 62 | + ProcessHandle, lpStartAddress, lpParameter, |
| 63 | + CreateFlags, ZeroBits, SizeOfStackCommit, |
| 64 | + SizeOfStackReserve, lpBytesBuffer) |
| 65 | + return r |
65 | 66 |
|
66 | 67 | NtCreateThread = ntdll.NtCreateThread |
67 | | -NtCreateThread.argtypes = [ |
68 | | - HANDLE, # ThreadHandle |
69 | | - ACCESS_MASK, # DesiredAccess |
70 | | - LPVOID, # ObjectAttributes (optional) |
71 | | - HANDLE, # ProcessHandle |
72 | | - LPVOID, # lpStartAddress |
73 | | - LPVOID, # lpParameter |
74 | | - BOOL, # CreateSuspended |
75 | | - ULONG, # StackZeroBits (optional) |
76 | | - ULONG, # SizeOfStackCommit (optional) |
77 | | - ULONG, # SizeOfStackReserve (optional) |
78 | | - LPVOID # lpThreadId (optional) |
79 | | -] |
80 | | -NtCreateThread.restype = LONG # NTSTATUS |
| 68 | +NtCreateThread.argtypes = [ HANDLE, ACCESS_MASK, LPVOID, HANDLE, LPVOID, LPVOID, BOOL, ULONG, ULONG, ULONG, LPVOID ] |
| 69 | +NtCreateThread.restype = LONG |
| 70 | + |
| 71 | +NtWriteVirtualMemory = ntdll.NtWriteVirtualMemory |
| 72 | +NtWriteVirtualMemory.argtypes = [HANDLE, LPVOID, LPVOID, ULONG, PSIZE_T] |
| 73 | +NtWriteVirtualMemory.restype = LONG |
| 74 | + |
| 75 | +def pNtWriteVirtualMemory( |
| 76 | + ProcessHandle=HANDLE, |
| 77 | + BaseAddress=LPVOID, |
| 78 | + Buffer=LPVOID, |
| 79 | + BufferSize=SIZE_T, |
| 80 | + NumberOfWrittenBytes: HANDLE=None |
| 81 | + ): |
| 82 | + r = NtWriteVirtualMemory(ProcessHandle, BaseAddress, Buffer, BufferSize, NumberOfWrittenBytes) |
| 83 | + return r |
81 | 84 |
|
82 | 85 | OpenProcess = kernel32.OpenProcess |
83 | 86 | OpenProcess.argtypes = [DWORD, BOOL, DWORD] |
|
0 commit comments