zoukankan      html  css  js  c++  java
  • 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 已经被劫持啦!
    ", _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)形式。注入到该程序或者软件模块中,这样就可以了!!  做到这儿,是不是再加上一点点线程的知识,就有想做一个桌面锁的冲动呀!

  • 相关阅读:
    linux ipsec
    inotify+rsync
    多实例tomcat
    Http和Nginx反代至Tomcat(LNMT、LAMT)
    cisco ipsec
    ansible基础
    Qt 汉字乱码
    Model/View
    面对焦虑
    QT中QWidget、QDialog及QMainWindow的区别
  • 原文地址:https://www.cnblogs.com/gongxijun/p/4357626.html
Copyright © 2011-2022 走看看