komany 发表于 2014-6-9 14:36:41

想写一个内存注册机,测试一下,结果问题种种





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寄存器中,结果目标程序退出,自己死循环。。。。。。。。。。。。。。。。。。

醉月清风 发表于 2014-6-9 15:53:42

抢个沙发,表示看不懂写点什么{:lol:}

1552759476@ 发表于 2014-6-9 17:20:39

厉害,高手。刘健英的级别

Nisy 发表于 2014-6-9 18:41:47

Mark ...

zaas 发表于 2014-6-9 19:09:48

不是调试模式打开进程,写个cc,捕捉异常,然后恢复么?

komany 发表于 2014-6-9 19:18:09

zaas 发表于 2014-6-9 19:09
不是调试模式打开进程,写个cc,捕捉异常,然后恢复么?

是的,这些都对了,数据也拿到了,就是运行之后出错了

zaas 发表于 2014-6-9 19:22:29

komany 发表于 2014-6-9 19:18
是的,这些都对了,数据也拿到了,就是运行之后出错了

没改eip吧~~CC之后eip是多少捏~~

ecjtu 发表于 2014-6-9 20:33:21

不好意思,暂时还没有弄明白,留个脚印慢慢来学

ochchina 发表于 2014-6-9 20:33:43

都是大牛。小菜膜拜也。

kingone 发表于 2014-6-9 21:51:20

不动 坐看其它大牛的见解
页: [1] 2
查看完整版本: 想写一个内存注册机,测试一下,结果问题种种