使用 vTrace 附加到进程后,ResumeThread 不起作用

逆向工程 Python
2021-06-29 07:12:48

为了学习 vtrace,我一直在尝试附加到进程并挂钩导入地址表,然后恢复进程的主线程。当我不附加到进程 ResumeThread() 调用工作正常。但是当我这样做时,它会启动一个线程,然后对 ResumeThread() 的调用不起作用并且主线程永远不会运行。下面是代码...

from ctypes import *
from ctypes import wintypes
from defines import *
import vdb
import vtrace
import sys
from iathook import *

class PROCESS_INFORMATION(ctypes.Structure):
    _fields_ = [
            ("hProcess",    HANDLE),
            ("hThread",     HANDLE),
            ("dwProcessId", DWORD),
            ("dwThreadId",  DWORD),
            ]    

process_info    = PROCESS_INFORMATION()

kernel32 = ctypes.WinDLL('kernel32.dll')

bCreateProcessW = kernel32.CreateProcessA(
                                path_to_binary,
                                None,
                                None,
                                None,
                                True,
                                creation_flags,
                                None,
                                None,
                                byref(startupinfo),
                                byref(process_info))

#launched the process in a suspended state and patch it using DLL injection
#but this code doesn't effect the following code

apptrace = vtrace.getTrace()              
apptrace.attach(process_info.dwProcessId)     #1
hookSomeStuff = hookIat(apptrace, 'MSVCR110') #2
#apptrace.resumeThread(process_info.hThread)  #3
dwPrevSuspendCount = kernel32.ResumeThread(process_info.hThread)

正如我上面提到的,当我删除vtrace attachand 和hookIat东西时(第 1 行和第 2 行)。ResumeThread() 调用工作正常并且主线程运行。我还尝试使用 vtrace 方法(第 3 行)恢复线程,但它告诉我线程没有挂起。主线程实际上并没有运行,所以我想知道它为什么不能被挂起或发生了什么。我还使用 procmon 检查二进制文件的事件,当它附加时,它会启动另一个线程,这似乎把事情搞砸了。这可能看起来很尴尬,我知道还有很多其他方法可以做到这一点,但我将其用作学习练习,现在我很感兴趣为什么它不起作用。任何帮助表示赞赏,并在此先感谢您的帮助。

0个回答
没有发现任何回复~