远程注入
来源:互联网 发布: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
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
- 远程注入
- 远程注入
- 远程注入
- 远程注入
- 线程的远程注入
- 远程线程注入代码
- 远程注入代码
- C++:远程注入DLL
- 远程注入线程
- zz - DLL远程注入
- 学习:DLL远程注入
- 远程dll注入 C#
- DLL远程注入实践
- 远程线程注入
- 线程远程注入
- 线程的远程注入
- 线程远程注入
- createremotethread()远程注入dll
- DLL的使用
- java概述
- MIPS构架简介
- c#正则表达式详解
- Spark Streaming 1.6 流式状态管理分析
- 远程注入
- .plist .ipa .apk的MIME
- Spark Streaming 妙用之实现工作流调度器
- mysql 读写分离入门简介
- Transformer架构解析
- nodepad++ 插件
- 通过aws搭建shadowsock代理
- 【bzoj3171】[Tjoi2013]循环格 (费用流)
- 多线程