什么是DLL注入
所谓DLL注入,就是将一个DLL(动态链接库)放入要被注入的进程的内存空间里,让它成为进程的一部分。
关于本教程
本教程是一个入门教程,实践的内容是用DLL注入一个自己写的简单的WinForms窗体程序,在DLL中使用了Detours库,用于修改被注入程序窗口提示函数的内存地址。
本教程使用的IDE为Visual Studio
关于Detours:
Detours是一个由微软开发的可以用于捕获系统API、拦截函数的函数库
需要创建的项目:
- 一个DLL项目
- 一个用于注入DLL的(中转)程序
- 一个用于被注入的靶子程序
开始!GET STARTED
第一步:创建一个DLL项目
在VS中创建一个DLL项目,新建源文件myhook.cpp
第二步:下载并准备好Detours
下载地址: https://github.com/microsoft/detours
解压后,打开x86/x64(根据自己的CPU选择) Native Tools Command Prompt
cd到当前目录后,输入nmake:
附完成后效果图:
目录结构如下:
将include目录下的detours.h与lib.X64目录下的detours.lib复制到项目根目录
右键项目,选择添加-现有项,选中以上两个文件。
第三步:写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()