上传者: smileban2008
|
上传时间: 2022-03-01 10:43:49
|
文件大小: 278KB
|
文件类型: -
目前最好的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);
}