// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"//old data
typedef BOOL(WINAPI *pProcessInternalW)(HANDLE hToken, LPCWSTR AppName, LPWSTR CmdLine,LPSECURITY_ATTRIBUTES ProcessAttr, LPSECURITY_ATTRIBUTES ThreadAttr,BOOL bIH, DWORD flags, LPVOID env, LPCWSTR CurrDir,LPSTARTUPINFOW si, LPPROCESS_INFORMATION pi, PHANDLE NewToken);DWORD oldProtect;
BYTE JmpByte[5];
BYTE OldByte[5];
HMODULE hModuleW;
void* OpenProcessadr;
extern "C" __declspec(dllexport) bool  CALLBACK H1_OpenProcess();
extern "C" __declspec(dllexport) void UnHook();//卸载钩子函数BOOL APIENTRY DllMain( HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
{switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:H1_OpenProcess();//执行钩子函数break;case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH://UnHook();//卸载钩子break;}return TRUE;
}//facke Function
//
__declspec(dllexport) BOOL CALLBACK MyOpenProcess(HANDLE hToken, LPCWSTR AppName, LPWSTR CmdLine,LPSECURITY_ATTRIBUTES ProcessAttr, LPSECURITY_ATTRIBUTES ThreadAttr,BOOL bIH, DWORD flags, LPVOID env, LPCWSTR CurrDir,LPSTARTUPINFOW si, LPPROCESS_INFORMATION pi, PHANDLE NewToken)
{//自己的函数:设置监控新的进程MessageBox(NULL,L"test", L"Demo",0);//还回去UnHook();//恢复Hook 地址转回去/*执行原先的方法*/pProcessInternalW ProcessInternal;ProcessInternal = (pProcessInternalW)GetProcAddress(hModuleW, "CreateProcessInternalW");BOOL proGet = ProcessInternal(hToken,AppName,CmdLine,ProcessAttr,ThreadAttr,bIH,flags,env, CurrDir,
si,pi,NewToken);H1_OpenProcess();return proGet;
}void* F1_OpenProcess()
{
//找地址void* addr = 0;HMODULE hModule = LoadLibrary(L"kernelbase.dll");//加载dllhModuleW = hModule;addr = (void*)GetProcAddress(hModule, "CreateProcessInternalW");if (addr == 0){MessageBox(NULL, L"FindNothing", L"Address", 0);}return addr;
}__declspec(dllexport) bool CALLBACK H1_OpenProcess()
{void* addr = F1_OpenProcess();OpenProcessadr = addr;if (addr == 0){return false;}//将其权限设为可读写VirtualProtect((void *)addr,5,PAGE_EXECUTE_READWRITE,&oldProtect);JmpByte[0] = 0xE9;*(DWORD *)&JmpByte[1] = (DWORD)((long long)MyOpenProcess - (long long)addr - 5);//保留字节memcpy(OldByte,(void *)addr,5);memcpy((void *)addr,JmpByte,5);return true;}//卸载钩子void UnHook()
{//恢复原先字节memcpy((void*)OpenProcessadr, OldByte, 5);//恢复属性DWORD p;VirtualProtect((void*)OpenProcessadr, 5, oldProtect, &p);
}

下载地址:https://download.csdn.net/download/giser_d/11162166  翻版必究

Hook Windows API调用 C++相关推荐

  1. HOOK Windows API

    HOOK Windows API 只能HOOK 本地的API,适用于入门学习 HOOK API的一般步骤: 1.定义假API函数 假API函数,除了函数名称和真API不一样之外,其它的都要跟真API的 ...

  2. 【转】利用Windows API调用摄像头

    原文地址:http://blog.csdn.net/anya/article/details/4371256 从网上找了很多关于视频捕捉录制及压缩的资料,发现大多数的视频在录制过程中,呈漏斗状,稍微动 ...

  3. C/C++中Windows API 简单的(Callback)回调机制

    首先来说说什么是调用和回调 当一个程序调用windows API时的过程称为Call 当windows API调用程序里面的函数时这称之为Callback 下面举一个简单的例子来说明回调的用途 编写一 ...

  4. hook系统调用(一):爬取MSDN官网上的API调用并改为自己的API(c++正则表达式的应用)

    前言:最近为了完成课题,需要写系统API的钩子程序.然而系统API种类繁多,手动调配是不可能的.而只改写一些API来应付课题又不甘心,想起之前读某位大佬的论文,提到了写爬虫程序并改写的思路,遗憾的是并 ...

  5. 通过Hook API调用打造进程监控程序

    *(收藏)http://hi.baidu.com/linuxetc/blog/item/1b91c813b017e4035baf53a7.html Hook(钩子)是Windows消息处理过程中的一个 ...

  6. c#调用windows api C#简单游戏外挂制作(以Warcraft Ⅲ为例)

    C#简单游戏外挂制作(以Warcraft Ⅲ为例) 网上有很多外挂制作的教程,大多是讲针对大型网络游戏的,主要包含一些抓包.反汇编.C++的知识综合.事实也如此,常见的外挂都是使用VC++写的,从来没 ...

  7. Windows API Hook

    原文地址:http://blog.sina.com.cn/s/blog_628821950100xmuc.html 原文对我的帮助极大,正是因为看了原文,我才学会了HOOK,鉴于原文的排版不是很好, ...

  8. C#中调用Windows API时的数据类型对应关系

    C#中调用Windows API时的数据类型对应关系 原文 C#中调用Windows API时的数据类型对应关系 BOOL=System.Int32 BOOLEAN=System.Int32 BYTE ...

  9. C#调用windows api的要点

    在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的.本文将C#中调用API的要点汇集如下,希 ...

最新文章

  1. StructureMap 代码分析之Widget 之Registry 分析 (1)
  2. java io工作机制_深入分析Java I/O 工作机制
  3. Java虚拟机-第二篇-GC算法与内存分配策略
  4. deepnode处理过的图片_教你用PS快速修复图片脏乱和瑕疵,快来一起学习吧!
  5. java default value_java-如何为@RequestParam的defaultValue提供表达式
  6. php公司共享 管理,php – 管理几个共享重叠函数和类的代码库
  7. web漏洞扫描器原理_每周一喂丨用于渗透测试的10种漏洞扫描工具
  8. Linux(CentOS 7)服务器增加固态硬盘作为系统盘
  9. KEIL编程中如何重定义printf()函数,以便在后来的开发中使用此函数进行串口数据输出
  10. ArcGIS学习总结(三)——空间分析基本操作
  11. ACM与IEEE双Fellow、华人女计算机科学家周以真:可信 AI,未来可期
  12. (2)前端-初识HTML与CSS-table、form
  13. One-Way Streets (oneway)
  14. Numpy:数组(Ndarray)操作之数组的转换
  15. 基于ASP的反垃圾邮件管理系统的设计与实现
  16. 壁挂炉洗澡怎么调水温_松鼠洗澡水温-小松鼠壁挂炉怎么调水温 热死人!
  17. 【146期】面试官问:说一说 RabbitMQ 的几种工作模式和优化建议?
  18. 向量的线性表示和线性相关
  19. 【Java-----日期类(三)之Calendar类详解】
  20. 基于 Java 的外卖自动接单系统(含自动打印小票)实现原理分享

热门文章

  1. Docker+FastDFS+SpringBoot 快速搭建分布式文件服务器
  2. JDK8之后的 接口的新特性:
  3. Linux 查看磁盘容量、查找大文件、查找大目录
  4. Eclipse MAT 安装及使用
  5. vue 获取元素高度
  6. 最简单 NDK 样例
  7. 用HTML+CSS画出一个同心圆
  8. 读书笔记--Head First PHPMySql 目录
  9. 盖茨基金会重发明厕所进展
  10. 无线鼠标可以强制配对_酷冷至尊MM831三模游戏鼠标评测