核心编程上一个关于API拦截的例子,出了点问题,求解

sjjwind sjjwind 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
首先上代码

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <cstdlib>
#include <Dbghelp.h>
#pragma comment(lib,"Dbghelp.lib")

using namespace std;

VOID ReplaceATEntryInOneMod(LPSTR pszCalleeModName,PROC pfnCurrent,PROC pfnNew,HMODULE hModCaller)
{
ULONG ulSize;
PIMAGE_IMPORT_DESCRIPTOR pImportDesc = NULL;
__try
{
pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToDataEx(hModCaller,TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT,&ulSize);
}
__finally
{
}
if(pImportDesc == NULL)
{
return ;
}
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);
for(; pThunk->u1.Function ; pThunk ++ )
{
PROC* ppfn = (PROC*)&pThunk->u1.Function;
BOOL bFound = (*ppfn == pfnCurrent);
if(bFound)
{
if(!WriteProcessMemory(GetCurrentProcess(),ppfn,&pfnNew,sizeof(pfnNew),NULL) && (ERROR_NOACCESS == GetLastError()))
{
DWORD dwOldProter;
if(!VirtualProtect(ppfn,sizeof(pfnNew),PAGE_WRITECOPY,&dwOldProter))
{
WriteProcessMemory(GetCurrentProcess(),ppfn,&pfnNew,sizeof(pfnNew),NULL);
VirtualProtect(ppfn,sizeof(pfnNew),dwOldProter,&dwOldProter);
}
}
return ;
}
}
}
}
}

int MyMessageBox(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType)
{
MessageBeep(0);
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
PROC pfnOrig = GetProcAddress(GetModuleHandle(_T("User32")),"MessageBoxA");
cout << GetLastError() << endl;
HMODULE hModCaller = GetModuleHandle(_T("Test.exe"));
ReplaceATEntryInOneMod("user32.dll",pfnOrig,(PROC)MyMessageBox,hModCaller);
system("pause");
return 0;
}



代码问题出现在了GetModuleHandle(_T("Test.exe"));上,GetLastError一直返回的是找不到指定的模块,我以前也没有在里面用过exe的,Test.exe也是放在当前目录下的,求指点这个问题怎么解决,感激不尽。
...全文

相关推荐

《windows核心编程》第22章最后一个例子(拦截API的问题)

《Windows核心编程》是Windows API开发的经典之作,深入讲解了Windows操作系统编程的各个方面。第22章的主题可能涉及系统调用、动态链接库(DLL)、钩子机制以及API拦截技术。

PaulEAfly

《Windows核心编程系列》谈谈修改导入段拦截API

"本文主要探讨了如何通过修改Windows PE文件的导入段来实现API拦截,这一技术对于系统监控、调试以及动态Hook等场景具有重要意义。文章指出,理解PE文件格式是实现这一技术的基础,但相关内容

weixin_38574132

API函数拦截例子 skykernel.rar_API拦截_api 拦截_拦截 API_拦截sky

在IT领域,API(应用程序接口)是软件系统之间交互的核心工具。API函数拦截是一种技术,它允许开发者在程序运行时监控、修改或控制API调用的行为。

邓凌佳

易语言源码Windows Hook 易核心编程(3) API Hook 续 拦截API.7z

在“易语言源码Windows Hook 易核心编程(3) API Hook 续 拦截API”这个主题中,我们将深入探讨Windows Hook技术和API Hook在易语言中的应用。

Cheng-Dashi

易语言源代码_Windows Hook 易核心编程(3) API Hook 续 拦截API.zip

在"易语言源代码_Windows Hook 易核心编程(3) API Hook 续 拦截API.zip"这个压缩包中,我们主要关注的是Windows钩子(Hook)技术和API拦截的概念,这是在系统级编程中常见的技术

xox_761617
评论 10
收藏 已收藏
分享
返回顶部
sjjwind
C++ 语言 65,214 成员 250,514 内容