需要的组件:
1.EXE程序
2.DLL模块
1)EXE程序将DLL注入目标进程
2)DLL中使用窗口过程,新的窗口过程也在DLL中
eg.
WNDPROC WndProc;
LRESULT CALLBACK WndProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CHAR:
if (wParam >= 48 && wParam <= 57)
{
//return 1;
}
//else
{
//::MessageBox(0, "WM_KEYDOWN", _T(""), MB_ICONINFORMATION);
// ::PostThreadMessage(dwCtrlThreadId, WM_USER + 101, wParam, lParam);
}
break;
default:
break;
}
// return TRUE;表示已经处理,不希望再被传递
return ::CallWindowProc(WndProc, hWnd, message, wParam, lParam);
}
DWORD WINAPI ThreadProc(LPVOID lpParamter)
{
HWND hwnd = reinterpret_cast<HWND>(0x100352);
// WndProc = reinterpret_cast<WNDPROC>(GetWindowLong(hwnd, GWL_WNDPROC));
long ret = SetWindowLong(hwnd, GWL_WNDPROC, (long)WndProc2);
assert(ret != 0);
return 0;
}
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
::CreateThread(NULL,0, ThreadProc, NULL,0,NULL);
break;
}
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
VC修改第三方进程窗口过程
最新推荐文章于 2022-04-18 14:34:28 发布