内存中的Python运行EXE

时间:2019-01-03 22:12:11

标签: python memory-management exe

我正在尝试在python的内存中执行.exe 但不起作用... 有帮助吗?

错误:进程以退出代码-1073741819(0xC0000005)完成。 python中只有一个.exe可以工作..(从python转换为exe)

此函数通过参数传递代码...它是一个字节数组

 def executar(code):
    ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(code)), ctypes.c_int(0x3000), ctypes.c_int(0x40))
    buf = (ctypes.c_char * len(code)).from_buffer(code)
    ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(ptr), buf, ctypes.c_int(len(code)))
    ht = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0), ctypes.c_int(0), ctypes.c_int(ptr), ctypes.c_int(0), ctypes.c_int(0), ctypes.pointer(ctypes.c_int(0)))
    ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(ht), ctypes.c_int(-1))

我正在尝试几个.exe文件...。 我在这里喜欢这篇文章: https://medium.com/@AntiSec_Inc/combining-the-power-of-python-and-assembly-a4cf424be01d

 def downloadandExecute(url): 
     response = requests.get(url) 
     code = bytearray(response.content) 
     executar(code)

但错误仍然存​​在

1 个答案:

答案 0 :(得分:2)

我认为代码是正确的(未经测试),但是问题是您试图将以大量元数据开头的exe文件传递给需要纯代码的函数。您链接的示例使用的是直接的二进制代码,该代码无需任何转换即可执行。它们只是指令流。

要加载真实的exe(PE)文件,您需要做更多的工作-解析标头,加载所需的库,准备堆/堆栈,准备其他节和映射等。

您可以在https://msdn.microsoft.com/en-au/library/ms809762.aspx

上了解有关PE格式的更多信息。