首页
社区
课程
招聘
[求助]学习WaitForDebugEvent系列遇到些问题,求教
发表于: 2010-11-4 12:05 7462

[求助]学习WaitForDebugEvent系列遇到些问题,求教

2010-11-4 12:05
7462
无壳进程用DEBUG_ONLY_THIS_PROCESS参数创建以后,进入WaitForDebugEvent循环,现在想在某一个断点事件以后,像VC那样分离调试状态,是调用哪个API?搜了半天没搜到,是否要先ContinueDebugEvent以后再分离?如果分离的瞬间有调试事件生成,是否会导致被调试进程挂起呢?
另外还有一个问题,对于EXCEPTION_DEBUG_EVENT类型的事件,ContinueDebugEvent的时候参数要填什么才可以使异常传递给程序解决?是DBG_EXCEPTION_NOT_HANDLED吗?
为什么下面这种写法连notepad都不能调试运行起来?
	DEBUG_EVENT devent;
	while(1)            
	{   
		if (WaitForDebugEvent(&devent, INFINITE)) 		{   
			switch (devent.dwDebugEventCode)   
			{   
			case EXCEPTION_DEBUG_EVENT:                        
				ContinueDebugEvent(devent.dwProcessId , devent.dwThreadId , DBG_EXCEPTION_NOT_HANDLED); 
				break;
			case EXIT_PROCESS_DEBUG_EVENT:
				ContinueDebugEvent(devent.dwProcessId , devent.dwThreadId , DBG_CONTINUE);
				__asm int 3
				break;
			default:
				ContinueDebugEvent(devent.dwProcessId , devent.dwThreadId , DBG_CONTINUE);  
				break;
			}
		}   
		else  
		{   
			// 其他一些操作
			//break;
		}   
	} 

很快就会运行到int 3,求教,谢谢!

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
测试出来了,分离是要调用DebugActiveProcessStop。
另外对于EXCEPTION_DEBUG_EVENT,如果ExceptionCode是EXCEPTION_BREAKPOINT的话,是要传递DBG_CONTINUE的(进程创建出来就会有一次EXCEPTION_BREAKPOINT断下,并非自己改int3直接传DBG_CONTINUE),其他类型的异常传递给程序运行的话是DBG_EXCEPTION_NOT_HANDLED。
这样就搞定了。。。
2010-11-4 13:44
0
雪    币: 359
活跃值: (41)
能力值: ( 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过的情况下,本身就是不可能成功附加运行的。
2010-11-4 22:58
0
游客
登录 | 注册 方可回帖
返回
//