• c语言-----劫持自己02


       在上一节 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 0;
    }

    3. 解释说明

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

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

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

  • 相关阅读:
    mybatis数组和集合的长度判断及插入
    Getting Started with JavaFX
    抛出 NoClassDefFoundError: javax/validation/constraints/Size 问题的解决方法
    slf4japi整合maven 工程日志配置文件
    一场因OpenJDK引发的血案 之JavaFx
    Spring Boot logback springProperty 设置默认值
    java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive
    Linux curl命令使用代理、以及代理种类介绍
    Mybatis异常_03_Invalid bound statement (not found)
    Spring Boot 中文乱码问题解决方案汇总
  • 原文地址:https://www.cnblogs.com/mofei1999/p/11762264.html
Copyright © 2020-2023  润新知