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