C++黑客编程揭秘与防范之利用修改内存的方式实现进程注入
来源:互联网 发布:网络上纳尼是什么意思 编辑:程序博客网 时间:2024/05/08 01:36
头文件ILHook.h
/********************************************************************purpose:利用修改内存的方式来实现进程注入*********************************************************************/#pragma once#include <Windows.h>class CILHook{public: CILHook(void); ~CILHook(void); BOOL Hook(LPSTR pszModuleName, LPSTR pszFunName, PROC procFun); void UnHook(); BOOL ReHook(); PROC m_pfnOld; BYTE m_bOld[5]; BYTE m_bNew[5];};
源文件ILHook.cpp
#include "StdAfx.h"#include "ILHook.h"CILHook::CILHook(void){ m_pfnOld = NULL; ZeroMemory(m_bNew, 5); ZeroMemory(m_bOld, 5);}CILHook::~CILHook(void){ UnHook();}BOOL CILHook::Hook( LPSTR pszModuleName, LPSTR pszFunName, PROC procFun ){ BOOL bRet = FALSE; m_pfnOld = (PROC)GetProcAddress(GetModuleHandle(pszModuleName), pszFunName); if (m_pfnOld != NULL) { //保证旧的数据 DWORD dwNum(0); ReadProcessMemory(GetCurrentProcess(), m_pfnOld, m_bOld, 5, &dwNum); //构造JMP指令, 39是JMP指令的机器码 m_bNew[0] = '\xe9'; //修改目标函数的入口地址 *(DWORD*)(m_bNew+1) = DWORD(procFun) - DWORD(m_pfnOld) - 5; WriteProcessMemory(GetCurrentProcess(), m_pfnOld, m_bNew, 5, &dwNum); bRet = TRUE; } return bRet;}void CILHook::UnHook(){ if (m_pfnOld != NULL) { DWORD dwNum(0); WriteProcessMemory(GetCurrentProcess(), m_pfnOld, m_bOld, 5, &dwNum); }}BOOL CILHook::ReHook(){ if (m_pfnOld != NULL) { DWORD dwNum(0); WriteProcessMemory(GetCurrentProcess(), m_pfnOld, m_bNew, 5, &dwNum); return TRUE; } return FALSE;}
测试文件
#include "StdAfx.h"#include "MainHook.h"CILHook MsgHook;int WINAPI myMessageBoxA(HWND hwnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType){ MsgHook.UnHook(); MessageBox(hwnd, "hook", lpCaption, uType); //MessageBox(hwnd, lpText, lpCaption, uType); MsgHook.ReHook(); return IDOK;}void testHook(){ MessageBox(NULL, "test", "information", MB_YESNO); MsgHook.Hook("User32.dll", "MessageBoxA", (PROC)myMessageBoxA); MessageBox(NULL, "test", "information", MB_OK); MsgHook.UnHook(); MessageBox(NULL, "test", "information", MB_OK);}
- C++黑客编程揭秘与防范之利用修改内存的方式实现进程注入
- C++黑客编程揭秘与防范.pdf
- <C++黑客编程揭秘与防范>笔记心得与更正
- C++黑客编程揭秘与防范之创建一个不会被删除和文件夹
- 《C++黑客编程揭秘与防范》勘误一
- 书评第001篇:《C++黑客编程揭秘与防范》
- 《C++黑客编程揭秘与防范》(第二版)
- C++黑客编程揭秘与防范(第2版)——互动出版网
- 浅析利用钩子注入DLL的原理与防范
- 黑客知识:注入程序带来的攻击及防范
- 网络安全之---SQL注入与防范技术
- 利用Google作黑客攻击的原理和防范
- SQL注入的实现原理和防范
- 网站注入与防范的方法
- 网站注入与防范的常用方法
- 网站注入与防范的方法
- SQL注入攻击的原理与防范
- 黑客攻防之 SYN攻击基本原理与防范技术
- 速写在网站建设中的重要地位
- android 蓝牙的UUID
- 用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
- apk漏洞记录1:伪加密+设备管理器不可删+webview漏洞
- Rspec 如何组织测试用例?
- C++黑客编程揭秘与防范之利用修改内存的方式实现进程注入
- Uninstall EasyBCD with WindowsUninstaller.Org Removal Tips
- 链接连个服务器查询信息
- 逐行隔行扫描的超详细讲解
- HTTP POST GET 本质区别详解
- IOS-info.plist详解
- struts2 学习笔记之 struts.xml 配置解析
- OCP-1Z0-053-V12.02-532题
- 怎样加快C++代码的编译速度