gpt4 book ai didi

Python:kernel32.CreateProcessA() 它在做什么?

转载 作者:太空宇宙 更新时间:2023-11-03 13:20:34 25 4
gpt4 key购买 nike

我目前正在学习调试器以及它们如何停止进程。

这是我的代码:

    from ctypes import *
WORD = c_ushort
DWORD = c_ulong
LPBYTE = POINTER(c_ubyte)
LPTSTR = POINTER(c_char)
HANDLE = c_void_p
DEBUG_PROCESS = 0x00000001
CREATE_NEW_CONSOLE = 0x00000010
class STARTUPINFO(Structure):
_fields_ = [
("cb", DWORD),
("lpReserved", LPTSTR),
("lpDesktop", LPTSTR),
("lpTitle", LPTSTR),
("dwX", DWORD),
("dwY", DWORD),
("dwXSize", DWORD),
("dwYSize", DWORD),
("dwXCountChars", DWORD),
("dwYCountChars", DWORD),
("dwFillAttribute",DWORD),
("dwFlags", DWORD),
("wShowWindow", WORD),
("cbReserved2", WORD),
("lpReserved2", LPBYTE),
("hStdInput", HANDLE),
("hStdOutput", HANDLE),
("hStdError", HANDLE),
]
class PROCESS_INFORMATION(Structure):
_fields_ = [
("hProcess", HANDLE),
("hThread", HANDLE),
("dwProcessId", DWORD),
("dwThreadId", DWORD),
]


kernel32 = windll.kernel32
class debugger():
def __init__(self):
pass

def load(path_to_exe):
creation_flags = DEBUG_PROCESS
startupinfo = STARTUPINFO()
processinfo = PROCESS_INFORMATION()
startupinfo.dwFlags = 0x1
startupinfo.wShowWindow = 0x0
startupinfo.cb = sizeof(startupinfo)
if kernel32.CreateProcessA(path_to_exe,None,None,None,None,creation_flags,None,None,byref(startupinfo),byref(processinfo)):
print("[*] Process launched")
print("[*] PID: %d" % (PROCESS_INFORMATION.dwProcessId))
else:
print("[*] Error: 0x%08x." % (kernel32.GetLastError()))

debugger.load("C:\\WINDOWS\\system32\\calc.exe")

每当我运行它时,它都会出错。 :( 我发现它出现该错误的原因是因为 kernel32.CreateProcessA 返回 false。我现在实际上正在关注 Gray hat python,并且我在阅读时将此代码转换为 python 3

我的问题是,kernel32.CreateProcessA 在做什么,为什么它返回 false,我怎样才能防止它返回 false?

如有任何帮助,我们将不胜感激!

最佳答案

您的代码中有几个错误:

第一个错误是debugger类的load方法定义错误。在您的情况下,最有可能应该是静态方法:

# . . .

# This decorator required to make method static
@staticmethod
def load(path_to_exe):
creation_flags = DEBUG_PROCESS
startupinfo = STARTUPINFO()
processinfo = PROCESS_INFORMATION()
startupinfo.dwFlags = 0x1

# . . .

第二个错误是在 print 如果创建了进程:

if kernel32.CreateProcessA(path_to_exe,None,None,None,None,
creation_flags,None,None,
byref(startupinfo),byref(processinfo)):
print("[*] Process launched")

# ERROR AT THE LINE BELOW
# Your variant: print("[*] PID: %d" % (PROCESS_INFORMATION.dwProcessId))
# But it should be the structure itself not it "type"
print("[*] PID: %d" % (processinfo.dwProcessId))
else:
print("[*] Error: 0x%08x." % (kernel32.GetLastError()))

在我的例子中它是有效的 (Windows XP)。如果您的流程没有真正开始,并且您在控制台中收到类似这样的消息:

[*] Error: 0x00000002

那么如果你使用 Python 3.x,你不应该使用 CreateProcessA 而应该使用 CreateProcessW 函数,因为 Python 3.x 中的所有字符串都是 unicode(在 WinAPI 中所有函数结束以 'A' 接受 asci-strings,以 'W' 结尾接受 unicode-strings)。如果您写下您的案例中发生了什么错误或异常,则可以更准确地回答。

关于Python:kernel32.CreateProcessA() 它在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15172093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com