diff --git a/windows/native_exec/simple_x86.py b/windows/native_exec/simple_x86.py index 1060c57..235f4a3 100644 --- a/windows/native_exec/simple_x86.py +++ b/windows/native_exec/simple_x86.py @@ -275,6 +275,12 @@ def accept_as_16immediat(x): raise ImmediatOverflow("16bits signed Immediat overflow") +def accept_as_unsigned_16immediat(x): + try: + return struct.pack(" ret | 8 -> ljump - size_to_alloc = len(shellcode) + len(genere_return_32bits_stub(0xffffffff)) + 1 + 8 - addr = windows.current_process.allocator.reserve_size(size_to_alloc) - # post-exec 32bits stub (xor eax, eax; ret) - ret = "\xC3" - ret_addr = addr - shell_code_addr = ret_addr + len(ret) + len(dummy_jump) - # ljmp - jump = "\xea" + struct.pack("".format(i, type(value).__name__)) writable_args.append(value) - # Build buffer buffer = struct.pack("<" + "Q" * len(writable_args), *writable_args) ctypes.memmove(argument_buffer, buffer, len(buffer)) - # TODO : get 64bits returned value ? return native_caller() wrapper.__name__ = "{0}".format(target.__name__,) wrapper.__doc__ = "This is a wrapper to {0} in 64b mode, it accept <{1}> args".format(target.__name__, expected_arguments_number) @@ -173,8 +151,8 @@ def try_generate_stub_target(shellcode, argument_buffer, target): def get_current_process_syswow_peb_addr(): - get_peb_64_code = x64.Mov('RAX', x64.mem('gs:[0x60]')) - return execute_64bits_code_from_syswow(get_peb_64_code.get_code()) + get_peb_64_code = x64.assemble("mov rax, gs:[0x60]; ret") + return execute_64bits_code_from_syswow(get_peb_64_code) def get_current_process_syswow_peb(): current_process = windows.current_process