远程注入

来源:互联网 发布:centos安装oracle 256 编辑:程序博客网 时间:2024/05/29 15:12
DLL远程注入的步骤如下:
1) 使用VirtualAllocEx函数,分配远程进程的地址空间中的内存。
2) 使用WriteProcessMemory函数,将DLL的路径名拷贝到第一个步骤中已经分配的内存中。
3) 使用GetProcAddress函数,获取LoadLibraryA或LoadLibratyW函数的实地址(在Kernel32.dll中)。
4) 使用CreateRemoteThread函数,在远程进程中创建一个线程,它调用正确的LoadLibrary函数,为它传递第一个步骤中分配的内存的地址。
这时,DLL已经被插入远程进程的地址空间中,同时DLL的DllMain函数接收到一个DLL_PROCESS_ATTACH通知,并且能够执行需要的代码。
当DllMain函数返回时,远程线程从它对LoadLibrary的调用返回到BaseThreadStart函数。然后BaseThreadStart调用ExitThread,使远程线程终止运行。
现在远程进程拥有第一个步骤中分配的内存块,而DLL则仍然保留在它的地址空间中。若要将它删除,需要在远
程线程退出后执行下面的步骤:
5) 使用VirtualFreeEx函数,释放第一个步骤中分配的内存。
6) 使用GetProcAddress函数,获得FreeLibrary函数的实地址(在Kernel32.dll中)。
7) 使用CreateRemoteThread函数,在远程进程中创建一个线程,它调用FreeLibrary函数,传递远程DLL的HINSTANCE。

HANDLE WINAPI CreateRemoteThread(HANDLE hProcess,LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId);
HANDLE hProcess: 线程所属进程的进程句柄.
LPSECURITY_ATTRIBUTES lpThreadAttributes: 指定线程的安全属性
SIZE_T dwStackSize: 线程初始大小,如果该值设为0,那么使用系统默认大小
LPTHREAD_START_ROUTINE lpStartAddress: 在远程进程的地址空间中,该线程的线程函数的起始地址
LPVOID lpParameter: 传给线程函数的参数
DWORD dwCreationFlags: 线程的创建标志
LPDWORD lpThreadId: 线程的id
0 0