劫持打开计算器
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<string.h>
#include"detours.h"
#pragma comment(lib,"detours.lib")
//劫持自己
static int (*oldsystem)(const char * _Command) = system;//创建函数指针等于地址
int newsystem(const char * _Command) //新的函数禁止做东西
{
printf("%s",_Command);
return 0;
}
int newsystemA(const char * _Command) //新的函数过滤
{
char *p=strstr(_Command,"tasklist");
if(p==NULL)
{
oldsystem(_Command);
}else
{
printf("%s禁止执行",_Command);
return 0;
}
return 0;
}
//开始拦截
void Hook()
{
DetourRestoreAfterWith();//恢复原来状态,
DetourTransactionBegin();//拦截开始
DetourUpdateThread(GetCurrentThread());//刷新当前线程
//这里可以连续多次调用DetourAttach,表明HOOK多个函数
DetourAttach((void **)&oldsystem, newsystemA);//实现函数拦截
DetourTransactionCommit();//拦截生效a
}
//取消拦截
void UnHook()
{
DetourTransactionBegin();//拦截开始
DetourUpdateThread(GetCurrentThread());//刷新当前线程
//这里可以连续多次调用DetourDetach,表明撤销多个函数HOOK
DetourDetach((void **)&oldsystem, newsystemA); //撤销拦截函数
DetourTransactionCommit();//拦截生效
}
void main()
{
system("calc");
Hook();
system("calc");
system("tasklist");
getchar();
system("pause");
}