注入专题之远程线程注入器

易语言 2020-07-15 15:42:41

注入专题之远程线程注入器

进程句柄 = OpenProcess (2097151, 0, 到数值 (编辑框1.内容))
.如果真 (进程句柄 = 0)
信息框 (“权限不够!”, 0, )
返回 ()
.如果真结束
目标进程内存地址 = VirtualAllocEx (进程句柄, 0, 4096, 4096, 64) ' 在远程进程中申请空间 存模块路径
.如果真 (目标进程内存地址 = 0)
信息框 (“为目标进程分配内存失败!”, 0, )
返回 ()
.如果真结束
' 塞点东西进去
成功 = WriteProcessMemory_文本型 (进程句柄, 目标进程内存地址, 模块名, 取字节集长度 (到字节集 (模块名)), 取变量地址 (成功写的字节)) '
.如果真 (成功 = 0)
信息框 (“写数据失败!”, 0, )
返回 ()
.如果真结束
' 创建 一个入口点为LoadlibrarA的线程
LoadlibrarA地址 = GetProcAddress (GetModuleHandleA (“Kernel32.dll”), “LoadLibraryA”)
调试输出 (CreateRemoteThread (进程句柄, 0, 0, LoadlibrarA地址, 目标进程内存地址, 0, 0))

远线程注入原理是利用Windows 系统中CreateRemoteThread()这个API,其中第4个参数是准备运行的线程,我们可以将LoadLibrary()填入其中,这样就可以执行远程进程中的LoadLibrary()函数,进而将我们自己准备的DLL加载到远程进程空间中执行。
选 LoadLibrary 函数原因: 首先,它可以把一个Dll载入内存空间,并执行DLL初始化函数。 第二,LoadLibrary在Kernel32.dll中,Kernel32.dll的加载基址在每个进程中都是一样的所以,LoadLibrary在每个进程的地址就是一样的。
----------------------------------------------------------------------
步骤如下: 用OpenProcess得到一个进程的句柄。 把模块路径复制到目标进程 用CreateRemoteThread创建一个入口点地址为LoadLibraryA的函数。
-----------------------------------------------------------------------
OpenProcess
打开远程进程
VirtualAllocEx
在远程进程中申请空间
WriteProcessMemory
在远程进程中写入数据
WaitForSingleObject
等待信号量
VirtualFreeEx
释放远程进程中申请空间
CloseHandle
关闭句柄