C/C++ 如何劫持别人家的命令||函数||程序(只能对于window而言)

  要实现下面程序,首先我们需要三个文件 detours.h ,detours.lib ,detver.h(可以去网上下载)

 

  1. 首先让我们看看,一个最简单的C程序,如何劫持system函数.

 

 1 #include<stdio.h>

 2 #include<stdlib.h>

 3 #include<string.h>

 4 #include<windows.h>

 5 #include"detours.h"

 6 //#include"detver.h"

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

 8 

 9 // 存储函数指针地址

10 //指针分为:一般指针,多级指针。 指针函数,函数指针,指针数组 。数组指针。

11 //static int(*poldsystem) (const char * _Command)=system;

12 static int( *poldsystem )(const char * _Command) = system;

13 //自己实现一个system函数

14 int mysystem( const char *    _Command){

15     const char * ps = NULL;

16          ps = strstr(_Command ,"calc");

17     if (ps != NULL)

18         printf("%s 已经被劫持啦!\n", _Command);

19     else

20         printf("run run run 北鼻 !");

21     return 1;

22 };

23 

24 //开始拦截

25 void Hook(){

26     DetourRestoreAfterWith();   //恢复初始状态

27     DetourTransactionBegin();   //拦截开始

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

29     //此处下面填写自己想要拦截的函数

30     DetourAttach((void **)&poldsystem, mysystem);    //实现函数拦截

31     DetourTransactionCommit(); //提交事务,拦截生效

32 }

33 

34 //撤销拦截

35 void UnHook() {

36     DetourTransactionBegin();   //拦截开始

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

38     DetourDetach((void **)&poldsystem, mysystem);

39     DetourTransactionCommit();

40 }

41 int main( void ) {

42 

43     system("calc");

44     Hook();

45     system("tasklist");

46     UnHook();

47     getchar();

48     //system("pause");

49  return 0;

50 }

截图:

   结果显示。第一个system实现了,但是第二个system被劫持,无法执行、 

  C/C++ 如何劫持别人家的命令||函数||程序(只能对于window而言)

2.   如果相对其他的程序或者软件劫持的话,只需要生成动态库(.dll)形式。注入到该程序或者软件模块中,这样就可以了!!  做到这儿,是不是再加上一点点线程的知识,就有想做一个桌面锁的冲动呀!

你可能感兴趣的:(window)