第九章 HOOK程序测试 windows程序设计 王艳平版

#include <afxwin.h>




class CMyApp : public CWinApp
{
public:
BOOL InitInstance();
};


class CMainDialog : public CDialog
{
public:
CMainDialog(CWnd* pParentWnd = NULL);


protected:
virtual BOOL OnInitDialog();
afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT *pCopyDataStruct);
DECLARE_MESSAGE_MAP()

};



// HookTermProApp.cpp文件


#include "resource.h"
#include "HookTermProApp.h"


CMyApp theApp;


// DLL导出函数
BOOL WINAPI SetSysHook(BOOL bInstall, DWORD dwThreadId = 0)
{

typedef (WINAPI *PFNSETSYSHOOK)(BOOL, DWORD);


// 调试的时候可以这样设置szDll[] = "..//09HookTermProLib//debug//09HookTermProLib.dll";
char szDll[] = "09HookTermProLib.dll";


// 加载09HookTermProLib.dll模块
BOOL bNeedFree = FALSE;
HMODULE hModule = ::GetModuleHandle(szDll);
if(hModule == NULL)
{
hModule = ::LoadLibrary(szDll);
bNeedFree = TRUE;
}


// 获取SetSysHook函数的地址
PFNSETSYSHOOK mSetSysHook = (PFNSETSYSHOOK)::GetProcAddress(hModule, "SetSysHook");
if(mSetSysHook == NULL) // 文件不正确?
{
if(bNeedFree)
::FreeLibrary(hModule);
return FALSE;
}


// 调用SetSysHook函数
BOOL bRet = mSetSysHook(bInstall, dwThreadId);


// 如果有必要,释放上面加载的模块
if(bNeedFree)
::FreeLibrary(hModule);


return bRet;
}


BOOL CMyApp::InitInstance()
{

// 安装钩子
if(!SetSysHook(TRUE, 0))
::MessageBox(NULL, "安装钩子出错!", "09HookTermProApp", 0);
// 显示对话框
CMainDialog dlg;
m_pMainWnd = &dlg;
dlg.DoModal();
// 卸载钩子
SetSysHook(FALSE);


return FALSE;
}


CMainDialog::CMainDialog(CWnd* pParentWnd):CDialog(IDD_MAINDLG, pParentWnd)
{
}


BEGIN_MESSAGE_MAP(CMainDialog, CDialog)
ON_WM_COPYDATA()
END_MESSAGE_MAP()


BOOL CMainDialog::OnInitDialog()
{

CDialog::OnInitDialog();
SetIcon(theApp.LoadIcon(IDI_MAIN), FALSE);
::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 
0, 0, SWP_NOSIZE|SWP_NOREDRAW|SWP_NOMOVE);


return TRUE;
}


BOOL CMainDialog::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{

GetDlgItem(IDC_HOOKINFO)->SetWindowText((char*)pCopyDataStruct->lpData);
// 检查是否禁止执行
BOOL bForbid = ((CButton*)GetDlgItem(IDC_FORBIDEXE))->GetCheck();
if(bForbid)
return -1;
return TRUE;
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值