转载注明出处javascript
http://blog.csdn.net/xugangjava/article/details/7455851html
1.首先下载Detour3.0 。java
2.新建一个win32的 dll连接库python

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

最后在dllmian里面编写 咱们的钩子,编程
-
- #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);
- }
-
- BOOL APIENTRY SetHook()
- {
-
- DetourTransactionBegin();
-
- DetourUpdateThread(GetCurrentThread());
-
- g_pOldMessageBoxA=DetourFindFunction("User32.dll","MessageBoxA");
-
- DetourAttach(&g_pOldMessageBoxA,ZwNewMessageBoxA);
-
- LONG ret=DetourTransactionCommit();
- return ret==NO_ERROR;
- }
-
-
- 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();
- break;
- }
- return TRUE;
- }
Ok 编译 成功 咱们来试一下 写个 LoadLibrary 来加载这个DLL 运行DllMain
咱们的钩子就加载了,swift
懒得编程序试了进入命令行 cmd 进入到 Hook.dll所在的目录 windows
python 来测试一下 在交互式命令行中输入api

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

附源代码 http://download.csdn.net/detail/xugangjava/4221929