关于HOOK API拦截不到想要拦截的函数问题
希望能够帮帮小弟
程序源代码:
void CTestAPIDlg::OnHook()
{
// TODO: Add your control notification handler code here
HMODULE m_hdl = GetModuleHandle(NULL);
HMODULE m_hdldll=LoadLibrary("User32.dll");
FARPROC m_ProAdd = GetProcAddress(m_hdldll,"MessageBoxA");
//pf*m_pf=MessageBoxQ;
//fp=MessageBox;
ReplaceIATEntryInOneMod("User32.dll" , m_ProAdd , (PROC)MessageBoxQ , m_hdl);
}
void CTestAPIDlg::ReplaceIATEntryInOneMod(PCSTR pszCalleeModName, PROC pfnCurrent, PROC pfnNew, HMODULE hmodCaller)
{
ULONG ulSize;
PIMAGE_IMPORT_DESCRIPTOR pImportDesc = NULL;
__try {
pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR) ImageDirectoryEntryToData(
hmodCaller, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize);
}
__except (InvalidReadExceptionFilter(GetExceptionInformation())) {
}
if (pImportDesc == NULL)
return; // This module has no import section or is no longer loaded
for (; pImportDesc->Name; pImportDesc++)
{
PSTR pszModName = (PSTR) ((PBYTE) hmodCaller + pImportDesc->Name);
if (lstrcmpiA(pszModName, pszCalleeModName) == 0)
{
PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA)
((PBYTE) hmodCaller + pImportDesc->FirstThunk);
// Replace current function address with new function address
for (; pThunk->u1.Function; pThunk++)
{
// Get the address of the function address
PROC* ppfn = (PROC*) &pThunk->u1.Function;
// Is this the function we're looking for?
BOOL bFound = (*ppfn == pfnCurrent);
if (bFound)
{
if (!WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL) && (ERROR_NOACCESS == GetLastError()))
{
DWORD dwOldProtect;
if (VirtualProtect(ppfn, sizeof(pfnNew), PAGE_WRITECOPY, &dwOldProtect))
{
WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL);
VirtualProtect(ppfn, sizeof(pfnNew), dwOldProtect, &dwOldProtect);
}
}
return; // We did it, get out
}
}
} // Each import section is parsed until the right entry is found and patched
}
}
void CTestAPIDlg::OnMsgbox()
{
// TODO: Add your control notification handler code here
MessageBoxA("没有被截取到!");
}
程序源代码:
void CTestAPIDlg::OnHook()
{
// TODO: Add your control notification handler code here
HMODULE m_hdl = GetModuleHandle(NULL);
HMODULE m_hdldll=LoadLibrary("User32.dll");
FARPROC m_ProAdd = GetProcAddress(m_hdldll,"MessageBoxA");
//pf*m_pf=MessageBoxQ;
//fp=MessageBox;
ReplaceIATEntryInOneMod("User32.dll" , m_ProAdd , (PROC)MessageBoxQ , m_hdl);
}
void CTestAPIDlg::ReplaceIATEntryInOneMod(PCSTR pszCalleeModName, PROC pfnCurrent, PROC pfnNew, HMODULE hmodCaller)
{
ULONG ulSize;
PIMAGE_IMPORT_DESCRIPTOR pImportDesc = NULL;
__try {
pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR) ImageDirectoryEntryToData(
hmodCaller, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize);
}
__except (InvalidReadExceptionFilter(GetExceptionInformation())) {
}
if (pImportDesc == NULL)
return; // This module has no import section or is no longer loaded
for (; pImportDesc->Name; pImportDesc++)
{
PSTR pszModName = (PSTR) ((PBYTE) hmodCaller + pImportDesc->Name);
if (lstrcmpiA(pszModName, pszCalleeModName) == 0)
{
PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA)
((PBYTE) hmodCaller + pImportDesc->FirstThunk);
// Replace current function address with new function address
for (; pThunk->u1.Function; pThunk++)
{
// Get the address of the function address
PROC* ppfn = (PROC*) &pThunk->u1.Function;
// Is this the function we're looking for?
BOOL bFound = (*ppfn == pfnCurrent);
if (bFound)
{
if (!WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL) && (ERROR_NOACCESS == GetLastError()))
{
DWORD dwOldProtect;
if (VirtualProtect(ppfn, sizeof(pfnNew), PAGE_WRITECOPY, &dwOldProtect))
{
WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL);
VirtualProtect(ppfn, sizeof(pfnNew), dwOldProtect, &dwOldProtect);
}
}
return; // We did it, get out
}
}
} // Each import section is parsed until the right entry is found and patched
}
}
void CTestAPIDlg::OnMsgbox()
{
// TODO: Add your control notification handler code here
MessageBoxA("没有被截取到!");
}
...全文
相关推荐
API HOOK易语言IP端口拦截转向源码
API HOOK易语言IP端口拦截转向源码 按照源码把IP端口改成你想要的就行了 然后注入DLL
C++程序调用SetWindowsHookEx全局拦截键盘按键消息和窗口消息的Hook实例分享
本文分享调用SetWindowsHookEx全局拦截键盘按键消息和窗口消息的两个Hook实例。
C++实现API Hook拦截MessageBox窗口系统项目
MFC的消息机制是Windows事件驱动模型的抽象体现,通过消息队列、消息循环以及消息映射三大核心组件构建起整个框架的响应体系。理解这一机制是实现MFC消息拦截与处理的前提。消息过滤是指根据预设规则判断是否允许某条消息继续传递。可以通过在钩子回调或窗口过程中添加判断逻辑实现。// 自定义过滤规则// 屏蔽鼠标移动消息return 1;// 返回非零值表示已处理,消息不再传递过滤规则逻辑说明:若返回值为非零,则系统认为消息已被处理,不再传递给窗口过程。
hook一个实现API拦截的具体例子学习钩子的实例
hook一个实现API拦截的具体例子学习钩子的实例,新手可以快速上手哦 解压密码:http://www.99616.net/
API的HOOK拦截
API的HOOK拦截实用型


