游戏外挂设计方法(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文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219