windows线程注入

线程注入可以使A程序操控B程度加载特定的dll

我们使用线程注入来把dll注入到目标进程主要需要以下api

OpenProcess 打开进程
VirtualAllocEx 分配内存
WriteProcessMemory 对内存写入数据
GetModuleHandleA 获取模块的地址(我们需要调用LoadLibraryA来加载dll,因为LoadLibraryA在Kernel32.dll文件中,所以需要先获取Kernel32.dll地址)
GetProcAddress获取LoadLibraryA函数地址
附注:因为windows机制,低2G属于用户空间 高2G属于系统空间,所以在不同程序下获取的LoadLibraryA函数地址是相同的
CreateRemoteThread在目标程序中建立线程

建立线程后调用LoadLibraryA加载目标dll
目标dll启动dllMain来执行函数
在此贴出精益的dll注入源码(易语言版本)

.版本 2

局_进程ID = OpenProcess (2035711, 0, 目标进程ID)
长度 = 取文本长度 (要注入的DLL文件名)
局_内存值 = VirtualAllocEx (局_进程ID, 0, 长度, 4096, 4)
WriteProcessMemory_字节集 (局_进程ID, 局_内存值, 到字节集 (要注入的DLL文件名), 长度, 0)
局_函数地址 = GetProcAddress1 (GetModuleHandleA (“Kernel32”), “LoadLibraryA”)
局_线程ID = CreateRemoteThread (局_进程ID, 0, 0, 局_函数地址, 局_内存值, 0, 0)
.如果真 (局_线程ID = 0)
    返回 (假)
.如果真结束
WaitForSingleObject (局_线程ID, 4294967295)
VirtualFreeEx (局_进程ID, 局_内存值, 0, 32768)
CloseHandle (局_线程ID)
CloseHandle (局_进程ID)
返回 (真)

留下评论