0

我正在使用 Deviare 用户模式挂钩引擎在 python 中的 COM 上编写应用程序。我要挂钩的函数之一是 CreateProcessA,但我似乎无法将适当的指针从挂钩函数传递给 ctypes kernel32.CreateProcess 调用。我的目标是停止对 CreateProcess 的合法调用,并在暂停状态下重新创建它。

如果需要,函数参数的 Deviare 文档在这里:Deviare - 参数

此外,用于创建进程的 MSDN: kernel32.CreateProcessA

下面是我的 ctypes 调用,在此之前我没有实例化任何东西或使用“args”设置函数定义,在这种情况下是否有必要?

'parameters' 是 Deviare 中的一个对象,包含传递给挂钩函数 (CreateProcessA) 的函数参数

retval = ctypes.windll.kernel32.CreateProcessA(
ctypes.wintypes.LPCWSTR(parameters.GetAt(0).Value),
ctypes.wintypes.LPCWSTR(parameters.GetAt(1).Value),
ctypes.c_ulong(parameters.GetAt(2).PointerVal),
ctypes.c_ulong(parameters.GetAt(3).PointerVal),
ctypes.wintypes.BOOL(parameters.GetAt(4).Value),
ctypes.wintypes.DWORD(0x4),
ctypes.wintypes.LPVOID(parameters.GetAt(6).PointerVal),
ctypes.wintypes.LPCWSTR(parameters.GetAt(7).Value),
ctypes.cast(parameters.GetAt(8).PointerVal, ctypes.POINTER(ctypes.c_ulong)),
ctypes.cast(parameters.GetAt(9).PointerVal, ctypes.POINTER(ctypes.c_ulong)))

我的错误和一些有用的/键入的参数被传递给新的 CreateProcess 调用:

lpApplicationName | LPCSTR | "" 
lpCommandLine | LPSTR | "python C:\Users\user\PycharmProjects\testing\API_tests_2.py" 
lpProcessAttributes | LPSECURITY_ATTRIBUTES | N/A 
lpThreadAttributes | LPSECURITY_ATTRIBUTES | N/A 
bInheritHandles | BOOL | 1 
dwCreationFlags | DWORD | 0 
lpEnvironment | LPVOID | N/A
lpCurrentDirectory | LPCSTR | "" 
lpStartupInfo | LPSTARTUPINFOA | 0x33eb90 
lpProcessInformation | LPPROCESS_INFORMATION | 0x33eb60 

File "C:\Users\user\PycharmProjects\testing\EventHandlers.py", line 299, in OnFunctionCalled
    ctypes.POINTER(ctypes.c_ulong)))
WindowsError: exception: access violation reading 0x000000000033EBF0

有时访问冲突的位置在 lpstartupinfo 的开头,有时在它的中间。我不确定为什么,除非我的环境中有其他问题。

我已经确认 LPSTARTUPINFO 和 LPPROCESS_INFORMATION 的位置在调试器中是正确的。

4

0 回答 0