DetourQQ.cpp
资源名称:DetourQQ.rar [点击查看]
上传用户:qc13828
上传日期:2007-06-21
资源大小:63k
文件大小:5k
源码类别:
ICQ弱点检测代码
开发平台:
Visual C++
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // 预处理
- #include "Define.h"
- #include <Windows.h>
- #include "AboutDlg.h"
- #include "CodeAtom.h"
- #include "Resource.h"
- #pragma warning(disable:4244)
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // 补丁数据
- /*
- 00405D9C |. 50 PUSH EAX
- 00405D9D |. 51 PUSH ECX
- 00405D9E |. 53 PUSH EBX
- 00405D9F |. FF75 08 PUSH DWORD PTR SS:[EBP+8]
- 00405DA2 |. 52 PUSH EDX
- 00405DA3 |. FF57 20 CALL DWORD PTR DS:[EDI+20]
- 00405DA6 85C0 TEST EAX,EAX
- 00405DA8 |. 5F POP EDI
- 00405DA9 |. 0F84 99000000 JE QQ.00405E48*/
- #define STR_LoginStamp "x50x51x53xFFx75x3Fx52xFFx57x3Fx85xC0x5Fx0Fx84"
- #define STR_LoginPatch "x3Fx3Fx3Fx3Fx3Fx3Fx3Fx3Fx3Fx3Fx33x3Fx3Fx3Fx3F"
- CODEATOM caPatch[] =
- {
- {0x00400000, 0x000A0000, sizeof(STR_LoginStamp) - 1, STR_LoginStamp, STR_LoginPatch},
- };
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // 命令处理
- VOID OnCommand(HWND hWnd, WPARAM wParam)
- {
- OPENFILENAME ofnFile;
- TCHAR tzPath[MAX_PATH];
- switch (LOWORD(wParam))
- {
- case IDC_Path:
- // 路径文本改变
- if (HIWORD(wParam) == EN_CHANGE)
- {
- EnableWindow(GetDlgItem(hWnd, IDOK), (BOOL) SendDlgItemMessage(hWnd, IDC_Path, WM_GETTEXTLENGTH, 0, 0));
- }
- break;
- case IDC_Browse:
- // 浏览获取文件名
- tzPath[0] = 0;
- ZeroMemory(&ofnFile, sizeof(OPENFILENAME));
- ofnFile.lStructSize = sizeof(OPENFILENAME);
- ofnFile.hwndOwner = hWnd;
- ofnFile.lpstrFile = tzPath;
- ofnFile.nMaxFile = MAX_PATH;
- ofnFile.lpstrFilter = STR_Filter;
- ofnFile.lpstrDefExt = STR_Exe;
- ofnFile.Flags = OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
- if (GetOpenFileName(&ofnFile))
- {
- SetDlgItemText(hWnd, IDC_Path, tzPath);
- }
- break;
- case IDC_About:
- // 显示关于对话框
- CAboutDlg::Show(hWnd);
- break;
- case IDOK:
- // 执行
- GetDlgItemText(hWnd, IDC_Path, tzPath, MAX_PATH);
- if (CCodeAtom::Execute(tzPath, caPatch, _NumberOf(caPatch)))
- {
- MessageBox(hWnd, STR_Sucess, STR_AppName, MB_ICONINFORMATION | MB_TOPMOST);
- }
- else
- {
- if (MessageBox(hWnd, STR_Failure, STR_AppName, MB_ICONQUESTION | MB_TOPMOST | MB_YESNO) == IDYES)
- {
- ShellExecute(NULL, NULL, STR_WebUrl, NULL, NULL, SW_NORMAL);
- }
- }
- break;
- case IDCANCEL:
- // 退出
- EndDialog(hWnd, 0);
- break;
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // 初始化对话框
- VOID OnInitDialog(HWND hWnd)
- {
- HKEY hKey;
- DWORD dwLength;
- TCHAR tzPath[MAX_PATH];
- // 设置图标
- SetClassLongPtr(hWnd, GCL_HICON, (LONG_PTR) LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_Main)));
- // 搜索路径
- tzPath[0] = 0;
- if (SearchPath(NULL, STR_ExeName, NULL, MAX_PATH, tzPath, NULL) == 0)
- {
- // 查询注册表中的路径
- if (RegOpenKey(HKEY_LOCAL_MACHINE, STR_SubKey, &hKey) == 0)
- {
- dwLength = sizeof(tzPath);
- RegQueryValueEx(hKey, STR_Install, NULL, NULL, (PBYTE) tzPath, &dwLength);
- RegCloseKey(hKey);
- }
- SearchPath(tzPath, STR_ExeName, NULL, MAX_PATH, tzPath, NULL);
- }
- // 设置路径
- if (tzPath[0])
- {
- SetDlgItemText(hWnd, IDC_Path, tzPath);
- }
- else
- {
- OnCommand(hWnd, IDC_Browse);
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // 回调函数
- INT_PTR CALLBACK MainDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_INITDIALOG:
- OnInitDialog(hWnd);
- break;
- case WM_COMMAND:
- OnCommand(hWnd, wParam);
- break;
- case WM_CLOSE:
- OnCommand(hWnd, IDCANCEL);
- break;
- default:
- return FALSE;
- }
- return TRUE;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // 程序入口
- INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pszCmdLine, INT iCmdShow)
- {
- return (INT) DialogBox(hInstance, MAKEINTRESOURCE(IDD_Main), NULL, MainDlgProc);
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////