本人也是刚刚接触APIHook,写的也是入门的程序,希望本文对初学APIHook的人有所帮助。
文章之前先介绍下要利用的库Detours,这是微软提供的APIHook的库,具体的可以到网上查找。里面的文档里有说明APIHOOK是一个怎么样的机制。本文提供的是刚刚写出来的入门的程序。
下面就开始动手了。程序分为两部分,DLL(需要注入其他程序的DLL),另外一个为测试程序。
DLL注入有两种注入方式,一种为静态的,另外一个为动态的。
按我的理解来看:静态的为本来就存在程序中。举个例子:比如说SetClipboardData。它本身就存在于程序中,也就是说无需到其他DLL(比如user32.dll)中来载如到程序中,因此是可以直接找到。
动态的就是说程序在运行时还要载入DLL来执行函数。
以上只是我的观点,有错误地方请指出。
下面是动态的载入方式
ApiHookClipBoard.DLL
// ApiHookClipBoard.cpp : 定义 DLL 的初始化例程。
//利用挂接API SetClipboardData 来实现剪贴板数据的控制
#include "stdafx.h"
#include <afxdllx.h>
#include "detours.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
static AFX_EXTENSION_MODULE ApiHookClipBoardDLL = { NULL, NULL };
//定义和SetClipboardData一样的函数原型
typedef HANDLE (WINAPI *