在上一节 c语言-----劫持原理01 已经叙述了劫持原理,下边正式进入劫持实战

1. 需要实现的功能

  在c语言中

     system("notepad") 可以打开一个记事本

     system("mspaint") 可以打开画图工具

  所以这次我们需要把 可以打开一个记事本  这个功能更改为 在控制台打印 "notepad"

              可以打开画图工具      这个功能更改为 在控制台打印 "mspaint"  ,即实现监控的日志功能

2. 需要的工具

  vs2017

  Detours

3.  劫持原理实现

  (1) 查看system()函数定义

  _DCRTIMP int __cdecl system(
_In_opt_z_ char const* _Command
);

  去掉一些不需要的符号

 int system( char const* _Command );

  (2) 获取原system()的地址

int (*plodsystem)(char const* _Command) = system;

    (3) 劫持后system()函数

int newsystem(char const* _Command){
printf("你执行的是:%s", _Command);
}

  (4) 劫持函数

void hook(){
DetourRestoreAfterWith(); //恢复之前的状态
DetourTransactionBegin(); //开始劫持
DetourUpdateThread(GetCurrentThread());//更新当前线程
DetourAttach((void **)&plodsystem, newsystem);//劫持
DetourTransactionCommit(); //提交
}

  (5) 修改vs配置  Debug -> Release

  (6) 完整源代码

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include "detours.h"
#pragma comment(lib,"detours.lib") int (*plodsystem)(char const* _Command) = system;
int newsystem(char const* _Command){
printf("你执行的是:%s", _Command);
}
void hook(){
DetourRestoreAfterWith();
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach((void **)&plodsystem, newsystem);
DetourTransactionCommit();
}
int main(){ system("notepad");
hook();
system("notepad");
return ;
}

3. 解释说明

  system()函数是一个int类型的函数 int system( char const* _Command );

  所以需要一个一级函数指针plodsystem

  获取plodsystem的地址 &plodsystem,需要一个二级指针

c语言-----劫持自己02的更多相关文章

  1. c语言-----劫持原理

    1. 劫持原理介绍 (1) 通过劫持技术我们可以实现某些进程的拦截,比如禁止创建文件,禁止打开qq,禁止关机等等一系列的操作 (2) 弹窗拦截就是最常见的一种劫持技术的实现. 2. 使用的工具 (1) ...

  2. | C语言I作业02

    C语言I博客作业02 标签: 18软件2班 李煦亮 问题 答案 这个作业属于那个课程 C语言程序设计I 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/C ...

  3. [程序设计语言]-[核心概念]-02:名字、作用域和约束(Bindings)

    本系列导航 本系列其他文章目录请戳这里. 1.名字.约束时间(Binding Time) 在本篇博文开始前先介绍两个约定:第一个是“对象”,除非在介绍面向对象语言时,本系列中出现的对象均是指任何可以有 ...

  4. C语言实现二叉树-02版

    ---恢复内容开始--- 昨天,提交完我们的二叉树项目后,今天早上项目经理早早给我打电话: 他说,小伙子干的不错.但是为什么你上面的insert是recusive的呢? 你难道不知道万一数据量大啦!那 ...

  5. C语言范例学习02

    第二章 指针 算是重点吧,这也是C语言的特色啊,直接访问物理存储. 重点: 指针就是一个存放它指向变量地址的变量,好绕口.   区分*在定义是与引用是的作用.   区分*.&的不同.   指针 ...

  6. 【C语言学习】-02 分支结构

    本文目录: 一.BOOL布尔类型 二.关系运算符 三.逻辑运算符 四.if语句 五.枚举类型 六.switch语句 一.BOOL布尔类型 BOOL数据类型,是一种表示非真即假的数据类型,布尔类型的变量 ...

  7. c语言基础学习02

    =============================================================================涉及到的知识点有:include有两种用法.{ ...

  8. R语言编程艺术#02#矩阵(matrix)和数组(array)

    矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数.所以矩阵也是和向量一样,有模式(数据类型)的概念.(但反过来,向量却不能看作是只有一列或一行的矩阵. 数组(array)是R里更一 ...

  9. C语言入门:02.第一个C语言程序

    一.开发工具的选择(1)可以用来写代码的工具:记事本.UltraEdit.Vim.Xcode等(2)选择Xcode的原因:苹果官方提供的开发利器.简化开发过程.有高亮显示功能 (3)使用Xcode新建 ...

随机推荐

  1. RocketMQ的高可用集群部署

    RocketMQ的高可用集群部署 标签(空格分隔): 消息队列 部署 1. RocketMQ 集群物理部署结构 Rocket 物理部署结构 Name Server: 单点,供Producer和Cons ...

  2. PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)

    PTA数据结构与算法题目集(中文)  7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市 ...

  3. Java Interger小知识

    Integer装箱与拆箱 装箱: Integer i = 10; 相当于:Integer i = Integer.valueOf(10); 拆箱: Integer i = 10; //装箱 int t ...

  4. app测试的一些较为重要的测试点

    安装测试 从不同的手机所自带的不同的版本的软件商城里面下载抖音并安装查看是否成功 安装后是否能正常运行安装后的文件和文件夹是否写到了指定的目录里 安装过程中取消安装,安装的文件是否在指定的目录里 安装 ...

  5. golang--安装golang并安装grpc-grpcgateway环境

    安装goland环境 下载golang安装包,国内环境打开https://studygolang.com/dl,国外环境打开https://golang.google.cn/dl/下载对应系统的安装包 ...

  6. django-rest-framework视图和url

    django-rest-framework视图 GenericView class GenericView(GenericAPIView): queryset = models.Role.object ...

  7. C语言 刷新缓冲区

    fflush int fflush(FILE* stream); 用于清空文件缓冲区,如果文件是以写的方式打开 的,则把缓冲区内容写入文件. eg: 1. #include <stdio.h&g ...

  8. 21.1 Math(数学运算)方法使用 、工具类

    package day21_static.meathDemo; //Math: 包含一些基本的数学运算方法 //从api中搜Math,它都用的static修饰. public class MethDe ...

  9. 聊一聊深拷贝和浅拷贝(JS)

    在 JS 中数据类型分为值类型和引用类型,对于值类型,变量中存放的是具体的值,而对于引用类型,变量中存放的是地址. 对于值类型: const a = 3; let b = a; b = 4; cons ...

  10. git中常用命令的总结

    一.git stash  1.git  stash 保存当前工作进度,会把暂存区和工作区的改动保存起来.执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动. ...