当前位置:首页 > 教育 > 正文

DLL注入并显示窗口(转)

要实现DLL注入并显示窗口有一非常关键的问题就是通过远程线程注入DLL后,注入线程会成功后退出,如果在这时你做了CreateDialog那这个窗口是一闪而过的。(如果你装了HOOK,他也将是失败的。此时要解决这问题就是在不影响消息循环的情况下停住线程。这时我们想到了用消息循环while(GetMessage...){Dispatch...},或在这个线程上做.DoModal()。网上有人这么实现了。这里单开线程。如果是模态的对不用再建立隐藏窗口了。非模态就要再新的线程中开个隐藏窗口进行DOMODULE()。
void ShowDialog(CTemp *pDlg)
{
//pDlg->ShowWindow(SW_HIDE);
// hWndDlg = CreateDialog(theApp.m_hInstance,MAKEINTRESOURCE(IDD_MAIN),NULL,DlgProc); // 这是做非模态对话框用的。这种情况如果不加处理窗口是显示不出来的。
// hWnd = CWnd::FromHandle(hWndDlg);
// hWnd->ShowWindow(SW_NORMAL);
CMainDlg* dlg = new CMainDlg;
hWnd =CWnd::FromHandle(dlg->m_hWnd);
SetWindowHook();
dlg->DoModal();//用这种模态的就用隐藏窗口进行DOMODAL()了,当建立非模态时下面的是必要的。
UnhookWindowHook();

}
BOOL CToolApp::InitInstance()
{
CWinApp::InitInstance();
CTemp* pDlg=new CTemp;
::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ShowDialog,(LPVOID)pDlg,NULL,NULL);
return TRUE;
}

你可能想看:

有话要说...

取消
扫码支持 支付码