312_应用层勾子InLine_HOOK_________________-(41课)..docVIP

312_应用层勾子InLine_HOOK_________________-(41课)..doc

  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文档。上传文档
查看更多
312_应用层勾子InLine_HOOK_________________-(41课).

3.1.2 应用层勾子InLine HOOK(41课) A、InLine HOOK 原理分析 B、InLine HOOK 代码编写 C、InLine HOOK 代码测试 课时:33 在 021_绕过驱动保护 已经讲过一次 inline hook _declspec(naked)//我改的 #pragma pack(1) //前5字节 77D507EA 8BFF MOV EDI,EDI 77D507EC /. 55 PUSH EBP 77D507ED |. 8BEC MOV EBP,ESP My_MessageBoxA地址 401020 ============================================ 笔记: 在21课时讲过内联HOOK,本课再继续深入讲解.用VC6新建代码inlineHook_test控制台程序,新建一个MessageBoxA,然后用另一个函数my_MessageBox进行参数与原函数相同.我们在OD里看一下这MessageBoxA函数,将前面几个字节改成JMP XXXXXX,先找到我们自己的函数地址然后修改代码跳到这里.在OD中修改了代码之后出现了两次的HOOK成功,应该是有两个地方调用了代码.又修改后打印自己的地址信息,信息正确但是报错,我们需要加上恢复函数头部的代码,但是还是出错了,再加上一条_declspec(naked)生成干脆的汇编 这是一个很少见的调用约定,一般程序设计者建议不要使用。编译器不会给这种函数增加初始化和清理代码,更特殊的是,你不能用return返回返回值,只能用插入汇编返回结果。这一般用于实模式驱动程序设计,假设定义一个求和的加法程序,可以定义为:   __declspec(naked) int add(int a,int b){ __asm mov eax,a __asm add eax,b __asm ret } // inlineHook_test.cpp : Defines the entry point for the console application. // #include stdafx.h #include hook_test.h #include windows.h _declspec(naked) int My_MessageBox ( HWND hWnd, // handle of owner window LPCTSTR lpText, // address of text in message box LPCTSTR lpCaption, // address of title of message box UINT uType // style of message box ) { __asm //恢复函数头部 { mov bx,bx //特征码定位 PUSH EBP MOV EBP,ESP } printf(Hook Ok %x,%s,%s,%x \n,hWnd,lpText,lpCaption,uType); __asm { jmp oldMessageBoxA+5 //HOOK后又跳回 } __asm pop ebp //堆栈平衡 __asm retn 0x10 //堆栈平衡/四个参数吧hWnd,lpText,lpCaption,UTypte } int main(int argc, char* argv[]) { // printf(Hello World!\n); MessageBoxA(NULL,Hook Test Contect,hook,MB_OK); printf(End Process \n); getchar(); return 0; } 已经成功了,原理清楚后再用一下之前已经写好的hook_test.h #include windows.h typedef int (__stdcall *MessageBox_type)( HWND hWnd, // handle of owner window LPCTSTR lpText, // address of text in me

文档评论(0)

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

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

1亿VIP精品文档

相关文档