HookAPI.cpp
上传用户:nbcables
上传日期:2007-01-11
资源大小:1243k
文件大小:3k
源码类别:

钩子与API截获

开发平台:

Visual C++

  1. // ------------------------------------- //
  2. // 您如果要使用本文件,请不要删除本说明  //
  3. // ------------------------------------- //
  4. //             HOOKAPI v1.4              //
  5. //   Copyright 2002 编程沙龙 Paladin     //
  6. //       www.ProgramSalon.com            //
  7. // ------------------------------------- //
  8. #include <windows.h>
  9. #include "resource.h"
  10. #define MsgBox(msg) MessageBox(NULL, msg, "HookAPI - www.programsalon.com", MB_OK)
  11. BOOL CALLBACK MainDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
  12. typedef int (WINAPI *FuncHookOneProcess2)(HWND hwndNotify, char *exe_name);
  13. typedef int (WINAPI *FuncUnhookOneProcess2)(char *exe_name);
  14. typedef int (WINAPI *FuncHookAllProcess)();
  15. typedef int (WINAPI *FuncUnhookAllProcess)();
  16. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  17. {
  18. WriteProfileString("HookAPI", "exe_name", "HookAPI.exe");
  19. int isNT =false;
  20. OSVERSIONINFO VersionInfo;
  21. VersionInfo.dwOSVersionInfoSize =sizeof(OSVERSIONINFO);
  22. if(!GetVersionEx(&VersionInfo))
  23. return false;
  24. if(VersionInfo.dwPlatformId ==VER_PLATFORM_WIN32_NT)
  25. isNT =true;
  26. HINSTANCE hLib;
  27. if(isNT)
  28. hLib =LoadLibrary("HookAPINT.dll");
  29. else
  30. hLib =LoadLibrary("HookAPI9x.dll");
  31. if(hLib ==NULL)
  32. {
  33. MessageBox(NULL, "LoadLibrary HookAPIxx.dll failed", "HookAPI.exe", MB_OK);
  34. return false;
  35. }
  36. FuncHookOneProcess2 HookOneProcess2 =(FuncHookOneProcess2)GetProcAddress(hLib, "HookOneProcess2");
  37. FuncUnhookOneProcess2 UnhookOneProcess2 =(FuncUnhookOneProcess2)GetProcAddress(hLib, "UnhookOneProcess2");
  38. FuncHookAllProcess HookAllProcess =(FuncHookAllProcess)GetProcAddress(hLib, "HookAllProcess");
  39. FuncUnhookAllProcess UnhookAllProcess =(FuncUnhookAllProcess)GetProcAddress(hLib, "UnhookAllProcess");
  40. if(HookAllProcess ==NULL)
  41. {
  42. MsgBox("HookAllProcess ==NULL");
  43. FreeLibrary(hLib);
  44. return 0;
  45. }
  46. if(UnhookAllProcess ==NULL)
  47. {
  48. MsgBox("UnhookAllProcess ==NULL");
  49. FreeLibrary(hLib);
  50. return 0;
  51. }
  52. if(HookAllProcess() <0)
  53. {
  54. MsgBox("HookAllProcesses error!");
  55. UnhookAllProcess();
  56. FreeLibrary(hLib);
  57. return 0;
  58. }
  59. // 测试只Hook一个正在运行的程序,下面的函数已经在1.6版本中取消,但还是很有用,所以以后版本中还是会提供
  60. /*
  61. if(HookOneProcess2(NULL, "ship.exe") <0)
  62. {
  63. MsgBox("HookOneProcess failed!");
  64. return  0;
  65. }
  66. */
  67. /// HookAllProcesses2是针对无法截获按Ctrl-Alt_Del键时运行的任务管理器等程序的情况使用的。
  68. /*if(HookAllProcesses2(1000) <0)
  69. {
  70. MsgBox("HookAllProcesses error!");
  71. return 0;
  72. }*/
  73. /*char temp[200], temp2[20], temp3[256];
  74. char *p =(char *)0x7FCEDCF1;//(char *)funcSHFileOperationA;
  75. wsprintf(temp, "func:%x", p);
  76. wsprintf(temp2, "%x,%x,%x,%x", *p&0xFF, *(p+1)&0xFF, *(p+2), *(p+3), *(p+4));
  77. wsprintf(temp3, "[%s], %s", temp, temp2);
  78. MessageBox(NULL, temp3, "ok", MB_OK);*/
  79. DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, MainDlgProc);
  80. UnhookAllProcess();
  81. FreeLibrary(hLib);
  82. return 0;
  83. }
  84. BOOL CALLBACK MainDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
  85. {
  86. switch(msg)
  87. {
  88. case WM_COMMAND:
  89. switch(LOWORD(wParam))
  90. {
  91. case IDOK:
  92. EndDialog(hDlg, IDOK);
  93. break;
  94. case ID_HIDE:
  95. ShowWindow(hDlg, SW_HIDE);
  96. break;
  97. }
  98. default:
  99. break;
  100. }
  101. return FALSE;
  102. }