目前最好的EasyHook的完整Demo程序,包括了Hook.dll动态库和Inject.exe注入程序。 Hook.dll动态库封装了一套稳定的下钩子的机制,以后对函数下钩子,只需要填下数组表格就能实现了,极大的方便了今后的使用。 Inject.exe是用MFC写的界面程序,只需要在界面上输入进程ID就能正确的HOOK上相应的进程,操作起来非常的简便。 这个Demo的代码风格也非常的好,用VS2010成功稳定编译通过,非常值得下载使用。 部分代码片段摘录如下: //【Inject.exe注入程序的代码片段】 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动态库的代码片段】 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; } 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); }
2022-03-01 10:43:49 278KB EasyHook 函数钩子 Hook c++
1
使用boost1.53.0源码; VS2010编译好的64位动态库;
2022-03-01 00:31:43 122.78MB c++ boost boost1.53 boost1.53.0
1
使用NPOI操作Excel 1.写入数据到Excel文档中 2.从Excel中读取数据到ListView中 感觉NPOI操作Excel速度还是挺快的
2022-02-28 18:59:50 1.07MB NPOI Excel VS2010 DoNet
1
用VS2010开发,功能是判断屏幕鼠标指向的15*15像素的区域内在一段时间内是否是纯颜色,如果是则播放wav提示音。
2022-02-28 17:03:04 4.3MB C# 多线程 截图 播放声音
1
当treeView 控件在编辑时 可能有时需要恢复,但如果没有恢复功能,那样将很难处理,把数据压入栈,又不好控制,如何保存,如何恢复,以下是对操作数据流做的一个保存,便于恢复操作,可撤销 或重做
2022-02-28 15:30:44 71KB c#
1
有限元风格划分GMesh源码编译设置及如何将工程转换成VS2010工程
2022-02-27 11:10:55 282KB 有限元 网格划分 编译 VS2010
1
vs2010彻底卸载工具是卸载vs2010最好用的工具
2022-02-25 13:24:22 622KB vs2010卸载 vs卸载
1
vs2010 directshow工程中可能缺少qedit库文件,导致编译失败,错误:fatal error 无法打开包括文件:“qedit.h”: No such file or directory
2022-02-25 11:13:09 21KB qedit.h vs2010 directshow C++
1
VS2010 opencv2.2 directshow 同时显示两个USB摄像头 详细介绍,包括所遇到错误,以及解决错误的方法参见地址: http://hi.baidu.com/jelly19881104/blog/item/a31483fdf7588d45252df2cb.html?timeStamp=1320834014229
1
libharu pdf开源库 vs2010编译 debug release 目前已经用于MFC项目
2022-02-24 16:02:19 2.85MB libharu vs2010编译, dll lib
1