RING3代码HOOK的原理实现
来源:互联网 发布:黑手党3低配优化补丁 编辑:程序博客网 时间:2024/06/14 02:18
最初看见俄国一份DELPHI代码这样实现,他的优点在于1, 在代理函数的内部不用先UNHOOK,再调用,再重新HOOK,否则多线程下会出问题 2, 没有硬编码,结构性比较好。
#include <iostream>#include <stdio.h>#include <windows.h>using namespace std;#define bt 5unsigned int* Oldpro;typedef int (_stdcall * MYMESSAGE)(IN HWND hWnd, IN LPCSTR lpText, IN LPCSTR lpCaption, IN UINT uType);int _stdcall Mymessage(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType){if(strcmp(lpText,"ooooo")==0){cout<<"xxxx"<<endl;return 1;}return int(((MYMESSAGE)Oldpro)(hWnd,lpText,lpCaption,uType));}bool ApiHook(LPVOID TargetPro,LPVOID NewPro,LPVOID* Oldpro){DWORD dwOldpro;BOOL nVirtual;nVirtual=VirtualProtect(TargetPro,5,PAGE_EXECUTE_READWRITE,&dwOldpro);if(nVirtual==0){cout<<"virtualprotect error"<<endl;return false;}*Oldpro=new unsigned char[bt+5];memcpy(*Oldpro,TargetPro,bt);*((unsigned char*)(*Oldpro)+5)=0xe9;*((unsigned int*)(*Oldpro)+bt+1)=(unsigned int)(TargetPro)-(unsigned int)(*Oldpro)-5;*(unsigned char*)TargetPro=0xe9;*(unsigned int*)((unsigned int)TargetPro+1)=(unsigned int)(NewPro)-(unsigned int)(TargetPro)-5;if(VirtualProtect(TargetPro,bt,dwOldpro,0)){cout<<"virtualprotect error"<<endl;return false;}return true;}bool UnApiHook(LPVOID TargetPro,LPVOID Oldpro){DWORD dwOldpro;if(VirtualProtect(TargetPro,bt,PAGE_EXECUTE_READWRITE,&dwOldpro)){memcpy(TargetPro,Oldpro,bt);if(VirtualProtect(TargetPro,bt,dwOldpro,0)){return true;}}return false;}void main(){MessageBox(NULL,"xxxxx","before hook",MB_OK);if(ApiHook(MessageBox,(void*)Mymessage,(LPVOID*)&Oldpro)){cout<<"sucess"<<endl;}MessageBox(NULL,"ooooo","after hook",MB_OK);UnApiHook(MessageBox,Oldpro);}
- RING3代码HOOK的原理实现
- RING3代码HOOK的原理实现 (学习笔记1)
- vc++实现Ring3全局HOOK
- vc++实现Ring3全局HOOK
- vc++实现Ring3全局HOOK
- vc++实现Ring3全局HOOK
- ring3下的IAT HOOK
- 关于ring3到ring0的代码实现
- 汇编ring3下实现HOOK API
- API拦截—实现Ring3全局HOOK
- API拦截—实现Ring3全局HOOK
- Ring3下Hook API实现分析
- Ring3下Hook API实现分析
- Ring3下Hook API实现分析
- Ring3下实现进程保护,不用hook
- 0.ring3-hook-得到线程入口地址的方式-线程创建前kill线程(随手代码)
- API HOOK的实现原理
- ring0调用Ring3的代码
- 高房价绑架了中国经济...
- 爱琴海的伤感空间日志发布:七月的雨,落得太敷衍
- BIOS设置图解教程
- 深入Managed DirectX9
- CentOS 5 安装 php53-mcrypt
- RING3代码HOOK的原理实现
- CSS之Position详解
- Android的BUG(五)- Android跨进程使用GraphicBuffer的野指针问题
- 黑马程序员_枚举小结
- modem assert
- iOS开发之int,NSInteger,NSUInteger,NSNumber的使用
- 解决华为手机不显示log的设置
- Hugepage、VLM、SGA、vm.nr_hugepages和Share memory
- 十月31日