10分钟API Hook MessageBox
转载注明出处
http://blog.csdn.net/xugangjava/article/details/7455851
1.首先下载Detour3.0 。
2.新建一个win32的 dll链接库

将 Detour3.0的源代码 Copy到工程目录下,就是下面这个样子

最后在dllmian里面编写 我们的钩子,
- // dllmain.cpp : 定义 DLL 应用程序的入口点。
- #include "stdafx.h"
- #include "detours.h"
- PVOID g_pOldMessageBoxA=NULL;
- typedef int (WINAPI *PfuncMessageBoxA)(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType);
- int WINAPI ZwNewMessageBoxA(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType)
- {
- return ((PfuncMessageBoxA)g_pOldMessageBoxA)(hWnd, "Hook This!","My hook",uType);
- }
- //安装Hook
- BOOL APIENTRY SetHook()
- {
- //大概是 开始事务吧
- DetourTransactionBegin();
- //更新线程信息
- DetourUpdateThread(GetCurrentThread());
- //查询函数 地址 将MessageBoxA 地址保存在这个 指针里面
- g_pOldMessageBoxA=DetourFindFunction("User32.dll","MessageBoxA");
- //将我们的拦截函数 附加到 MessageBoxA 地址上
- DetourAttach(&g_pOldMessageBoxA,ZwNewMessageBoxA);
- //完成hook
- LONG ret=DetourTransactionCommit();
- return ret==NO_ERROR;
- }
- //卸载Hook
- BOOL APIENTRY DropHook()
- {
- DetourTransactionBegin();
- DetourUpdateThread(GetCurrentThread());
- DetourDetach(&g_pOldMessageBoxA, ZwNewMessageBoxA);
- LONG ret=DetourTransactionCommit();
- return ret==NO_ERROR;
- }
- static HMODULE s_hDll;
- HMODULE WINAPI Detoured()
- {
- return s_hDll;
- }
- BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved )
- {
- switch (ul_reason_for_call)
- {
- case DLL_PROCESS_ATTACH:
- s_hDll = hModule;
- DisableThreadLibraryCalls(hModule);
- SetHook();
- break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
- case DLL_PROCESS_DETACH:
- DropHook();//UNHOOK
- break;
- }
- return TRUE;
- }
Ok 编译 成功 我们来试一下 写个 LoadLibrary 来加载这个DLL 运行DllMain
我们的钩子就加载了,
懒得编程序试了进入命令行 cmd 进入到 Hook.dll所在的目录
python 来测试一下 在交互式命令行中输入

OK 输入最后最后一句回车,效果如下,MessageBox的内容已经被修改了

- 2楼 mysalter 2012-07-03 17:14发表 [回复]

- 谢高手~在vs2008下好多问题都能通过了,但我在编译simple的时候还是出了点问题,不知道大侠能否知道怎么回事,我用的系统是xp,是不是这个xp系统已经。。。被抛弃了。。。
以下是在vs的控制台下的错误信息,还请大侠指正
rc /nologo /DDETOURS_BITS=32 /foobj.X86\simple.res /i..\..\include simple.rc
fatal error RC1106: invalid option: -ologo
- Re: xugangjava 2012-07-03 21:05发表 [回复]

- 回复mysalter:http://download.csdn.net/detail/xugangjava/4221929 这里有源代码,稍微改一下可以Hook任何API,我刚才在vs2008(安装了vs2008 sp1,操作系统windows2008)下编译了一遍没有问题。你那个错误我没遇到过,应该不是xp系统的原因,有可能是vs2008没有安装配置好引起的,google了一下
http://connect.microsoft.com/VisualStudio/feedback/details/499476/c-project-resource-compiler-fails-with-rc-fatal-error-rc1106-invalid-option-ologo 祝你成功
- 1楼 mysalter 2012-07-02 16:24发表 [回复] [引用] [举报]

- 您好,我最近在学习这个库,有个问题请教一下,我用vc6.0编译老是出错,请问你的编译运行环境是什么,vs2005吗,用不用另外安装Platform SDK,如果安装sdk,哪个版本够用?还望大侠不吝赐教,现在这里谢谢了
- Re: xugangjava 2012-07-03 08:32发表 [回复] [引用] [举报]

- 回复mysalter:你好,开发环境是vs2008,不需要别的sdk,Detour的源码已经被copy到工程里了。
10分钟API Hook MessageBox的更多相关文章
- 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)
大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...
- Windows Dll Injection、Process Injection、API Hook、DLL后门/恶意程序入侵技术
catalogue 1. 引言2. 使用注册表注入DLL3. 使用Windows挂钩来注入DLL4. 使用远程线程来注入DLL5. 使用木马DLL来注入DLL6. 把DLL作为调试器来注入7. 使用c ...
- API Hook基本原理和实现
API Hook基本原理和实现 2009-03-14 20:09 windows系统下的编程,消息message的传递是贯穿其始终的.这个消息我们可以简单理解为一个有特定意义的整数,正如我们看过的老故 ...
- API HOOK介绍 【转】
什么是“跨进程 API Hook”? 众所周知Windows应用程序的各种系统功能是通过调用API函数来实现.API Hook就是给系统的API附加上一段小程序,它能监视甚至控制应用程序对API函数的 ...
- Apache Shiro系列三,概述 —— 10分钟入门
一.介绍 看完这个10分钟入门之后,你就知道如何在你的应用程序中引入和使用Shiro.以后你再在自己的应用程序中使用Shiro,也应该可以在10分钟内搞定. 二.概述 关于Shiro的废话就不多说了 ...
- 程序破解之 API HOOK技术 z
API HOOK,就是截获API调用的技术,在程序对一个API调用之前先执行你的函数,然后根据你的需要可以执行缺省的API调用或者进行其他处理,假设如果想截获一个进程对网络的访问,一般是几个socke ...
- API HOOK
API HOOK技术是一种用于改变API执行结果的技术,Microsoft 自身也在Windows操作系统里面使用了这个技术,如Windows兼容模式等. API HOOK 技术并不是计算机病毒专有技 ...
- API HOOK技术
API HOOK技术是一种用于改变API执行结果的技术,Microsoft 自身也在Windows操作系统里面使用了这个技术,如Windows兼容模式等. API HOOK 技术并不是计算机病毒专有技 ...
- API Hook完全手册
文章来源: http://blog.csdn.net/atfield 原文作者: ATField 整理日期: 2008-07-16 发表评论 字体大小: 小 中 大 注:本文是根据我两年前写的一个 ...
随机推荐
- maven最齐全配置pom.xml
0001<project xmlns="http://maven.apache.org/POM/4.0.0"0002 0003xmlns:xsi="http://w ...
- 多表利用DIH批量导入数据并建立索引注意事项
如果希望同时对多个表进行全文检索,那我们该如何处理呢?利用DIH导入数据并建立索引时.schema.xml中配置了uniqueKey为id <uniqueKey>id</unique ...
- iOS 推荐学习__bridge等ARC知识的好资料
请下载 iOS5 by Tutorials!写得很好的!
- 如何在Ubuntu下安装”.deb“、”.bin“、”.tar.gz“、”.tar.bz2“格式的软件包!
今天在Ubuntu11.10中安装Google chrome浏览器是遇到了问题,下载好的“.deb”格式的安装文件google-chrome-stable.deb双击后或者右键快捷菜单选择 Synap ...
- CSS 样式显示为小手
因为工作需要把鼠标放上去显示小手形状, css样式如下: style="cursor:hand" 部分浏览器支持 style="cursor:pointer&quo ...
- HDU 4315 Climbing the Hill (阶梯博弈转尼姆博弈)
Climbing the Hill Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Su ...
- sublime text3侧边栏主题不生效问题解决
sublime text3主题插件: Seti_UI 插件安装: 在线安装:需要FQ window: ctrl+shift+p 找install package:之后搜索 Seti_UI 安装完成后需 ...
- dbVisualizer破解
下载dbvis.puk,替换C:\Program Files\DbVisualizer\lib\dbvis.jar中的文件. 替换后打开选手动的key:下载地址dbvis.license
- Android之Fragment(一)
Fragment的产生与介绍 Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视.针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板 ...
- css局部概念的理解:
1.DIV-Padding理解:一直以来对div中的padding属性,一直不理解,使用最多的也就是margin,padding是div的内空间的相对距离,margin是div的外部相对位置,如果用一 ...