Detours3 使用示例代码
// 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;
}
沙发~
感谢楼主分享! 感谢NISY提供实例!
mHook 测试代码 X86\X64
small-q 发表于 2014-12-31 18:26感谢NISY提供实例!
Detours 和 mHook 这些库的好处就在于,可以在函数执行前或函数执行后用C语言来做一些事情。
int WINAPI NsMessageBoxW(HWND hWnd,
LPCWSTR lpText,
LPCWSTR lpCaption,
UINT uType
)
{
lpText = L"Detours!文字被修改!";
// 原函数执行前做你想做的事情
int lRet = pMessageBoxW( hWnd, lpText, lpCaption, uType );
// 原函数执行后做你想做的事情
return lRet;
} 很强大的Detour,感谢提供64位。 你这是泄露版吗?{:soso_e113:} 谢谢分享! 谢谢N大。收到了。。 不是很会用,限制比较多,比如无法HOOK任意地址
页:
[1]
2