世界太小 2014-08-17 13:34 采纳率: 0%
浏览 3832

MFC的DLL动态库,通过HOOk注入程序

写了一个MFC DLL动态库。
在mfc dll里面添加了对话框资源,并且添加一个对话框类CDlg。

可以通过SetWindowsHookEx注入到程序。
但是退出的时候,被注入程序总是崩溃。


dll注入程序
int DllLoad( HWND hWnd )
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

int nRet = -1;

dllHwnd = hWnd;

HWND hwnd = FindWindowA(NULL, "Lingoes 灵格斯");
if ( NULL == hwnd )
{
    MessageBoxA(NULL, "获取程序句柄失败", "xx", MB_OK);
    TRACE("获取程序句柄失败!");
    return -1;
}

DWORD pid = GetWindowThreadProcessId( hwnd, NULL );
if ( NULL == inHook )
{
    inHook = SetWindowsHookEx( WH_GETMESSAGE, GameProc, hInstDll, pid );
}
nRet = 0;
return nRet;

}


dll卸载程序
void DllUnLoad()
{

if ( NULL != inHook )
{
UnhookWindowsHookEx( inHook );
inHook = NULL;
}
}


注入处理函数
LRESULT CALLBACK GameProc(int nCode,WPARAM wParam, LPARAM lParam)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

PMSG pMsg = (PMSG)lParam;

if ( pMsg->message == WM_KEYUP )
{
    if ( pMsg->wParam == VK_HOME )
    {
        if ( NULL == pDlg )
        {
            CWnd *pCwnd = CWnd::GetForegroundWindow();
            pDlg = new CDlg();

            pDlg->Create( IDD_DLG, pCwnd);
            pDlg->ShowWindow(SW_SHOW);
        }
        else
        {
            if ( pDlg->IsWindowVisible() )
                pDlg->ShowWindow(FALSE);
            else
                pDlg->ShowWindow(TRUE);
        }
    }
}

return CallNextHookEx(0,nCode,wParam,lParam);

}


int CDlgDllApp::ExitInstance()
{
if ( NULL != pDlg )
{
//pDlg->DestroyWindow();
delete pDlg;
pDlg = NULL;
}
return CWinApp::ExitInstance();

}


在网上找了好多例子,都只是简单的调了个.doModel();
具体在钩子函数里面生成并显示一个对话框的例子太少,能找到的也试了下,都是能注入,但注入程序一关闭,被注入的程序也跟着关闭了。还有一个大大的提示求解答。


Debug Assertion Failed!
File:f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp line:1019

跟进去后发现:
if (m_hWnd != NULL)
{
pMap = afxMapHWND();
ENSURE(pMap != NULL);
pWnd = (CWnd*)pMap->LookupPermanent(m_hWnd);
}

求各位给个提示,如果注入后不调出对话框,直接退出,被注入程序能运行,只要调用对话框资源后,就不行了。

  • 写回答

3条回答

  • oyljerry 2015-01-17 15:53
    关注

    你推出的时候有没有先释放对话框。

    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB动图问题
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题