C/C++ 如何劫持別人家的命令||函數||程序(只能對於window而言)

  要實現下面程序,首先咱們須要三個文件 detours.h ,detours.lib ,detver.h(能夠去網上下載)windows

 

  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被劫持,沒法執行、 spa

  

2.   若是相對其餘的程序或者軟件劫持的話,只須要生成動態庫(.dll)形式。注入到該程序或者軟件模塊中,這樣就能夠了!!  作到這兒,是否是再加上一點點線程的知識,就有想作一個桌面鎖的衝動呀!線程

相關文章
相關標籤/搜索