在上一节 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. Shell:Day08.笔记

    函数:写一个代码块,用来重复调用的: 1.函数的写法格式 2.参数,在函数名后面直接加,即可:如果在外面  abc(){   函数体 $@  }  abc 1 2 3 4 5   :wq    a.s ...

  2. python--Django从创建一个项目说起

    创建项目 首先进入一个空目录,打开操作命令行,输入: django-admin startproject 项目名称 建立数据库连接 进入项目目录打开settings.py文件,修改以下字段 DATAB ...

  3. java编写规范

    编码规范 转载于:https://www.cnblogs.com/ftl1012/p/javaCode.html 1 前言为确保系统源程序可读性,从而增强系统可维护性,java编程人员应具有基本类似的 ...

  4. redis 练习 a的数据库数据迁移到b数据库

    思路 1.从a redis中获取所有的key 2.判断key的类型 3.根据key的类型,判断使用的是set/hset类型 4.set到b redis中(写入到b redis中)

  5. 2020-3-30 20175110王礼博 Exp3 免杀原理与实践

    目录 1.正确使用msf编码器 2.msfvenom生成如jar之类的其他文件 3.veil 4.加壳工具 5.使用C + shellcode编程 6.使用其他课堂未介绍方法 7.通过组合应用各种技术 ...

  6. python3(二十五) getClassInfo

    """ """ __author__ = 'shaozhiqi' # 如何知道这个对象是什么类型,使用type() print(type(1 ...

  7. Erlang语言之简述及安装

    1. 简述 Erlang在1991年由爱立信公司向用户推出了第一个版本,经过不断的改进完善和发展,在1996年爱立信又为所有的Erlang用户提供了一个非常实用且稳定的OTP软件库并在1998年发布了 ...

  8. docker 安装vim和yum命令

    apt-get updateapt-get install vim -yapt-get install yum -y

  9. AJ学IOS(43)之网易彩票底部自定义TabBar实现切换

    AJ分享,必须精品 效果: 代码: NYTabBarController // // NYTabBarController.m // 彩票lottery // // Created by apple ...

  10. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(七)之Access Control

    Access control ( or implementation hiding) is about "not getting it right the first time." ...