HOOK是一种WINDOWS下存在很久的技术了。
HOOK一般分两种1。HOOK MESSAGE 2。HOOK API 本问讨论的是HOOK API。(如果你是HOOK高手就不要看了)
在最初学HOOK-API的时候通常都是通过覆盖地址和修改IAT的方法。
通过这两种技术,我们基本都可以实现对本进程的API函数进行HOOK了。但是在高兴之余会有点遗憾,
怎么才能HOOK其他进程的API函数呢?怎么才能对一个API函数进行全局的HOOK呢?
下面是我的一个简单的“HOOK其他进程API函数”的实现。(对另一进程的MessageBoxA这个函数进行HOOK)
其实里面的应用了两个技术
1。远程线程注入
2。修改IAT,HOOK-API
好了贴出代码如下:
一共是3个文件
install.c 注入程序
fundll.cpp DLL程序
test.cpp 测试程序
CODE:
//-------------------------install.c--------------------------
//
//write by Gxter
//install.c
#include "windows.h"
#include "tlhelp32.h"
#pragma comment(lib,"th32.lib")
const char *pkill="fundll.dll"; //DLL文件的路径
//这个路径很有意思,这个路径是相对于目标进程的,而不是自身进程。
//所以要嘛写成绝对路径,要嘛写成相对于目标进程的相对路径。
//如果写成相对于自身的路径就要麻烦了,本程序就找不到DLL文件了。
char *prosess="test.exe"; //要注入的进程名(目标进程名)
int main()
{
HANDLE hSnap;
HANDLE hkernel32; //被注入进程的句柄
PROCESSENTRY32 pe;
BOOL bNext;
HANDLE hToken;
TOKEN_PRIVILEGES tp;
LUID Luid;
LPVOID p;
FARPROC pfn;
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
{
return 1;
}
if (!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&Luid))
{
return 1;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
tp.Privileges[0].Luid = Luid;
if (!AdjustTokenPrivileges(hToken,0,&tp,sizeof(TOKEN_PRI
HOOK一般分两种1。HOOK MESSAGE 2。HOOK API 本问讨论的是HOOK API。(如果你是HOOK高手就不要看了)
在最初学HOOK-API的时候通常都是通过覆盖地址和修改IAT的方法。
通过这两种技术,我们基本都可以实现对本进程的API函数进行HOOK了。但是在高兴之余会有点遗憾,
怎么才能HOOK其他进程的API函数呢?怎么才能对一个API函数进行全局的HOOK呢?
下面是我的一个简单的“HOOK其他进程API函数”的实现。(对另一进程的MessageBoxA这个函数进行HOOK)
其实里面的应用了两个技术
1。远程线程注入
2。修改IAT,HOOK-API
好了贴出代码如下:
一共是3个文件
install.c 注入程序
fundll.cpp DLL程序
test.cpp 测试程序
CODE:
//-------------------------install.c--------------------------
//
//write by Gxter
//install.c
#include "windows.h"
#include "tlhelp32.h"
#pragma comment(lib,"th32.lib")
const char *pkill="fundll.dll"; //DLL文件的路径
//这个路径很有意思,这个路径是相对于目标进程的,而不是自身进程。
//所以要嘛写成绝对路径,要嘛写成相对于目标进程的相对路径。
//如果写成相对于自身的路径就要麻烦了,本程序就找不到DLL文件了。
char *prosess="test.exe"; //要注入的进程名(目标进程名)
int main()
{
HANDLE hSnap;
HANDLE hkernel32; //被注入进程的句柄
PROCESSENTRY32 pe;
BOOL bNext;
HANDLE hToken;
TOKEN_PRIVILEGES tp;
LUID Luid;
LPVOID p;
FARPROC pfn;
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
{
return 1;
}
if (!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&Luid))
{
return 1;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
tp.Privileges[0].Luid = Luid;
if (!AdjustTokenPrivileges(hToken,0,&tp,sizeof(TOKEN_PRI