R3注入的四种方式

DLL注入

1.首先要获取想要注入的进程句柄(OpenProcess)
2.从要注入的进程的地址空间中分配一段内存(VirtualAllocEx)
3.往分配的内存位置写入要注入的DLL名称(WriteProcessMemory)
4.从kernel32.dll中找到LoadLibrary(A或W)函数地址(GetModuleHandle+GetProcAddress)
5.创建远程线程执行加载DLL函数(CreateRemoteThread)

傀儡进程注入

1.首先读取恶意代码的可执行文件并将其解析(按PE结构镜像加载)
2.建立一个挂起的傀儡进程并获取其进程基本信息(CreateProcess函数传入的结构中可获取进程和主线程句柄)
3.获取进程主线程的基本信息(GetThreadContext获取的contex的Ebx为PEB,+8获取进程基址,ReadProcessMemory读取)
4.从ntdll获取NtUnmapViewOfSection远程卸载基址模块(GetModuleHandle+GetProcAddress)
5.从傀儡进程中的恶意镜像指向的基址分配恶意镜像大小的内存然后把恶意镜像写进去(如果选择其他地址则需要修改恶意镜像的基址重定位表_VirtualAllocEx+WriteProcessMemory)
6.修改进程主线程eip指向恶意镜像入口点以及PEB指向的基址(contex的Eax为eip,PEB用WriteProcessMemory修改)
7.将修改的contex设置回去并回复线程运行(SetThreadContext+ResumeThread)

x64下用ntdll中的NtQueryInformationProcess获取PEB,contex的Rcx为eip

HOOK注入

1.加载一个DLL,获取其某个函数地址(LoadLibrary+GetProcAddress)
2.获取一个进程句柄
3.通过系统钩子把指定函数挂上去即可(SetWindowsHookEx,目标进程会加载DLL)

APC注入

1.获取指定进程的ID以及所有线程的集合 (CreateToolhelp32Snapshot)
2.远程分配内存并将指定DLL名称写入(VirtualAllocEx+WriteProcessMemory)
3.迭代打开所有线程依次往APC队列添加加载DLL函数调用(OpenThread+QueueUserAPC+GetProcAddress)
---------------------
作者:zyorz
来源:CSDN
原文:https://blog.csdn.net/zyorz/article/details/78116055
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/adylee/p/9926177.html