当前位置: 首页 > wzjs >正文

网站建设方案设计今日热点事件

网站建设方案设计,今日热点事件,普通话,做网站优化哪家好InoolineHook需要读写两次内存(先HOOK,再还原),这种Hook方式,性能比较低,具有局限性。今天所讲的HotFixHOOK(热补丁)是InlineHook的升级版 Win32 API特殊性 Win32API的实现代码有这…

InoolineHook需要读写两次内存(先HOOK,再还原),这种Hook方式,性能比较低,具有局限性。今天所讲的HotFixHOOK(热补丁)是InlineHook的升级版

Win32 API特殊性

Win32API的实现代码有这样的特点:起始指令为1个MOV EDI,EDI,上方有多个int3(称之为内存空白区),这些指令实际没有任何意义。

接下来我们通过观察MessageBoxA的反汇编代码来验证这个现象

如图所示,确实存在无意义的指令

HotFix HOOK

我们从上文了解到,Win32 API的实现代码中起始位置处存在一些无意义的指令,因此我们可以通过修改这些无意义的指令来实现HOOK操作。这种方法可以使得进程处于运行状态时临时更改进程内存中的库文件,因此被称为打热补丁,即HotFix HOOK

HOOK原理

如图是MessageBoxA的汇编代码实现处,我们借助这个图方便我们理解HOOK

修改Win32 API实现代码中的第一行指令为jmp,使之可以跳转到上方内存空白处。上方内存空白处修改为我们自己的代码,如执行某API。此时每当程序调用该API时,在执行第一行指令时,都会跳转到上方内存空白处执行我们自己的代码,而不会影响原API实际的函数功能实现

HOOK实现

接下来我们创建dll文件,实现HotFix HOOK

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include <Windows.h>BOOL Hook(const char * pszModuleName, const char * pszFuncName, PROC pfnHookFunc)//HOOK
{BYTE ShortJmp[2] = { 0xEB,0xF9 };//用于替换函数头两个字节mov edi, edi(8B FF)实现短跳上方五个字节BYTE NewCodes[5] = { 0xE9,0, };//替换短跳后的五个字节:一字节指令,四字节函数地址HMODULE hModule = GetModuleHandleA(pszModuleName);//获取目标HOOK函数所处模块的句柄FARPROC FunAddress = GetProcAddress(hModule, pszFuncName);//获取目标HOOK函数地址DWORD dwOldProtect = 0;//保存原有的内存属性VirtualProtect((LPVOID)((DWORD)FunAddress - 5), 7, PAGE_EXECUTE_READWRITE, &dwOldProtect);//修改五字节空白内存读写属性,注意修改的两个头字节一共七个字节DWORD dwFuncAddr = ((DWORD)pfnHookFunc - (DWORD)FunAddress);//计算要跳转的函数相对地址//注意换算结果:跳转函数地址 - E8指令地址处 - E8指令长度 == 跳转函数地址 - (原函数地址处 -  E8指令长度) -  E8指令长度 == 跳转函数地址 -  原函数地址处*(DWORD *)(NewCodes + 1) = dwFuncAddr;memcpy((LPVOID)((DWORD)FunAddress - 5), NewCodes, 5);memcpy(FunAddress, ShortJmp, 2);//修改内存VirtualProtect((LPVOID)((DWORD)FunAddress - 5), 7, dwOldProtect, &dwOldProtect);//恢复原有的内存属性//此时该程序中所有的原函数都被我们修改了,只要调用该函数,都会被HOOKreturn TRUE;
}BOOL UnHook(const char * pszModuleName, const char * pszFuncName)//卸载HOOK 
{BYTE ShortJmp[2] = { 0x8B,0xFF };//还原原有字节BYTE NewCodes[5] = { 0x90,0x90,0x90,0x90,0x90 };//恢复空白内存的一种方式:NOPHMODULE hModule = GetModuleHandleA(pszModuleName);FARPROC   = GetProcAddress(hModule, pszFuncName);DWORD dwOldProtect = 0;VirtualProtect((LPVOID)((DWORD)FunAddress - 5), 7, PAGE_EXECUTE_READWRITE, &dwOldProtect);memcpy((LPVOID)((DWORD)FunAddress - 5), NewCodes, 5);memcpy(FunAddress, ShortJmp, 2);VirtualProtect((LPVOID)((DWORD)FunAddress - 5), 7, dwOldProtect, &dwOldProtect);//此时原函数恢复原来的代码,卸载了HOOKreturn TRUE;
}typedef int //声明函数指针
(WINAPI
* fnMessageBoxA)(_In_opt_ HWND hWnd,_In_opt_ LPCSTR lpText,_In_opt_ LPCSTR lpCaption,_In_ UINT uType);int
WINAPI
MyMessageBoxA(_In_opt_ HWND hWnd,_In_opt_ LPCSTR lpText,_In_opt_ LPCSTR lpCaption,_In_ UINT uType)
{fnMessageBoxA NewFunc = (fnMessageBoxA)((DWORD)MessageBoxA + 2);//这是我们用于HOOK后执行的函数,其指向MessageBoxA并跳过头两个字节,防止被短跳而反复HOOK进入死循环。此时我们调用这个函数时,可以执行原来的MessageBoxA的功能 int bRet = NewFunc(hWnd, "hook", "hook", uType);//执行我们定义的函数,实际上就是执行MessageBoxA的有效部分return bRet;
}BOOL APIENTRY DllMain( HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
{switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:Hook("user32.dll", "MessageBoxA", (PROC)MyMessageBoxA);break;case DLL_THREAD_ATTACH:break;case DLL_THREAD_DETACH:break;case DLL_PROCESS_DETACH:UnHook("user32.dll", "MessageBoxA");break;}return TRUE;
}

 接下来我们将通过如下的代码,演示HotFix HOOK

#include <iostream>
#include <Windows.h>int main()
{MessageBoxA(NULL, "rkvir", "success", MB_OK);system("pause");MessageBoxA(NULL, "rkvir", "success", MB_OK);return 0;
}

首先运行程序,我们发现正常运行程序时,两次弹窗都是原来的窗口:

接下来我们再次重新运行程序,第一次弹窗是原来的窗口:

此时我们注入上文编写的dll文件,然后再次弹窗,发现弹窗变了,HOOK成功了:

http://www.dtcms.com/wzjs/471981.html

相关文章:

  • 微信小程序游戏制作平台广州seo网络营销培训
  • 沈阳品牌设计公司南昌seo搜索优化
  • 做网站二级页面的如何创建网站站点
  • 在网站建设中什么用于搭建页面结构网站关键词收录查询
  • 网站模板定制今日国内重大新闻
  • 短视频网站php源码免费seo关键词排名优化工具
  • 自己的网站怎么和百度做友链seo学校培训
  • 北京市建设城乡建设委员会网站教育培训网页设计
  • 网站直播的功能怎样做最佳搜索引擎
  • 软件服务商网站建设seo
  • 深圳营销型网站建设方案服务商百度seo分析工具
  • 徐州手机网站制作公司网络平台有哪些
  • 传奇世界网页版论坛百度自然搜索排名优化
  • 河池网站制作怎样做一个产品营销方案
  • 云南建设厅查证网站手机百度下载
  • 周期购那个网站做的比较好seo推广方案
  • 做电影网站怎么盈利太原网站制作优化seo公司
  • 寄生虫网站怎么做广告sem是什么意思
  • 重庆网站seo什么意思百度人工客服24小时
  • 建筑公司转让seo技术推广
  • 做网站优化价格怎样做公司网站推广
  • 北京国互网网站建设公司百度推广技巧方法
  • 政府部门门户网站建设方案百度竞价开户流程
  • 定制一个企业网站多少钱流程优化
  • 怎么把网站放到阿里云网络营销形式
  • 做爰插b网站优化网站首页
  • wordpress iis php长沙网站优化推广方案
  • 山东大学青岛校区建设指挥部网站seo软件定制
  • 西安东郊做网站推广竞价托管费用
  • 哪个网站可以接任务做兼职百度投诉中心入口