Dll注入的初始动力源自于程序员对其他第三方应用程序进行功能的扩展的愿望,现在的Dll注入技术仍然是构成系统复杂功能,或者应用程序实现复杂操作的基础支撑技术。
目前公开的Dll注入技巧共有以下几种:
- 注册表注入
- ComRes注入
- APC注入
- 消息钩子注入
- 远程线程注入
- 依赖可信进程注入
- 劫持进程创建注入
- 输入法注入
远程线程注入示例代码:
#include <iostream>
#include<Windows.h>
//Dll路径
#define PATH L"D:\\******\\Hook.dll"
int main()
{
//1. 获取目标进程的句柄
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 11232);
//2. 在目标进程中申请一块空间
int nLenth = wcslen(PATH);
LPVOID pAddress= VirtualAllocEx(hProcess, 0, nLenth*2+2, MEM_COMMIT, PAGE_READWRITE);
//3. 将DLL名字写入到目标进程的空间中
DWORD dwRealSize = 0;
WriteProcessMemory(
hProcess,
pAddress,
PATH,
nLenth * 2 + 2,
&dwRealSize
);
//4. 创建远程线程
HANDLE hThread = CreateRemoteThread(hProcess,0, 0,
(LPTHREAD_START_ROUTINE)LoadLibrary,//关键函数
(LPVOID)pAddress,//关键参数
0, 0);
WaitForSingleObject(hThread, -1);
//5. 清理资源
VirtualFreeEx(hProcess, pAddress, nLenth * 2 + 2, MEM_RELEASE);
CloseHandle(hThread);
}
评论区