DetourQQ.cpp
上传用户:qc13828
上传日期:2007-06-21
资源大小:63k
文件大小:5k
源码类别:

ICQ弱点检测代码

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. // 预处理
  3. #include "Define.h"
  4. #include <Windows.h>
  5. #include "AboutDlg.h"
  6. #include "CodeAtom.h"
  7. #include "Resource.h"
  8. #pragma warning(disable:4244)
  9. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  10. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  11. // 补丁数据
  12. /*
  13. 00405D9C  |.  50            PUSH EAX
  14. 00405D9D  |.  51            PUSH ECX
  15. 00405D9E  |.  53            PUSH EBX
  16. 00405D9F  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]
  17. 00405DA2  |.  52            PUSH EDX
  18. 00405DA3  |.  FF57 20       CALL DWORD PTR DS:[EDI+20]
  19. 00405DA6      85C0          TEST EAX,EAX
  20. 00405DA8  |.  5F            POP EDI
  21. 00405DA9  |.  0F84 99000000 JE QQ.00405E48*/
  22. #define STR_LoginStamp "x50x51x53xFFx75x3Fx52xFFx57x3Fx85xC0x5Fx0Fx84"
  23. #define STR_LoginPatch "x3Fx3Fx3Fx3Fx3Fx3Fx3Fx3Fx3Fx3Fx33x3Fx3Fx3Fx3F"
  24. CODEATOM caPatch[] = 
  25. {
  26. {0x00400000, 0x000A0000, sizeof(STR_LoginStamp) - 1, STR_LoginStamp, STR_LoginPatch},
  27. };
  28. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  29. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  30. // 命令处理
  31. VOID OnCommand(HWND hWnd, WPARAM wParam)
  32. {
  33. OPENFILENAME ofnFile;
  34. TCHAR tzPath[MAX_PATH];
  35. switch (LOWORD(wParam))
  36. {
  37. case IDC_Path:
  38. // 路径文本改变
  39. if (HIWORD(wParam) == EN_CHANGE)
  40. {
  41. EnableWindow(GetDlgItem(hWnd, IDOK), (BOOL) SendDlgItemMessage(hWnd, IDC_Path, WM_GETTEXTLENGTH, 0, 0));
  42. }
  43. break;
  44. case IDC_Browse:
  45. // 浏览获取文件名
  46. tzPath[0] = 0;
  47. ZeroMemory(&ofnFile, sizeof(OPENFILENAME));
  48. ofnFile.lStructSize = sizeof(OPENFILENAME);
  49. ofnFile.hwndOwner = hWnd;
  50. ofnFile.lpstrFile = tzPath;
  51. ofnFile.nMaxFile = MAX_PATH;
  52. ofnFile.lpstrFilter = STR_Filter;
  53. ofnFile.lpstrDefExt = STR_Exe;
  54. ofnFile.Flags = OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
  55. if (GetOpenFileName(&ofnFile))
  56. {
  57. SetDlgItemText(hWnd, IDC_Path, tzPath);
  58. }
  59. break;
  60. case IDC_About:
  61. // 显示关于对话框
  62. CAboutDlg::Show(hWnd);
  63. break;
  64. case IDOK:
  65. // 执行
  66. GetDlgItemText(hWnd, IDC_Path, tzPath, MAX_PATH);
  67. if (CCodeAtom::Execute(tzPath, caPatch, _NumberOf(caPatch)))
  68. {
  69. MessageBox(hWnd, STR_Sucess, STR_AppName, MB_ICONINFORMATION | MB_TOPMOST);
  70. }
  71. else
  72. {
  73. if (MessageBox(hWnd, STR_Failure, STR_AppName, MB_ICONQUESTION | MB_TOPMOST | MB_YESNO) == IDYES)
  74. {
  75. ShellExecute(NULL, NULL, STR_WebUrl, NULL, NULL, SW_NORMAL);
  76. }
  77. }
  78. break;
  79. case IDCANCEL:
  80. // 退出
  81. EndDialog(hWnd, 0);
  82. break;
  83. }
  84. }
  85. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  86. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  87. // 初始化对话框
  88. VOID OnInitDialog(HWND hWnd)
  89. {
  90. HKEY hKey;
  91. DWORD dwLength;
  92. TCHAR tzPath[MAX_PATH];
  93. // 设置图标
  94. SetClassLongPtr(hWnd, GCL_HICON, (LONG_PTR) LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_Main)));
  95. // 搜索路径
  96. tzPath[0] = 0;
  97. if (SearchPath(NULL, STR_ExeName, NULL, MAX_PATH, tzPath, NULL) == 0)
  98. {
  99. // 查询注册表中的路径
  100. if (RegOpenKey(HKEY_LOCAL_MACHINE, STR_SubKey, &hKey) == 0)
  101. {
  102. dwLength = sizeof(tzPath);
  103. RegQueryValueEx(hKey, STR_Install, NULL, NULL, (PBYTE) tzPath, &dwLength);
  104. RegCloseKey(hKey);
  105. }
  106. SearchPath(tzPath, STR_ExeName, NULL, MAX_PATH, tzPath, NULL);
  107. }
  108. // 设置路径
  109. if (tzPath[0])
  110. {
  111. SetDlgItemText(hWnd, IDC_Path, tzPath);
  112. }
  113. else
  114. {
  115. OnCommand(hWnd, IDC_Browse);
  116. }
  117. }
  118. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  119. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  120. // 回调函数
  121. INT_PTR CALLBACK MainDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  122. {
  123. switch (uMsg)
  124. {
  125. case WM_INITDIALOG:
  126. OnInitDialog(hWnd);
  127. break;
  128. case WM_COMMAND:
  129. OnCommand(hWnd, wParam);
  130. break;
  131. case WM_CLOSE:
  132. OnCommand(hWnd, IDCANCEL);
  133. break;
  134. default:
  135. return FALSE;
  136. }
  137. return TRUE;
  138. }
  139. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  140. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  141. // 程序入口
  142. INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pszCmdLine, INT iCmdShow)
  143. {
  144. return (INT) DialogBox(hInstance, MAKEINTRESOURCE(IDD_Main), NULL, MainDlgProc);
  145. }
  146. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////