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

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

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include"detours.h"
//#include"detver.h"
#pragma comment(lib , "detours.lib") // 存储函数指针地址
//指针分为:一般指针,多级指针。 指针函数,函数指针,指针数组 。数组指针。
//static int(*poldsystem) (const char * _Command)=system;
static int( *poldsystem )(const char * _Command) = system;
//自己实现一个system函数
int mysystem( const char * _Command){
const char * ps = NULL;
ps = strstr(_Command ,"calc");
if (ps != NULL)
printf("%s 已经被劫持啦!\n", _Command);
else
printf("run run run 北鼻 !");
return ;
}; //开始拦截
void Hook(){
DetourRestoreAfterWith(); //恢复初始状态
DetourTransactionBegin(); //拦截开始
DetourUpdateThread(GetCurrentThread()); //刷新当前线程
//此处下面填写自己想要拦截的函数
DetourAttach((void **)&poldsystem, mysystem); //实现函数拦截
DetourTransactionCommit(); //提交事务,拦截生效
} //撤销拦截
void UnHook() {
DetourTransactionBegin(); //拦截开始
DetourUpdateThread(GetCurrentThread()); //刷新当前线程
DetourDetach((void **)&poldsystem, mysystem);
DetourTransactionCommit();
}
int main( void ) { system("calc");
Hook();
system("tasklist");
UnHook();
getchar();
//system("pause");
return ;
}

截图:

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

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

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

  1. 利用freopen()函数和fc命令简化程序调试

    大家在参加ACM比赛或者参加c/c++实验技能竞赛的时候,如果遇到大量的输入和大量的输出时,调试起来很不方便.一来如果结果不正确的话,需要重复输入大量数据:二来如果大量输出的话,得仔细检查输出结果与正 ...

  2. 在 Mac OS X 上创建的 .NET 命令行程序访问数据库 (使用Entity Framework 7 )

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  3. Linux Bash命令关于程序调试详解

    转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...

  4. shell中的内建命令, 函数和外部命令

    转自shell中的内建命令, 函数和外部命令 Shell识别三种基本命令:内建命令.Shell函数以及外部命令: (1)内建命令就是由Shell本身所执行的命令.    有些命令是由于其必要性才内建的 ...

  5. c#词频统计命令行程序

    这里将用c#写一个关于词频统计的命令行程序. 预计时间分配:输入处理3h.词条排序打印2h.测试3h. 实际时间分配:输入处理1h.词条排序打印2h.测试3h.程序改进优化6h. 下面将讲解程序的完成 ...

  6. 软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序

    软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序 格式:wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数 ...

  7. 2019-11-29-dotnet-使用-System.CommandLine-写命令行程序

    title author date CreateTime categories dotnet 使用 System.CommandLine 写命令行程序 lindexi 2019-11-29 08:33 ...

  8. 2019-8-31-dotnet-使用-System.CommandLine-写命令行程序

    title author date CreateTime categories dotnet 使用 System.CommandLine 写命令行程序 lindexi 2019-08-31 16:55 ...

  9. dotnet 使用 System.CommandLine 写命令行程序

    在写命令行程序的时候,会遇到命令行解析的问题,以及参数的使用和规范化等坑.现在社区开源了命令行项目,可以帮助小伙伴快速开发命令行程序,支持自动的命令行解析和规范的参数 我写过一篇关于命令行解析的博客C ...

随机推荐

  1. UE4简单AI

    首先做个小小的声明把,由于俺之前也没接触过AI ,所以有一些专业的词汇可能翻译存在各种问题,如果你发现的话,还是希望能够提出来哦,我们一起进步. 记住配合视频食用更佳哦~ 视频连接:http://ww ...

  2. 如何设计点击点击一个div,其他div做出对应反应,以及获取一个节点下的子节点

    <div id="show"> <div>1</div> <div>2</div> <div>3</d ...

  3. C# 获取打印机列表以及串口

    C# 获取打印机列表以及默认打印机.串口列表. /// <summary> /// 获取本地已安装的打印机 /// </summary> /// <returns> ...

  4. C语言程序设计现代方法_基本类型(第七章)

    C语言支持两种不同的数值类型,整数类型,浮点类型. C语言的整数类型有不同的尺寸.int类型通常为32位,但在老的CPU上可能是16位.有些可能是64位. 因此,int型如果在16位CPU上最大值就是 ...

  5. MySQL数据表生成ER图

    遇到没有说明文档的数据库的时候,一张一张表去分析,需要花费很长时间和精力. 幸好有一些工具,可以帮助我们生成ER图,这样看起来就一目了然: 下面我将自己的一次实践记录于下,供参考: 1.下载并安装工具 ...

  6. url 转码 urlencode和 urldecode

    参考网址http://www.t086.com/code/php/function.php-urlencode.php urlencode 将字符串以 URL 编码. 语法: string urlen ...

  7. asp.netMVC4(基础知识----传值问题分析)

    (1)一般在数据交互的时候,都会涉及到前后台间的相互传值,一般的情况下,方法也有多种,下面就后台定义变量往前台传值: 以下是后台代码: /// <summary> /// 展示举报信息 / ...

  8. poj3304Segments(直线与多条线段相交)

    链接 枚举两点(端点),循环遍历与直线相交的线段. #include <iostream> #include<cstdio> #include<cstring> # ...

  9. postgresql如何实现group_concat功能

    MySQL有个聚集函数group_concat, 它可以按group的id,将字段串联起来,如 表:id name---------------1 A2 B1 B SELECT id, group_c ...

  10. Oracle一列的多行数据拼成一行显示字符

    Oracle一列的多行数据拼成一行显示字符   oracle 提供了两个函数WMSYS.WM_CONCAT 和 ListAgg函数.    www.2cto.com   先介绍:WMSYS.WM_CO ...