能力值:
( LV3,RANK:20 )
|
-
-
2 楼
测试出来了,分离是要调用DebugActiveProcessStop。
另外对于EXCEPTION_DEBUG_EVENT,如果ExceptionCode是EXCEPTION_BREAKPOINT的话,是要传递DBG_CONTINUE的(进程创建出来就会有一次EXCEPTION_BREAKPOINT断下,并非自己改int3直接传DBG_CONTINUE),其他类型的异常传递给程序运行的话是DBG_EXCEPTION_NOT_HANDLED。
这样就搞定了。。。
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
再次遇到一个问题,如果进程是用DebugActiveProcess附加过去的,不知道为什么EXCEPTION_DEBUG_EVENT会收到0xC0000142也就是STATUS_DLL_INIT_FAILED,然后进程就挂了。
---------------------------------------------------------------------
如果被调试进程是用CREATE_SUSPENDED创建的,并且没有被ResumeThread过,用DebugActiveProcess就会收到0xC0000142的异常,否则就可以正常附加。
---------------------------------------------------------------------
试了下CREATE_SUSPENDED的进程用OD附加,调试了下,发现IAT表加载的有问题,比如GetModuleHandleA的地址错误地偏移了0x10个字节,某些导入函数地址正确而某些则错误,根本就不可能正常运行起来。可能CREATE_SUSPENDED的进程在没有ResumeThread过的情况下,本身就是不可能成功附加运行的。
|
|
|