Skip to content

Commit 06b96e6

Browse files
committed
More NotImplementedError for ARM64
1 parent b51a6e1 commit 06b96e6

3 files changed

Lines changed: 13 additions & 4 deletions

File tree

windows/injection.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,8 @@ def perform_manual_getproc_loadlib(target, *args, **kwargs):
184184

185185

186186
def load_dll_in_remote_process(target, dll_path):
187+
if target.architecture == gdef.IMAGE_FILE_MACHINE_ARM64:
188+
raise NotImplementedError("Injection in ARM64 target process is not implemented")
187189
rpeb = target.peb
188190
if rpeb.Ldr:
189191
# LDR est parcourable, ca va etre deja plus simple..
@@ -372,6 +374,8 @@ def generate_python_exec_shellcode_64(target, PyDll):
372374

373375
def inject_python_command(target, code_injected, PYDLL):
374376
"""Postulate: PYDLL is already loaded in target process"""
377+
if target.architecture == gdef.IMAGE_FILE_MACHINE_ARM64:
378+
raise NotImplementedError("Injection in ARM64 target process is not implemented")
375379
PYCODE = code_injected + "\x00"
376380
# TODO: free this (how ? when ?)
377381
remote_python_code_addr = target.virtual_alloc(len(PYCODE))

windows/winobject/process.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,11 +1168,16 @@ def create_thread(self, addr, param):
11681168
11691169
:rtype: :class:`WinThread` or :class:`DeadThread`
11701170
"""
1171+
# We are using NtCreateThreadEx as its more permissive about cross-bitness / cross-architecture
1172+
# And we can asume we known what we are doing -> So no safeguard ;)
1173+
thread_handle = HANDLE()
11711174
if windows.current_process.bitness == 32 and self.bitness == 64:
1172-
thread_handle = HANDLE()
1175+
if self._is_x86_on_arm64():
1176+
raise NotImplementedError("Crossing heaven gate x86 -> arm64 not implemented")
11731177
windows.syswow64.NtCreateThreadEx_32_to_64(ThreadHandle=byref(thread_handle) ,ProcessHandle=self.handle, lpStartAddress=addr, lpParameter=param)
1174-
return WinThread._from_handle(thread_handle.value)
1175-
return WinThread._from_handle(winproxy.CreateRemoteThread(hProcess=self.handle, lpStartAddress=addr, lpParameter=param))
1178+
else:
1179+
windows.winproxy.NtCreateThreadEx(ThreadHandle=byref(thread_handle) ,ProcessHandle=self.handle, lpStartAddress=addr, lpParameter=param)
1180+
return WinThread._from_handle(thread_handle.value)
11761181

11771182
def load_library(self, dll_path):
11781183
"""Load the library in remote process

windows/winproxy/apis/ntdll.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ def NtCreateProcessEx(ProcessHandle, DesiredAccess, ObjectAttributes=None, Paren
148148
return NtCreateProcessEx.ctypes_function(ProcessHandle, DesiredAccess, ObjectAttributes, ParentProcess, Flags, SectionHandle, DebugPort, ExceptionPort, InJob)
149149

150150
@NtdllProxy()
151-
def NtCreateThreadEx(ThreadHandle=None, DesiredAccess=0x1fffff, ObjectAttributes=0, ProcessHandle=NeededParameter, lpStartAddress=NeededParameter, lpParameter=NeededParameter, CreateSuspended=0, dwStackSize=0, Unknown1=0, Unknown2=0, Unknown=0):
151+
def NtCreateThreadEx(ThreadHandle=None, DesiredAccess=0x1fffff, ObjectAttributes=0, ProcessHandle=NeededParameter, lpStartAddress=NeededParameter, lpParameter=NeededParameter, CreateSuspended=0, dwStackSize=0, Unknown1=0, Unknown2=0, Unknown3=0):
152152
if ThreadHandle is None:
153153
ThreadHandle = ctypes.byref(gdef.HANDLE())
154154
return NtCreateThreadEx.ctypes_function(ThreadHandle, DesiredAccess, ObjectAttributes, ProcessHandle, lpStartAddress, lpParameter, CreateSuspended, dwStackSize, Unknown1, Unknown2, Unknown3)

0 commit comments

Comments
 (0)