手机版

游戏外挂设计方法(13)

发布时间:2021-06-07   来源:未知    
字号:

游戏外挂设计方法

//检查是否为DOS程序,如是返回NULL,因DOS程序没有IAT。

PIMAGE_DOS_HEADER pDOSHeader = (PIMAGE_DOS_HEADER) hModule;

if(pDOSHeader->e_magic != IMAGE_DOS_SIGNATURE) return NULL;

//检查是否为NT标志,否则返回NULL。

PIMAGE_NT_HEADERS pNTHeader = (PIMAGE_NT_HEADERS)((DWORD)pDOSHeader+ (DWORD)(pDOSHeader->e_lfanew));

if(pNTHeader->Signature != IMAGE_NT_SIGNATURE) return NULL;

//没有IAT表则返回NULL。

if(pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress == 0)

return NULL;

//定位第一个IAT位置。

(pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress)); //根据输入库名称循环检查所有的IAT,如匹配则返回该IAT地址,否则检测下一个IAT。 while (pImportDesc->Name)

{

//获取该IAT描述的输入库名称。

PSTR szCurrMod = (PSTR)((DWORD)pDOSHeader + (DWORD)(pImportDesc->Name));

if (stricmp(szCurrMod, szImportMod) == 0) break;

pImportDesc++;

}

if(pImportDesc->Name == NULL) return NULL;

return pImportDesc;

}

再加入一个函数,用来定位被挡截API函数的IAT项并修改其内容为替代函数地址。代码如下:

extern "C" __declspec(dllexport)

HookAPIByName( HMODULE hModule, LPCSTR szImportMod, LPHOOKAPI pHookApi)

//其中,hModule为进程模块句柄;szImportMod为输入库名称;pHookAPI为HOOKAPI结构指针。 {

//定位szImportMod输入库在输入数据段中的IAT地址。

PIMAGE_IMPORT_DESCRIPTOR pImportDesc = LocationIAT(hModule, szImportMod); if (pImportDesc == NULL) return FALSE;

//第一个Thunk地址。

PIMAGE_THUNK_DATA pOrigThunk = (PIMAGE_THUNK_DATA)((DWORD)hModule + (DWORD)(pImportDesc->OriginalFirstThunk));

//第一个IAT项的Thunk地址。

PIMAGE_THUNK_DATA pRealThunk = (PIMAGE_THUNK_DATA)((DWORD)hModule + PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)((DWORD)pDOSHeader + (DWORD)

游戏外挂设计方法(13).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
×
二维码
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)