C/C++ 如何劫持别人家的命令||函数||程序(只能对于window而言)
要实现下面程序,首先我们需要三个文件 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而言)的更多相关文章
- 利用freopen()函数和fc命令简化程序调试
大家在参加ACM比赛或者参加c/c++实验技能竞赛的时候,如果遇到大量的输入和大量的输出时,调试起来很不方便.一来如果结果不正确的话,需要重复输入大量数据:二来如果大量输出的话,得仔细检查输出结果与正 ...
- 在 Mac OS X 上创建的 .NET 命令行程序访问数据库 (使用Entity Framework 7 )
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- Linux Bash命令关于程序调试详解
转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...
- shell中的内建命令, 函数和外部命令
转自shell中的内建命令, 函数和外部命令 Shell识别三种基本命令:内建命令.Shell函数以及外部命令: (1)内建命令就是由Shell本身所执行的命令. 有些命令是由于其必要性才内建的 ...
- c#词频统计命令行程序
这里将用c#写一个关于词频统计的命令行程序. 预计时间分配:输入处理3h.词条排序打印2h.测试3h. 实际时间分配:输入处理1h.词条排序打印2h.测试3h.程序改进优化6h. 下面将讲解程序的完成 ...
- 软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序
软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序 格式:wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数 ...
- 2019-11-29-dotnet-使用-System.CommandLine-写命令行程序
title author date CreateTime categories dotnet 使用 System.CommandLine 写命令行程序 lindexi 2019-11-29 08:33 ...
- 2019-8-31-dotnet-使用-System.CommandLine-写命令行程序
title author date CreateTime categories dotnet 使用 System.CommandLine 写命令行程序 lindexi 2019-08-31 16:55 ...
- dotnet 使用 System.CommandLine 写命令行程序
在写命令行程序的时候,会遇到命令行解析的问题,以及参数的使用和规范化等坑.现在社区开源了命令行项目,可以帮助小伙伴快速开发命令行程序,支持自动的命令行解析和规范的参数 我写过一篇关于命令行解析的博客C ...
随机推荐
- Linux安装配置JDK
如果想看Windows下的安装,请访问此链接: http://www.cnblogs.com/yoyotl/p/5101321.html 1. 去官网下载Linux版本的jdk安装包,(我下载的是ta ...
- jquery加载页面的方法
jquery加载页面的方法(页面加载完成就执行),建议大家看下windows.onload与$(document).ready之间的区别. 1.$(function(){ $("#a&q ...
- iOS适配(Masonry)
1.各屏幕大小 设备 尺寸 像素 点 iPhone \ iPhone 3G \ iPhone 3GS 3.5 inch 320 x 480 320 x 480 iPhone 4 \ iPhone 4S ...
- hdu 5023 A Corrupt Mayor's Performance Art 线段树
A Corrupt Mayor's Performance Art Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 100000/100 ...
- HTML笔记(五)表单<form>及其相关元素
表单标签<form> 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中输入信息的元素. 输入标签<input> 输入标签的输入类型由其类型属性type决定.常见的输入 ...
- nginx使用ssl模块配置HTTPS支持
默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,通常这些文件并不在同一个软件包中.通常这 ...
- delegate基于on
前几天看到事件委托的时候,关于live()方法讲的不是很详细,就去搜了一下关于live()和delegate()的,最后看源码发现bind()和delegate()都是由on()实现的,感兴趣的朋友可 ...
- javascript知识总汇
命名: 变量名和函数命名:第一个单词小写以后每个单词首字母大写.geteElementById() 对象命名:每个单词首字母大写. 数据类型 typeof()方法返回数据类型. number数据类型: ...
- 阿里商业评论 | 互联网POI数据及其在营销中的应用
阿里商业评论 | 互联网POI数据及其在营销中的应用 时间 2014-11-05 10:40:50 阿里研究院 原文 http://www.aliresearch.com/index.php?m- ...
- go中间的&和*
package main import "fmt" func main() { var a int = 1 var b *int = &a var c **int = &a ...