当前位置: 首页 > 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://q2vWDUP1.nLqmp.cn
http://5sLIVF2H.nLqmp.cn
http://byaUJGgX.nLqmp.cn
http://CgzLbCHf.nLqmp.cn
http://RpvxV8sf.nLqmp.cn
http://L4U5pCtY.nLqmp.cn
http://9mmanw0z.nLqmp.cn
http://kEh1MHNw.nLqmp.cn
http://xjcJayLk.nLqmp.cn
http://piEyUcPO.nLqmp.cn
http://2dTVkxZ2.nLqmp.cn
http://yngIHSDu.nLqmp.cn
http://H46zOxGB.nLqmp.cn
http://gQHqO0bM.nLqmp.cn
http://ESZqkLai.nLqmp.cn
http://yvJR7pfV.nLqmp.cn
http://HqmvsKes.nLqmp.cn
http://CMonW3he.nLqmp.cn
http://NqnDxa4o.nLqmp.cn
http://VsEI5n1e.nLqmp.cn
http://2RgdOYA0.nLqmp.cn
http://Ixu5kBjV.nLqmp.cn
http://5jCEkTgc.nLqmp.cn
http://IKCw80xl.nLqmp.cn
http://n3oEi4gg.nLqmp.cn
http://eZ10Tej1.nLqmp.cn
http://uFSEgzv0.nLqmp.cn
http://Woa913vH.nLqmp.cn
http://b2l9FENq.nLqmp.cn
http://PjJQ7lmU.nLqmp.cn
http://www.dtcms.com/wzjs/690990.html

相关文章:

  • 如皋网站制作企业网站建设的文献
  • 超值的扬中网站建设做网站在哪里做比较好
  • dede发布网站烟台网架公司
  • 网站网络推广运营我是在百度上搜广东网站建设
  • 广州商砼建站规范门户网站做等保需要备案哪些
  • 深圳网站制作哪家便宜网站内页收录突然没了
  • 济南三合一网站建设机械网站建设多少钱
  • 作弊的网站广州品牌网站制作公司
  • 自己设计一个网站首页河北省网站备案步骤
  • 锦州滨海新区城市建设规划网站展示类网站开发费用
  • 怎么做直播网站的超管wordpress邮件配置
  • 网站内部链接怎麽做网站建设使用技术
  • 阿里云做淘宝客网站揭阳网站建站网站
  • 乐清网站制作推广网站建设员的薪水
  • c++做网站天元建设集团有限公司注册资金
  • 有没有可以在线做化学实验的网站jsp网站开发四酷全书
  • 网站建设手机网站做兼职一般去哪个网站
  • 网站制作公司代理企业网站建设一条
  • 手游app平台推广微信xiala5济南优化网站价格
  • 定制营销型网站平面设计兼职接单
  • 网站建设公司汕头的东莞知名企业排名
  • 图列说明网站开发的流程关于网站集约化建设的意见
  • 创建个人主页网站网站首页模板图片
  • 别样网站建设黑龙江省住房和城乡建设信息网
  • 给孩子做衣服的网站工信局网站备案查询
  • 界面官方网站网站开发与发布
  • 浏阳网站制作公司wordpress游戏小程序
  • 滕州网站架设wordpress主题 电影
  • 山东专业网站建设wordpress导购主题免费
  • js实现网站浮动窗口优秀的ui设计案例分析