使用detours技术hook系统API
// myDetours.cpp : 定义控制台应用程序的入口点。
//
#pragma once
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <syelog.h>
#include <detours.h>
#include <TlHelp32.h>
#include <detver.h>
#pragma comment(lib, "detours.lib")
#pragma comment(lib, "syelog.lib")
#define PULONG_PTR PVOID
#define PLONG_PTR PVOID
#define ULONG_PTR PVOID
#define ENUMRESNAMEPROCA PVOID
#define ENUMRESNAMEPROCW PVOID
#define ENUMRESLANGPROCA PVOID
#define ENUMRESLANGPROCW PVOID
#define ENUMRESTYPEPROCA PVOID
#define ENUMRESTYPEPROCW PVOID
#define STGOPTIONS PVOID
//
#pragma warning(disable:4127) // Many of our asserts are constants.
//
static HMODULE s_hInst = NULL;
static CHAR s_szDllPath[MAX_PATH];
using namespace std;
//定义目标API的函数指针
static int (WINAPI* OLD_MessageBoxW)(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) = MessageBoxW;
int WINAPI NEW_MessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType)
{
//修改输入参数,调用原函数
int ret = OLD_MessageBoxW(hWnd, L"输入参数已修改", L"[测试]", uType);
//Syelog(SYELOG_SEVERITY_NOTICE, "Attach failed");
return ret;
}
VOID Hook()
{
//恢复原来状态
DetourRestoreAfterWith();
//拦截开始
DetourTransactionBegin();
//刷新当前线程
DetourUpdateThread(GetCurrentThread());
//这里可以连续多次调用DetourAttach,表明HOOK多个函数
DetourAttach(&(PVOID&)OLD_MessageBoxW, NEW_MessageBoxW);
//拦截生效
DetourTransactionCommit();
}
VOID UnHook()
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
//这里可以连续多次调用DetourDetach,表明撤销多个函数HOOK
DetourDetach(&(PVOID&)OLD_MessageBoxW, NEW_MessageBoxW);
DetourTransactionCommit();
}
void testFunc()
{
MessageBoxW(0, L"正常消息框", L"测试2", 0);
}
int main()
{
MessageBoxW(0, L"正常消息框", L"测试0", 0);
Hook();
MessageBoxW(0, L"正常消息框", L"测试1", 0);
testFunc();
UnHook();
MessageBoxW(0, L"正常消息框", L"测试3", 0);
return 0;
}
使用detours技术hook系统API相关推荐
- 基于Detours库HOOK API
背景 可能我们开发程序的时候,会用到Inline Hook Api的技术.Inline Hook 的原理是在系统访问一个函数的时候先替换原函数入口处的内容跳转到自己设计的Hook函数中,然后在自己函数 ...
- Android技术内幕.系统卷
Android技术内幕.系统卷 01_Android系统概述.pdf: http://www.t00y.com/file/60241452 02_Android系统开发综述.pdf: http://w ...
- php老掉牙的技术,老掉牙技术——HOOK 封包
过几天在写--嘿嘿,这两天不在家. 先开头.用了VC++.NET 2008写DLL文件,本来是不想动这个东西的,毕竟不熟练:不过最近发现汇编更不熟练,导致全用汇编代码实现出了大乱子,过些天有时间回头再 ...
- HOOK Windows API
HOOK Windows API 只能HOOK 本地的API,适用于入门学习 HOOK API的一般步骤: 1.定义假API函数 假API函数,除了函数名称和真API不一样之外,其它的都要跟真API的 ...
- C/C++ HOOK 全局 API
全局 Hook 不一定需要用到 Dll ,比如全局的鼠标钩子.键盘钩子都是不需要 Dll 的,但是要钩住 API,就需要 Dll 的协助了,下面直接放上 Dll 的代码:(注意这里使用的是 MFC D ...
- hook android api伪造设备信息做刷量
hook android api伪造设备信息做刷量 概述 Android平台上app的统计数据都是基于Android的设备信息的,比如首次使用(激活),活跃(日活跃DAU,月活跃MAU)等都需要根据设 ...
- 医院信息系统HIS源码——接口技术:RESTful API + WebSocket + WebService
云HIS系统采用SaaS软件应用服务模式,提供软件应用服务多租户机制,实现一中心部署多机构使用.相对传统HIS单机构应用模式,它可灵活应对区域医疗.医疗集团.医联体.连锁诊所.单体医院等应用场景,并提 ...
- 系统技术方案 系统构架_构架系统时应注意的事项
系统技术方案 系统构架 by Ayelet Sachto 通过Ayelet Sachto 架构系统时要记住的6件事 (6 Things to keep in mind when architectin ...
- 海量数据处理_国家重点研发计划“面向异构体系结构的高性能分布式数据处理技术与系统”简介...
技术发展现状 近年来,数据规模快速增长,使得Hadoop.Spark等大数据批处理系统在现实中得到了广泛应用.同时,应用对数据处理时效性需求不断加强,促使诸如Flink的大数据流式处理系统应运而生.现 ...
- linux sdk 窗口句柄,Venus: 针对Linux平台上,对常用的系统API进行面向对象的封装SDK。...
Venus 项目介绍 Linux平台上,对常用的系统API进行面向对象的封装SDK,使用C++实现,没有使用C++11特效,支持CentOS.Ubuntu.RedHat各个发行版本和不同内核版本使用, ...
最新文章
- Linux之Debian下安装LAMP apt-get安装方式
- mapPartition方法与map方法的区别(转载)
- 记住北京历史上的灾难
- Jzoj4782 Math
- selenium的基本使用
- 第2讲 ZF2.4 最新框架搭建
- 12306数据泄露,12306数据库遭网络公开下载,这里提供个账号安全监测工具
- cad快速看图2020|cad迷你画图2020 附安装教程
- 计算机excel函数试题,2014职称计算机考试Excel试题函数练习题
- 怎样自学3D建模?能学会吗?
- excel冻结行和列_excel如何冻结首行、首列、指定的行和列,这样看数据就方便多了...
- 如何快速开通流量主,提升小程序UV访客
- 身高预测和体脂判断,选择结构练习,C语言
- 数据结构(python语言描述)课后题答案_数据结构课后习题及答案
- 源码软件版本Release RC Beta说明
- 灰度值为50对应的图像RGB计算
- java 打印去小数点_[java]去零(带小数点)
- 应用计算机在金融系统,计算机在金融中的应用
- OpenJDK源码下载
- 动漫的python语言代码_由Python编写的全异步实现的动漫之家(dmzj)漫画批量下载器(爬虫)...
热门文章
- linux vrrp 配置命令,华为交换机VRRP配置实例收集(转)
- 分享常见的视频加密算法原理及其优缺点
- autocad 二次开发 拆分图纸_2,手动创建CAD二次开发项目--AutoCAD二次开发(2020版)...
- c语言图片的裁剪拼接,截屏、图片裁剪、拼接
- UI设计中有哪些常见的风格?
- 从pvlib入门光伏发电系统
- 北航计算机学院国家奖学金,2019年经管学院研究生国家奖学金预审结果公示
- PSV 3.60 固化升级到 3.68 破解完全攻略
- android 6.0长截屏,网页长截图app
- Linux内核调试方法