封装的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了一天。。。。
- 封装的IATHOOK类的使用
- C++封装IATHOOK类的
- 封装IATHOOK类
- Release下IATHOOK失败的原因
- IatHook
- 什么是封装,封装类的使用!
- 封装使用jsoncpp的类
- 使用互斥量封装的类
- CAsyncSocket的封装使用
- AFNetworking的封装使用
- Retrofit的使用封装
- Otto的封装使用
- listview的封装使用
- volley的封装使用
- popupWindow的封装使用
- pymssql 的封装使用
- C#-sealed 封装类的使用
- log4cxx类的使用(简单封装)
- Glib编程
- libmysqlclient.so.16: cannot open shared object file: No such file or directory
- C++ 全局对象 全局变量和局部变量 静态变量
- Windows权限
- PL/SQL实例
- 封装的IATHOOK类的使用
- 24种榨干时间精力的“生命水蛭”:替工作狂卖命
- CSDN第一次写博
- 回顾Java给我们带来什么
- Matlab2012调用opencv2.3.1时的配置
- 判断单链表是否存在环,判断两个链表是否相交问题详解
- 用代码操纵剪切板
- STM32 串口发数据丢失问题
- UDP服务器端和客户端程序设计