Hook技术2内存中修改模块开头代码为跳转语句Word格式文档下载.docx
- 文档编号:22587865
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:7
- 大小:15.07KB
Hook技术2内存中修改模块开头代码为跳转语句Word格式文档下载.docx
《Hook技术2内存中修改模块开头代码为跳转语句Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Hook技术2内存中修改模块开头代码为跳转语句Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。
下面给出一个封装好的类:
//////////////////////////////////////////////////////////
//ULHook.h
#ifndef__ULHOOK_H__
#define__ULHOOK_H__
#include<
windows.h>
classCULHook
{
public:
CULHook(LPSTRpszModName,LPSTRpszFuncName,PROCpfnHook);
~CULHook();
//取消挂钩
voidUnhook();
//重新挂钩
voidRehook();
protected:
PROCm_pfnOrig;
//目标API函数的地址
BYTEm_btNewBytes[8];
//新构建的个字节
BYTEm_btOldBytes[8];
//原来个字节
HMODULEm_hModule;
};
#endif//__ULHOOK_H__
///////////////////////////////////////////
//ULHook.cpp文件
#include"
ULHook.h"
CULHook:
:
CULHook(LPSTRpszModName,LPSTRpszFuncName,PROCpfnHook)
//jmpeax==0xFF,0xE0
//生成新的执行代码
BYTEbtNewBytes[8]={0xB8,0x00,0x00,0x40,0x00,0xFF,0xE0,0x00};
memcpy(m_btNewBytes,btNewBytes,8);
*(DWORD*)(m_btNewBytes+1)=(DWORD)pfnHook;
//加载指定模块,取得API函数地址
m_hModule=:
LoadLibrary(pszModName);
if(m_hModule==NULL)
{
m_pfnOrig=NULL;
return;
}
m_pfnOrig=:
GetProcAddress(m_hModule,pszFuncName);
//修改原API函数执行代码的前个字节,使它跳向我们的函数
if(m_pfnOrig!
=NULL)
DWORDdwOldProtect;
MEMORY_BASIC_INFORMATIONmbi;
:
VirtualQuery(m_pfnOrig,&
mbi,sizeof(mbi));
VirtualProtect(m_pfnOrig,8,PAGE_READWRITE,&
dwOldProtect);
//保存原来的执行代码
memcpy(m_btOldBytes,m_pfnOrig,8);
//写入新的执行代码
WriteProcessMemory(:
GetCurrentProcess(),(void*)m_pfnOrig,
m_btNewBytes,sizeof(DWORD)*2,NULL);
VirtualProtect(m_pfnOrig,8,mbi.Protect,0);
}
~CULHook()
Unhook();
if(m_hModule!
FreeLibrary(m_hModule);
voidCULHook:
Unhook()
VirtualQuery(m_pfnOrig,&
mbi,sizeof(mbi));
//写入原来的执行代码
m_btOldBytes,sizeof(DWORD)*2,NULL);
Rehook()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hook 技术 内存 修改 模块 开头 代码 跳转 语句
![提示](https://static.bdocx.com/images/bang_tan.gif)