我用钩子注入的练习 下面是我写的三个文件
DLL.dll被注入的目标.exe安装钩子.exe钩子类型: WH_GETMESSAGE 现在的问题是 我安装钩子后 点击下面按钮
void CEXEDlg::OnBtnPost_Message()
{ HWND hwnd = ::FindWindow(NULL,"被注入的目标");
if( hwnd == 0 )
AfxMessageBox("error");
else{
::PostMessage(hwnd,WM_KEYDOWN,72,0);//72是h的键值
}
}下面是钩子过程
extern "C" LRESULT CALLBACK keybordProc( int code, WPARAM wparam, LPARAM lparam )
{
if ( code == HC_ACTION )
{
MSG *msg = (MSG*)lparam;
if ( msg->message == WM_CHAR )
{
if ( msg->wParam == 'h')
{
afxMessageBox("华丽地弹出");
}
}
}
return CallNextHookEx( g_hHook, code, wparam, lparam );
}会弹好几次 华丽地弹出 这是问题一!!!!!!!!!!!!!!!!!!!!问题二:: 我把 安装钩子.exe 关了 DLL.dll也从 被注入的目标.exe 中消失了
那怎么样才可以 关了安装钩子.exe DLL.dll 还是在 被注入的目标.exe 的程序中呢~
DLL.dll被注入的目标.exe安装钩子.exe钩子类型: WH_GETMESSAGE 现在的问题是 我安装钩子后 点击下面按钮
void CEXEDlg::OnBtnPost_Message()
{ HWND hwnd = ::FindWindow(NULL,"被注入的目标");
if( hwnd == 0 )
AfxMessageBox("error");
else{
::PostMessage(hwnd,WM_KEYDOWN,72,0);//72是h的键值
}
}下面是钩子过程
extern "C" LRESULT CALLBACK keybordProc( int code, WPARAM wparam, LPARAM lparam )
{
if ( code == HC_ACTION )
{
MSG *msg = (MSG*)lparam;
if ( msg->message == WM_CHAR )
{
if ( msg->wParam == 'h')
{
afxMessageBox("华丽地弹出");
}
}
}
return CallNextHookEx( g_hHook, code, wparam, lparam );
}会弹好几次 华丽地弹出 这是问题一!!!!!!!!!!!!!!!!!!!!问题二:: 我把 安装钩子.exe 关了 DLL.dll也从 被注入的目标.exe 中消失了
那怎么样才可以 关了安装钩子.exe DLL.dll 还是在 被注入的目标.exe 的程序中呢~
{
// TODO: Add your control notification handler code here
HWND hWnd = ::FindWindow(NULL,"Target");
if( hWnd == 0 ){
AfxMessageBox("error");
}
else{
DWORD dwThreadID = GetWindowThreadProcessId(hWnd,NULL);
StartHook( dwThreadID );//打开钩子
}
}extern "C" BOOL WINAPI StartHook( DWORD dwThreadID )
{
g_hHook = SetWindowsHookEx( WH_GETMESSAGE, keybordProc, g_hInstance, dwThreadID );
if ( g_hHook != NULL)
{
return TRUE;
}
else
{
return FALSE;
}
}
那怎么样才可以 关了安装钩子.exe DLL.dll 还是在 被注入的目标.exe 的程序中呢~
=========
问题不清楚,但是问题二这样是正常的,安装钩子的程序退出了,钩子也就退出了.
你可以上百度搜“汪普振”这个名字,有一篇文章写的“远程线程注入技术的研究与实现”