C/C++实现DLL注入(入门),完整过程

什么是DLL注入

所谓DLL注入,就是将一个DLL(动态链接库)放入要被注入的进程的内存空间里,让它成为进程的一部分。

关于本教程

本教程是一个入门教程,实践的内容是用DLL注入一个自己写的简单的WinForms窗体程序,在DLL中使用了Detours库,用于修改被注入程序窗口提示函数的内存地址。
本教程使用的IDE为Visual Studio

关于Detours:

Detours是一个由微软开发的可以用于捕获系统API、拦截函数的函数库

需要创建的项目:

  1. 一个DLL项目
  2. 一个用于注入DLL的(中转)程序
  3. 一个用于被注入的靶子程序

开始!GET STARTED

第一步:创建一个DLL项目

在VS中创建一个DLL项目,新建源文件myhook.cpp

第二步:下载并准备好Detours

下载地址: https://github.com/microsoft/detours
解压后,打开x86/x64(根据自己的CPU选择) Native Tools Command Prompt
C/C++实现DLL注入(入门),完整过程_第1张图片
cd到当前目录后,输入nmake:
C/C++实现DLL注入(入门),完整过程_第2张图片
附完成后效果图:
C/C++实现DLL注入(入门),完整过程_第3张图片
目录结构如下:
C/C++实现DLL注入(入门),完整过程_第4张图片
将include目录下的detours.h与lib.X64目录下的detours.lib复制到项目根目录
右键项目,选择添加-现有项,选中以上两个文件。
C/C++实现DLL注入(入门),完整过程_第5张图片

第三步:写DLL代码

在myhook.cpp中写入如下代码:

#include "pch.h"
#include "detours.h"

// 该变量用于引用MessageBox函数
static int (WINAPI* RealMessageBox)(HWND, LPCTSTR, LPCTSTR, UINT) = MessageBox;

// 该函数是要替换的假MessageBox函数
static int WINAPI MyMessageBox(HWND, LPCTSTR, LPCTSTR, UINT) {
   
	return RealMessageBox(NULL, L"My Hook successfully cracked!", L"Hey", MB_OK);
}

void StartHook() {
   
	DetourRestoreAfterWith()

你可能感兴趣的:(c++,c语言,windows)