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

时间:2022-05-05
本文章向大家介绍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被劫持,无法执行、 

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