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)形式。注入到该程序或者软件模块中,这样就可以了!! 做到这儿,是不是再加上一点点线程的知识,就有想做一个桌面锁的冲动呀!
- [接口测试 - 基础篇] 03 unittest测试框架了解多少才够?
- 关关的刷题日记09——Leetcode 80. Remove Duplicates from Sorted Array II
- [linux][kernel]dump kmsg到文件系统中
- [接口测试 - 基础篇] 12 还是要掌握python日志管理模块的
- Spring整合Quartz分布式调度
- [接口测试 - 基础篇] 11 掌握下python解析YAML格式也是需要的
- 如何用Python创建眼下火爆的区块链?这篇干货请收藏
- [接口测试 - 基础篇] 10 别啊,还有INI格式呢,别忘记我
- [接口测试 - 基础篇] 09 其实吧,读写csv格式也是要掌握的
- 【源码分享】机器学习之Python支持向量机
- [接口测试 - 基础篇] 08 封装个基本的excel解析类
- 关关的刷题日记10——Leetcode 1. Two Sum 方法1
- BZOJ 2463: [中山市选2009]谁能赢呢?(新生必做的水题)
- 10个Python面试常问的问题
- 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 数组属性和方法
- 如何在C中定义多行宏定义?
- flutter Icon可以用Image替换
- 如何在C中传递二维数组作为参数?
- volatile相关知识
- c语言二级指针的使用,malloc内存申请
- istio部署模型
- 你所不知道的printf函数
- c语言之——整型的隐式转换与溢出检测
- Istio 的配置分析
- (C99)复合字面量
- 排障集锦:九九八十一难之第十三难!-------------史上最全MySQL 单实例故障排查
- c语言数组越界的避免方法
- 单片机的存储区范例
- 大点干!早点散----------Nginx+Tomcat动静分离
- 大点干!早点散----------深入剖析缓存加速--squid传统代理和透明代理