实现dll注入的方法有很多,比如创建远程线程,使用注册表,消息钩取,替换原dll等

原理

实现dll注入的方法有很多,比如创建远程线程,使用注册表,消息钩取,替换原dll等。

这里简单介绍一下最常用的方法,通过创建远程线程,即使用CreateRemoteThread函数对运行中的进程注入dll。

大致的流程如下:

获取目标进程句柄

HANDLE hProcess = NULL;
//使用dwPID进程id获取目标进程句柄(然后控制进程)
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);

将dll写入目标进程分配的内存中

HANDLE hProcess;
LPVOID pRemoteBuf = NULL;
DWORD dwBufSize;
// 在目标进程内存中分配dwBufSize大小的内存
pRemoteBuf = VirtualAllocEx(hProcess, NULL, dwBufSize, MEM_COMMIT, PAGE_READWRITE);//返回值为分配所得缓冲区的地址(目标进程内存地址)
// 将dll写入分配的内存中
WriteProcessMemory(hProcess, pRemoteBuf, (LPVOID)szDllPath, dwBufSize, NULL);

获取LoadLibraryW() API的地址

HMODULE hMod = NULL;
hMod = GetModuleHandle(L"kernel32.dll");
LPTHREAD_START_ROUTINE pThreadProc;
pThreadProc = (LPTHREAD_START_ROUTINE)GetProcAddress(hMod, "LoadLibraryW");

在进程中运行LoadLibraryW线程

HANDLE hProcess = NULL, hThread = NULL;
// 在进程中运行LoadLibraryW线程
hThread = CreateRemoteThread(hProcess, NULL, 0, pThreadProc, pRemoteBuf, 0, NULL);
WaitForSingleObject(hThread, INFINITE);    //等待hThread事件执行完毕

通常情况下利用好工具就可以实现我们想要的dll注入,不过学习原理能够帮助我们理解,同时一些重要的函数也是逆向学习过程中一定要积累的。

 

参考:

《逆向工程核心原理》书籍

posted @ 2022-03-02 22:05  bonelee  阅读(172)  评论(0编辑  收藏  举报