想写一个内存注册机,测试一下,结果问题种种
DWORDOnBreakPoint::DebugDealRoutine(DEBUG_EVENT *pdebugevent, CONTEXT *pContext)
{
DWORD dwContinueStatus = DBG_EXCEPTION_NOT_HANDLED;
EXCEPTION_DEBUG_INFO* lpExceptionInfo = &pdebugevent->u.Exception;
HANDLE hProcess = NULL;
if((DWORD)lpExceptionInfo->ExceptionRecord.ExceptionAddress == MyDbg::m_BreakPointInfo.dwAddr)
{
HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, pdebugevent->dwProcessId);
if (hProcess != NULL)
{
DWORD dwReadBytes = 0;
//恢复原数据
BOOL Nr = WriteProcessMemory(hProcess, (PVOID) MyDbg::m_BreakPointInfo.dwAddr, &MyDbg::m_BreakPointInfo.chOrdCode, 1, &dwReadBytes);
//假设注册码在EDX中。。。。。。。。
CHAR SZBUF = {0};
CString STR;
DWORD dwRead = 0;
ReadProcessMemory(hProcess, (char*)pContext->Edx, SZBUF, 1024, &dwRead);
AfxMessageBox(SZBUF);
hProcess = NULL;
CloseHandle(hProcess);
return DBG_CONTINUE;
}
}
CloseHandle(hProcess);
hProcess = NULL;
return DBG_EXCEPTION_NOT_HANDLED;
}
写的时候,有点测试代码,假设注册码在目标地址下断点后的EDX寄存器中,结果目标程序退出,自己死循环。。。。。。。。。。。。。。。。。。
抢个沙发,表示看不懂写点什么{:lol:} 厉害,高手。刘健英的级别 Mark ... 不是调试模式打开进程,写个cc,捕捉异常,然后恢复么? zaas 发表于 2014-6-9 19:09
不是调试模式打开进程,写个cc,捕捉异常,然后恢复么?
是的,这些都对了,数据也拿到了,就是运行之后出错了
komany 发表于 2014-6-9 19:18
是的,这些都对了,数据也拿到了,就是运行之后出错了
没改eip吧~~CC之后eip是多少捏~~
不好意思,暂时还没有弄明白,留个脚印慢慢来学 都是大牛。小菜膜拜也。 不动 坐看其它大牛的见解
页:
[1]
2