- UID
- 2198
注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主
该用户从未签到
|
- // stdafx.h
- #include <Windows.h>
- #include "..\\include\\detours.h"
- #ifdef WIN32
- #pragma comment(lib,"..\\lib\\x86\\Detours.lib")
- #endif
- #ifdef WIN64
- #pragma comment(lib,"..\\lib\\x64\\Detours.lib")
- #endif
复制代码
- //TestDetours.cpp
- #include "stdafx.h"
- typedef int (WINAPI * FP_MessageBoxW)(HWND hWnd,
- LPCWSTR lpText,
- LPCWSTR lpCaption,
- UINT uType
- );
- FP_MessageBoxW pMessageBoxW = MessageBoxW;
- int WINAPI NsMessageBoxW(HWND hWnd,
- LPCWSTR lpText,
- LPCWSTR lpCaption,
- UINT uType
- )
- {
- lpText = L"Detours!文字被修改!";
- return pMessageBoxW( hWnd, lpText, lpCaption, uType );
- }
- VOID TestDetours()
- {
- // 目标 HOOK MessageBoxW
- MessageBoxW(NULL,L"测试弹窗,未被修改。",L"PYG",0);
- }
- // 启用 Detours HOOK
- BOOL InitDetours()
- {
- BOOL bRet = FALSE;
- __try
- {
- // 简单判一下函数是否成功,也可以不用判断返回值
- // 第一步
- if ( DetourTransactionBegin() )
- __leave;
- // 第二步
- if ( DetourUpdateThread( ::GetCurrentThread() ) )
- __leave;
- // 第三步 添加我们HOOK的替换函数
- DetourAttach( &(PVOID&)pMessageBoxW, NsMessageBoxW );
- // 继续添加其他的HOOK
- // DetourAttach( &(PVOID&)pMessageBoxA, NsMessageBoxA );
- // 第四步
- if ( DetourTransactionCommit() != NO_ERROR )
- __leave;
- bRet = TRUE;
- }
- __finally
- {
- ;
- }
- return bRet;
- }
- // 停用 Detours HOOK
- BOOL UnInitDetours()
- {
- BOOL bRet = FALSE;
- __try
- {
- // 第一步
- if ( DetourTransactionBegin() != NO_ERROR )
- __leave;
- // 第二步
- if ( DetourUpdateThread( ::GetCurrentThread() ) != NO_ERROR )
- __leave;
- // 第三步 同上添加了几个这里就反安装几个
- DetourDetach( &(PVOID&)pMessageBoxW, NsMessageBoxW );
- // 第四步
- if ( DetourTransactionCommit() != NO_ERROR )
- __leave;
- bRet = TRUE;
- }
- __finally
- {
- ;
- }
- return bRet;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- DWORD TickCount = GetTickCount();
- // 原始弹窗
- TestDetours();
- // 设置钩子
- InitDetours();
- TestDetours();
- // 恢复钩子
- UnInitDetours();
- // 原始弹窗
- TestDetours();
- return 0;
- }
复制代码
|
评分
-
查看全部评分
|