GetWindowTextRemote.c
上传用户:yyuan_1106
上传日期:2022-03-31
资源大小:114k
文件大小:2k
源码类别:

钩子与API截获

开发平台:

Visual C++

  1. #include <windows.h>
  2. //-------------------------------------------------------
  3. // 共享数据区
  4. // 共享数据区中的数据在DLL被映射的进程中都是共享的
  5. //-------------------------------------------------------
  6. #pragma data_seg (".shared")
  7. HWND g_hWnd = 0;                        //要读取的编辑框控件句柄
  8. HHOOK g_hHook = 0;                        //HOOK句柄
  9. UINT WM_HOOKSPY = 0;                     //自定义消息,通知远程进程读取编辑框控件的内容
  10. char g_szPassword [256] = { '' };      //保存编辑框控件的缓存区
  11. #pragma data_seg ()
  12. #pragma comment(linker,"/SECTION:.shared,RWS") 
  13. HINSTANCE hDll;
  14. BOOL WINAPI APIENTRY DllMain(HINSTANCE hinstDll, 
  15.                        DWORD  reason_for_call, 
  16.                        LPVOID lpReserved
  17.  )
  18. {
  19. hDll = hinstDll;
  20.     return TRUE;
  21. }
  22. //-------------------------------------------------------
  23. // HookProc
  24. // 由远程进程执行
  25. //
  26. #define pCW ((CWPSTRUCT*)lParam)
  27. LRESULT HookProc (
  28.   int code,       // hook code
  29.   WPARAM wParam,  // virtual-key code
  30.   LPARAM lParam   // keystroke-message information
  31. )
  32. {
  33. if( pCW->message == WM_HOOKSPY ) {
  34. MessageBeep(MB_OK);
  35. SendMessage( g_hWnd,WM_GETTEXT,128,(LPARAM)g_szPassword );
  36. UnhookWindowsHookEx(g_hHook );
  37. }
  38. return CallNextHookEx(g_hHook, code, wParam, lParam);
  39. }
  40. //-------------------------------------------------------
  41. // GetWindowTextRemote
  42. // 插入本DLL到远程进程
  43. // 从远程编辑框控件中获取密码
  44. //
  45. // 返回值:读取到的密码字符数
  46. //
  47. __declspec(dllexport) int GetWindowTextRemote(HWND hWnd, LPSTR lpString)
  48. {
  49. g_hWnd = hWnd;
  50. g_hHook = SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)HookProc,
  51. hDll, GetWindowThreadProcessId(hWnd,NULL) );
  52. if( g_hHook==NULL ) {
  53. lpString[0] = '';
  54. return 0;
  55. }
  56. if (WM_HOOKSPY == 0)
  57. WM_HOOKSPY = RegisterWindowMessage( "WM_HOOKSPY_RK" );
  58. // 向远程进程发送读取消息,触发其读取密码
  59. SendMessage( hWnd,WM_HOOKSPY,0,0 );
  60. strcpy( lpString,g_szPassword );
  61. return strlen(lpString);
  62. }