添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
听话的跑步鞋  ·  iOS - Sqlite ...·  11 月前    · 
魁梧的八宝粥  ·  杭州/北京内推 | ...·  1 年前    · 
强悍的红烧肉  ·  An error issue after ...·  1 年前    · 

编译Detours工程。
在安装目录C:\Program Files\Microsoft Research\Detours Express 3.0\src目录下的是工程的 源文件

(1)打开VS2013命令行工具,进入src目录。

(2)使用nmake( linux 下是make)命令编译生成静态库

劫持的原理就是把目标函数的指针的指向修改为自定义函数的地址。
函数是放在内存中的代码区,所以劫持与代码区密切相关。实现劫持需要使用detours。

第二步:将所需要的头文件 静态库文件放在当前工程路径下

#include<stdlib.h>

#include<stdio.h>

#include<Windows.h>

#include "detours.h" //载入头文件第三步

#pragma comment(lib,"detours.lib") //表明要使用静态库

//第四步:定义旧函数指针指向原来的函数

static int (*oldsystem)(const char *_Command) = system;

//第五步:声明一个和原函数参数相同的新函数

int newsystemA(char *_Command)

//这里相当于一个加锁:只要是tasklist我就劫持,不让你执行。

//char *p = strstr(_Command, "tasklist");

//if (p == NULL)

//oldsystem(_Command);

//else

//printf("%s", _Command); //找到了,禁止执行

//return 0;

printf("%s", _Command);   //找到了,禁止执行

return 0;

//第六步:开始拦截

//开始拦截

void Hook()

DetourRestoreAfterWith();//恢复原来状态,

DetourTransactionBegin();//拦截开始

DetourUpdateThread(GetCurrentThread());//刷新当前线程

//这里可以连续多次调用DetourAttach,表明HOOK多个函数

DetourAttach((void **)&oldsystem, newsystemA);//实现函数拦截

DetourTransactionCommit();//拦截生效

//第七步:取消拦截

//取消拦截

void UnHook()

DetourTransactionBegin();//拦截开始

DetourUpdateThread(GetCurrentThread());//刷新当前线程

//这里可以连续多次调用DetourDetach,表明撤销多个函数HOOK

DetourDetach((void **)&oldsystem, newsystemA);//撤销拦截函数

DetourTransactionCommit();//拦截生效

//第八步:main函数运行,大功告成

void main()

system("calc");

Hook();

system("calc");

system("tasklist");

//UnHook();

getchar();

当然我们还可已使用如下方式实现劫持其他的进程

注射的方式:

_declspec(dllexport)void go()

Hook();

在这里要注意:劫持的时候需要将 Debug 模式变成Release模式。

最后还可以劫持系统,也就是阻止系统创建进程。劫持系统也就是劫持系统函数而已。

GPU软件工程师 29.4k