封装的IATHOOK类的使用

来源:互联网 发布:心事谁人知歌词意思 编辑:程序博客网 时间:2024/06/04 01:06

代码不稳定,对WINDOW 7不稳定,对XP也不稳定,木有意义,各位看官绕过吧。。抓狂抓狂抓狂抓狂抓狂 


1. 主程序使用了对话框的框架

2. 把IATHOOK类封装成DLL,在初始化时加载DLL,使用DLL的导出函数,此函数HOOK了MESSAGE消息。。。与此同时,此DLL会在加载的时候创建全局的IATHOOK类,把常见的几个函数LoadLibraryA,LoadLibraryW,LoadLibraryExA,LoadLibraryExW,GetProcAddress这几个函数HOOK了。。。


但经测试,各种各种各种的不稳定。。。

主程序

#include "resource.h"#include "ProcessProtector.h"#include "HookTermProLib.h"#pragma comment(lib, "HookTermProLib.lib")CMyApp theApp;BOOL WINAPI SetSysHookAA(BOOL bInstall, DWORD dwThreadId=0){typedef BOOL (WINAPI* PFNSETSYSHOOK)(BOOL, DWORD);char szDll[]="HookTermProLib.dll";BOOL bNeedFree = FALSE;HMODULE hModule = ::GetModuleHandleA(szDll);if (hModule == NULL) //不存在这个模块{int nErr = GetLastError();hModule = ::LoadLibraryA(szDll);nErr = GetLastError();bNeedFree = TRUE;}//获取SETSYSHOOK地址PFNSETSYSHOOK mSetSysHook = (PFNSETSYSHOOK)::GetProcAddress(hModule, "SetSysHook");if (mSetSysHook == NULL) //文件不正确{if (bNeedFree){::FreeLibrary(hModule);}return FALSE;}//调用SETSYSHOOKMessageBox(NULL, "加载SetSysHook成功", "", MB_OK);BOOL bRet = mSetSysHook(bInstall, dwThreadId);if (bNeedFree){::FreeLibrary(hModule);}return bRet;return TRUE;}BOOL CMyApp::InitInstance(){//安装钩子SetSysHookAA(TRUE, 0);//显示对话框CMainDialog dlg;m_pMainWnd = &dlg;   //给m_pMainWnd 主窗口dlg.DoModal();return FALSE; //不进入消息循环}BEGIN_MESSAGE_MAP(CMainDialog, CDialog)//ON_BN_CLICKED(IDC_STOP, OnStop)//ON_MESSAGE(WM_CUTTERSTART, OnCutterStart) //自定义消息END_MESSAGE_MAP()//CMainDialogCMainDialog::CMainDialog(CWnd* pParentWnd):CDialog(IDD_MAIN, pParentWnd){}BOOL CMainDialog::OnInitDialog( ){CDialog::OnInitDialog();return TRUE;}void CMainDialog::OnCancel( ){CDialog::EndDialog(0);}//void CMainDialog::OnStop()//{//MessageBox("OnStop");//}//long CMainDialog::OnCutterStart(WPARAM wParam, LPARAM lParam)   //处理自定义消息//{//MessageBox("OnCutterStart");//return 0;//}
 

主程序的头文件 

#include <afxwin.h>#define  WM_CUTTERSTART WM_USER+100//CMyAppclass CMyApp:public CWinApp{public:BOOL InitInstance();};//CMyDialogclass CMainDialog:public CDialog{public:CMainDialog(CWnd* pParentWnd = NULL);protected:virtual BOOL OnInitDialog( );//afx_msg void OnStop();//afx_msg long OnCutterStart(WPARAM wParam, LPARAM lParam);  //处理自定义消息的声明virtual void OnCancel( );DECLARE_MESSAGE_MAP()};

--------------------------------------------------------------------------------------------------------------------------------------

上面就是个对话框的框架

最蛋疼的是,在hook这几个函数时,每个进程的每个模块都要遍历,对已经加载的模块也要遍历,导致堆栈崩溃了。。。

就是递归调用了很多这个函数

//防止自动加载HMODULE WINAPI CAPIHOOK::LoadLibraryA(LPCTSTR lpFileName){HMODULE hModule = LoadLibraryA(lpFileName);HookNewlyLoadedModule(hModule, 0); //这个函数中忆检测hModule 了return(hModule);}


一天就整了这些代码,完美失败告终。。。SB了一天。。。。

原创粉丝点击