Hook Windows API调用 C++
// 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++相关推荐
- HOOK Windows API
HOOK Windows API 只能HOOK 本地的API,适用于入门学习 HOOK API的一般步骤: 1.定义假API函数 假API函数,除了函数名称和真API不一样之外,其它的都要跟真API的 ...
- 【转】利用Windows API调用摄像头
原文地址:http://blog.csdn.net/anya/article/details/4371256 从网上找了很多关于视频捕捉录制及压缩的资料,发现大多数的视频在录制过程中,呈漏斗状,稍微动 ...
- C/C++中Windows API 简单的(Callback)回调机制
首先来说说什么是调用和回调 当一个程序调用windows API时的过程称为Call 当windows API调用程序里面的函数时这称之为Callback 下面举一个简单的例子来说明回调的用途 编写一 ...
- hook系统调用(一):爬取MSDN官网上的API调用并改为自己的API(c++正则表达式的应用)
前言:最近为了完成课题,需要写系统API的钩子程序.然而系统API种类繁多,手动调配是不可能的.而只改写一些API来应付课题又不甘心,想起之前读某位大佬的论文,提到了写爬虫程序并改写的思路,遗憾的是并 ...
- 通过Hook API调用打造进程监控程序
*(收藏)http://hi.baidu.com/linuxetc/blog/item/1b91c813b017e4035baf53a7.html Hook(钩子)是Windows消息处理过程中的一个 ...
- c#调用windows api C#简单游戏外挂制作(以Warcraft Ⅲ为例)
C#简单游戏外挂制作(以Warcraft Ⅲ为例) 网上有很多外挂制作的教程,大多是讲针对大型网络游戏的,主要包含一些抓包.反汇编.C++的知识综合.事实也如此,常见的外挂都是使用VC++写的,从来没 ...
- Windows API Hook
原文地址:http://blog.sina.com.cn/s/blog_628821950100xmuc.html 原文对我的帮助极大,正是因为看了原文,我才学会了HOOK,鉴于原文的排版不是很好, ...
- C#中调用Windows API时的数据类型对应关系
C#中调用Windows API时的数据类型对应关系 原文 C#中调用Windows API时的数据类型对应关系 BOOL=System.Int32 BOOLEAN=System.Int32 BYTE ...
- C#调用windows api的要点
在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的.本文将C#中调用API的要点汇集如下,希 ...
最新文章
- StructureMap 代码分析之Widget 之Registry 分析 (1)
- java io工作机制_深入分析Java I/O 工作机制
- Java虚拟机-第二篇-GC算法与内存分配策略
- deepnode处理过的图片_教你用PS快速修复图片脏乱和瑕疵,快来一起学习吧!
- java default value_java-如何为@RequestParam的defaultValue提供表达式
- php公司共享 管理,php – 管理几个共享重叠函数和类的代码库
- web漏洞扫描器原理_每周一喂丨用于渗透测试的10种漏洞扫描工具
- Linux(CentOS 7)服务器增加固态硬盘作为系统盘
- KEIL编程中如何重定义printf()函数,以便在后来的开发中使用此函数进行串口数据输出
- ArcGIS学习总结(三)——空间分析基本操作
- ACM与IEEE双Fellow、华人女计算机科学家周以真:可信 AI,未来可期
- (2)前端-初识HTML与CSS-table、form
- One-Way Streets (oneway)
- Numpy:数组(Ndarray)操作之数组的转换
- 基于ASP的反垃圾邮件管理系统的设计与实现
- 壁挂炉洗澡怎么调水温_松鼠洗澡水温-小松鼠壁挂炉怎么调水温 热死人!
- 【146期】面试官问:说一说 RabbitMQ 的几种工作模式和优化建议?
- 向量的线性表示和线性相关
- 【Java-----日期类(三)之Calendar类详解】
- 基于 Java 的外卖自动接单系统(含自动打印小票)实现原理分享