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)形式。注入到该程序或者软件模块中,这样就可以了!! 做到这儿,是不是再加上一点点线程的知识,就有想做一个桌面锁的冲动呀!
- 大话Git
- AS3中的序列化与反序列化
- 在Entity Framework 中执行T-sql语句
- 按分类统计商品总数的性能优化思考
- 机器学习之Python基础(一)
- 中国造机器人突破新高,将大量挤压就业空间,明天在哪里打工?
- 嵌入式数据库Perst
- USB 设备的PID-Product ID,VID-Vendor ID
- Asp.Net4.0/VS2010新变化(3):webform中也可以直接url路由
- IIS7上部署Asp.Net4.0时UrlRouting的若干问题
- As3.0中的反射
- 域名yg.cc以10.2万元的价格结拍,可搭建“摇滚”音乐平台
- 修改 Windows Host 文件工具
- win7下恢复“经典任务栏”/“快速启动栏”,关闭“窗口自动最大化”
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flink写出数据到HBase的Sink实现
- 「MoreThanJava」Day 4:面向对象基础
- RTSP协议视频平台EasyNVR接入EasyNVS通道不显示任何数据怎么处理?
- RTSP协议视频平台EasyNVR接入视频综合管理平台EasyNVS可以自由修改配置吗?
- 使用Azure人脸API对图片进行人脸识别
- 视频综合管理平台EasyNVS显示的rtsp和rtmp穿透地址错误如何解决?
- 开发RTSP协议视频平台EasyNVR采用ffmpeg集成fdk-aac报no member named “encoderDelay”
- 微信小程序开发实战(17):用画布画一张笑脸
- PHP中Session ID的实现原理分析和实例解析
- 【好文推荐】黑莓OS手册是如何详细阐述底层的进程和线程模型的?
- 简析Spark Streaming/Flink的Kafka动态感知
- 微信小程序开发实战(19):页面导航
- Kotlin:02-函数的声明
- 「MoreThanJava」Day 5:面向对象进阶—继承详解
- 要点1:指针、数组和复合字面量