Detours 3.0 Express VC6.0编译方法及简单使用

一、Detours 3.0 Express VC6.0编译方法

1、\Detours Express 3.0\src\detours.cpp

#define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0]))//在第31行添加
//第1599行__debugbreak()改为DebugBreak()
if (pbTrampoline > pbPool) {
    DebugBreak();
}

 2、\Detours Express 3.0\src\disasm.cpp第356行

pbDst[1] = 0x80 | (pbSrc[0] & 0xf);

改为:

pbDst[1] = pbSrc[0];
pbDst[1] &=  0xf;
pbDst[1] |= 0x80;

二、Detours 3.0 Express 简单使用

下面是拦截ShellAboutW()的例子。可以用Windows XP上的计算器来测试,点击关于按钮,在弹出关于对话框之前先弹出一个MessageBox。

// HookShellAboutW.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include <ShellAPI.h>
#include "detours.h"

#pragma comment(lib, "detours.lib")

int (WINAPI* SysShellAboutW)(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon) = ShellAboutW;

int WINAPI HookShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon)
{
	MessageBox(hWnd, "Hook successfully!", "Caption", MB_OK);
	return SysShellAboutW(hWnd, szApp, szOtherStuff, hIcon);
}

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
	switch(ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		DetourTransactionBegin();
		DetourUpdateThread(GetCurrentThread());
		DetourAttach(&(PVOID&)SysShellAboutW, HookShellAboutW);
		if(DetourTransactionCommit() != NO_ERROR)
			OutputDebugString("detoured unsuccessfully!");
		break;
	case DLL_PROCESS_DETACH:
		DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
		DetourDetach(&(PVOID&)SysShellAboutW, HookShellAboutW);
		DetourTransactionCommit();
		break;
	case DLL_THREAD_ATTACH:
		break;
	case DLL_THREAD_DETACH:
		break;
	}
    return TRUE;
}

__declspec(dllexport) int ExportFunc(VOID)
{
	return 5;
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值