欢迎来到天天文库
浏览记录
ID:44290639
大小:136.50 KB
页数:18页
时间:2019-10-20
《APIHOOK实例剖析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、APIHOOK实例剖析关于APIIIOOK的基础知识有很多,女Cldll的相关知识、Ilook的相关知识、系统进程与线程Z间的联系等。具体可以看我的另两篇文章:〃我的D11(动态链接库)学习笔记〃和〃我的Hook学习笔记〃昇)下面进入这篇文章的重点,根据APIHook源码进行APIHook的剖析。一、APIHOOK之dll部分////////////////////////////////APIHook_Dll.cpp//////////////////////////////////////////rivershan写于2002.9.23//////
2、/////////////////////////////////////////////////////////////////////////////////////#inelude"stdafx.h"^includez,APTHook_Dl1.h,z#inelude#include#pragmacomment(lib,,,I^lageHlp,,)//定义全局共享数据段#pragmadataseg("Shared")HMODULEhmodDll=NULL;HHOOKhHook二NULL;#pragma
3、data_seg()#pragmacomment(linker,,Z/Section:Shared,rws,z)//设置全局共享数据段的属性/////////////////////////////////////DllMain函数///////////////////////////////////////////dll的入口点BOOLAPTENTRYDllMain(I[MODULEhModule,DWORDul_rcason_for_cal1,LPVOTD1pReserved){switch(ulreasonforcal1){caseDLL_PRO
4、CESS_ATTACH://if(sHook)caseDLL_PROCESS_DETACH:UnlnstallHook();break;}hmodDll=hModule;returnTRUE;}/////////////////////////////////////HookOneAPI函数///////////////////////////////////////////进行IAT转换的关键函数,其参数含义://pszCa11eeModu1eName:需要hook的模块名//pfnOriginApiAddress:要替换的自l2API函数的地址//
5、pfnDummyFuncAddress:需要hook的模块名的地址//hModCallerModule:我们要查找的模块名称,如果没有被赋值,voidWTNAPTHookOneAPT(LPCTSTRpszCal1eeModuleName,PROCpfnOriginApiAddress,PROCpfnDummyFuncAddress,HMODULEhModCal1erModule){ULONGsize;//获取指向PE文件中的Import中IMAGE_DIRECTORY_DESCRIPTOR数组的指针PIMAGE_IMPORT_DESCRIPTORplm
6、portDesc二(PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData(hModCallerModule,TRUE,IMAGEDIRECTORYENTRYIMPORT,&size);i.f(plmportDesc==NULL)return;//查找记录,看看有没有我们想要的DLLfor(;pImportDesc->Namc;plmportl)esc++){LPSTRpszDllName=(LPSTR)((PBYTE)hModCallerModule+pImportDesc->Name);if(1strc
7、mpiA(pszDlIName,pszCal1eeModuleName)==0)break;Iif(pImportDcsc->Namc二二NULL)return;}//寻找我们想要的函数PTMAGE_TIIUNK_DATApThunk二(PIMAGE_THUNK_DATA)((PBYTE)hModCallerModule+pImportDesc->FirstThunk);//IATfor(;pThunk->ul.Function;pThunk++){//ppfn记录了与IAT表和应的函数的地址PROC*ppfn二(PROC*)&pThunk->ul.F
8、unction;if(*ppfn二二pfnOriginApiAddress){//如果地址和同
此文档下载收益归作者所有