
EasyHook函数钩子示例程序(稳定版,适用于VS2010 C++)
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
本项目提供了一个使用EasyHook进行函数级API拦截的C++示例程序,专为Visual Studio 2010环境设计,适合学习和研究函数钩子技术。
目前可用的最佳EasyHook示例程序包括一个名为Hook.dll的动态库和Inject.exe注入工具。该Hook.dll封装了一套稳定的挂钩机制,使得今后对函数进行挂钩变得非常简单——只需填写数组表格即可实现所需功能,极大地便利了后续使用需求。
Inject.exe是一款基于MFC框架开发的应用程序,用户界面友好且操作简便:通过在界面上输入目标进程的ID号便能成功地对该进程执行HOOK操作。此外,该示例项目的代码规范性良好,并能在Visual Studio 2010环境下稳定编译运行,具有较高的实用价值。
下面列出部分关键代码片段供参考:
Inject.exe注入程序中的一个函数定义如下:
```cpp
void CInjectHelperDlg::OnBnClickedButtonInjectDllProcessId(){
// 获取进程ID值
UINT nProcessID = 0;
if (!GetProcessID(nProcessID)) {
TRACE(_T(%s GetProcessID 失败), __FUNCTION__);
return;
}
// 得到DLL完整路径
CString strPathDLL;
if (!GetDllFilePath(strPathDLL)){
TRACE(_T(%s GetDllFilePath 失败), __FUNCTION__);
return;
}
// 注入DLL
NTSTATUS ntStatus = RhInjectLibrary(nProcessID, 0, EASYHOOK_INJECT_DEFAULT,
strPathDLL.GetBuffer(0), NULL, NULL, 0);
if (!ShowStatusInfo(ntStatus)){
TRACE(_T(%s ShowStatusInfo 失败), __FUNCTION__);
return;
}
}
```
Hook.dll动态库中的一个函数定义如下:
```cpp
extern C __declspec(dllexport) void __stdcall NativeInjectionEntryPoint(REMOTE_ENTRY_INFO* InRemoteInfo){
if (!DylibMain()){
TRACE(_T(%s DylibMain 失败), __FUNCTION__);
return;
}
}
// 定义需要挂钩的函数数组
FUNCTIONOLDNEW_FRMOSYMBOL array_stFUNCTIONOLDNEW_FRMOSYMBOL[]={
{_T(kernel32), CreateFileW, (void*)CreateFileW_new},
{_T(kernel32), CreateFileA, (void*)CreateFileA_new},
{_T(kernel32), ReadFile, (void*)ReadFile_new}
};
// 钩子函数数组挂钩
BOOL HookFunctionArrayBySymbol(){
int nPos = 0;
do {
FUNCTIONOLDNEW_FRMOSYMBOL* stFunctionOldNew = &g_stFUNCTIONOLDNEW_FRMOSYMBOL[nPos];
if (NULL == stFunctionOldNew->strModuleName)
break;
if (!HookFunctionBySymbol(stFunctionOldNew->strModuleName, stFunctionOldNew->strNameFunction,
stFunctionOldNew->pFunction_New)){
TRACE(_T(%s HookFunctionBySymbol 失败), __FUNCTION__);
return FALSE;
}
} while(++nPos);
return TRUE;
}
// 新的CreateFileW函数实现
HANDLE WINAPI CreateFileW_new(PWCHAR lpFileName, DWORD dwDesiredAccess,
DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile){
TRACE(_T(CreateFileW_new. lpFileName = %s), lpFileName);
return CreateFileW( lpFileName, dwDesiredAccess,
dwShareMode, lpSecurityAttributes,
dwCreationDisposition,
dwFlagsAndAttributes,
hTemplateFile);
}
```
这些代码片段展示了如何使用EasyHook进行进程注入及函数挂钩的具体实现方法。
全部评论 (0)


