聚热点 juredian

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;

}

搜索建议:DLL注入并显示窗口