IAT HOOK其他进程MessageBox.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
IAT HOOK其他进程MessageBox

结合网上 资料 简单学习了一个 远程线程、、、 HOOK – 实现HOOK其他进程的Messagebox、、 思路方法如下: 1 DLL的编写(实现IAT hook)、 2 DLL注入工具(远程线程技术 和 简单的MFC控件知识)、 3 简单的测试程序、 1 编写dll、 之前有篇文章HOOK -- IAT HOOK 本进程MessageBoxBOOL WINAPI DllMain( HINSTANCE hInstance, ULONG ulReason, LPVOID Reserved); 何时调用Dllmain、 DllMain的第二个参数fdwReason指明了系统调用Dll的原因、   DLL_PROCESS_ATTACH、当一个DLL文件被映射到进程的地址空间时、用此参数掉dllmain 当同一DLL再次映射时 不会再调DllMain函数只增加dll次数、 DLL_PROCESS_DETACH、当DLL被从进程的地址空间解除映射时FreeLibrary 进程结束而解除DLL映射(若是使用的TerminateProcess 则不调)   DLL_THREAD_ATTACH、 当进程创建一线程时,跟DLL_PROCESS_ATTACH区别 无论何时创建线程 均会用此参数调用Dllmain    DLL_THREAD_DETACH 如果线程调用了ExitThread来结束线程(线程函数返回时,系统也会自动调用ExitThread),若是TerminateThread 也不会调用DllMain.   这里选择如下方式编写 DllMain函数 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { If ( fdwReason= =DLL_PROCESS_ATTACH) //加载dll时候 调用DllMain _beginthread(ThreadProc,0,NULL); //创建线程 return TRUE; } 就是说当dll被加载的时候(LoadLirary)、 在DllMain中 实现创建ThreadProc 线程函数、、 而ThreadProc函数 里边 是我们IAT HOOK 的核心代码、、 ThreadProc函数: 功能是 一个应用程序定义的函数作为一个线程的起始地址服务、 要Hook Messagebox 需写一个自己的Messagebox 如下: int __stdcall HookMBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption,UINT uType) { return MessageBox(NULL,哈哈! HOOK到MessageBox了,HOOK,MB_OK); //证明一下Hook成功 } 在线程函数中 完成我们的ITA HOOK 的代码: 1 获取本进程的模块基址 HANDLE pBegin = GetModuleHandle(NULL); 2 初始化PE结构 得到 IAT的地址 PBYTE pBegin2 = (PBYTE)pBegin; PIMAGE_DOS_HEADER DOS = PIMAGE_DOS_HEADER(pBegin2); PIMAGE_NT_HEADERS NT = PIMAGE_NT_HEADERS(pBegin2+DOS-e_lfanew); PIMAGE_OPTIONAL_HEADER OPTION = (NT-OptionalHeader); PIMAGE_IMPORT_DESCRIPTOR IMPORT = PIMAGE_IMPORT_DESCRIPTOR(OPTION-DataDirectory[1].VirtualAddress + pBegin2); 3 遍历寻找IMPORT-FirstThunk的内容 当其与真正的MessageBox的地址相等时 即可 真正的MessageBoxA的地址 在程序之前得到 即DWORD RealBox = (DWORD)MessageBox、 while (pOriginalThunk-u1.Function) //记住是 Function { PDWORD lpAddr = (DWORD *)( pBegin2+ (DWORD)IMPORT-FirstThunk); if (*lpAddr = = RealBox) { 找到后 即找到了此PE的Message

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档