Skip to content

Commit af786ba

Browse files
committed
dev072#8
1 parent 76b2e0e commit af786ba

File tree

2 files changed

+32
-29
lines changed

2 files changed

+32
-29
lines changed

modules/injection.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def start_injection(self):
106106
Injection = CreateRemoteThread(phandle, None, 0, memory, None, 0x00000004, None)
107107
elif self.ntcrt:
108108
th = HANDLE()
109-
Injection = NtCreateThreadEx(ctypes.byref(th), ACCESS_MASK(GENERIC_ALL), None, phandle, memory, None, False, 0, 0, 0, None)
109+
Injection = pNtCreateThreadEx(ctypes.byref(th), ACCESS_MASK(GENERIC_ALL), None, phandle, memory, None, False, 0, 0, 0, None)
110110
else:
111111
Injection = CreateRemoteThread(phandle, None, 0, memory, None, EXECUTE_IMMEDIATLY, None)
112112

utils/windef.py

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
LPVOID = ctypes.wintypes.LPVOID
2424
LPCVOID = ctypes.wintypes.LPCVOID
2525
PWORD = ctypes.wintypes.PWORD
26+
PSIZE_T = ctypes.wintypes.PSIZE
2627
SIZE_T = ctypes.c_size_t
2728
ULONG = ctypes.wintypes.ULONG
2829
VOID = ctypes.c_void_p
@@ -48,36 +49,38 @@
4849
HeapCreate.restype = HANDLE
4950

5051
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
6566

6667
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
8184

8285
OpenProcess = kernel32.OpenProcess
8386
OpenProcess.argtypes = [DWORD, BOOL, DWORD]

0 commit comments

Comments
 (0)