别急着收藏嘛,直接关注不是更好吗?
DLL注入系列最后一篇
各位客官让你们久等了,这篇文章是dll远程注入的最后一篇,在这篇文章中,《一碳科技》将会教大家如何完成dll的远程注入工作,并且能成功令我们设计好的dll运行起来。dll远程注入本身就不是一个漏洞,实际上,dll注入最开始是给开发人员用来维护系统或者其他开发的软件的,但是到后来就被利用来破坏计算机系统了。
在前两篇文章中,《一碳科技》已经教大家如何去制作我们自己的dll文件,以及如何得到进程的PID并打开进程,今天这篇文章将教大家如何去将我们的dll远程注入到目标进程当中,伪装成目标进程!
文章末尾有源码获取方式、注入程序操作效果图
废话不多说,上菜!上一篇文章,我们已经成功打开了目标进程,并获得了目标进程的PID,所以接下来要做的就是,在我们目标进程的内存地址空间中,开辟一个属于我们的地址空间,为什么要这么做呢?下面会讲到。这里我们需要用到一个函数VirtualAllocEx(),这个函数需要5个参数,特别要注意的数最后一个参数,最后一个参数能决定我们接下来的步骤是否能成功。最后一个参数为PAGE_READWRITE,这是什么意思呢?这表示我们开辟的这一块区域是可以被应用程序读写的。
第一个参数是我们的目标进程句柄,第二个参数填NULL,让系统自动分配,第三个参数是我们要开辟内存的大小,这个大小一般是表示dll文件路径的字符串大小,可以用sizeof()函数获取。
现在给大家讲一下,为什么需要用在目标进程虚拟内存空间里面开辟一个新的内存。因为,我们接下来要用Creatremotethread()在目标进程中创建一个新的线程,在目标进程中会调用LoadLibraryA()函数,这个函数能载入一个dll文件或者打开一个exe路径,LoadLibraryA()的参数是一个dll文件路径(内核dll文件可不写路径)或EXE文件的路径,而这个参数通常是一个字符串,这个字符串是存放在目标进程的虚拟内存空间中的,并不是我们的注入程序当中!
简单点说,我们的注入程序会将一个字符串地址传给目标程序的LoadLibraryA(),而这个字符串是在我们的注入程序中创建的,所以,字符串的地址是在注入程序的虚拟内存空间中,并不是在目标程序中!而如果我们直接将字符串从注入程序传入目标程序的LoadLibraryA()中,就可能会引发一连贯的错误,因为你传给LoadLibraryA()的字符串地址里面很可能是什么都没有的!对这一块不理解的可以在下方评论区提出哦。
上图就是向目标程序虚拟内存空间写入数据的步骤,这个函数需要5个参数,从左往右分别是,目标进程句柄、写入数据的内存地址、写入的数据(这里是字符串)、写入数据的大小、存放实际写入数据大小的变量(仔细读一下),这个参数可以填NULL。
紧接着,我们要获取LoadLibraryA()函数的地址,注意LoadLibraryA()函数的地址在任何进程中都是相同的,所以我们就不要担心上面那个问题了。
然后,我们的主角来啦,我们的CreateRemoteThread()函数,这个函数能在远程进程中创建一个新的线程,并且给调用的函数传递参数。这个函数需要7个参数,不过7个参数当中有4个可以设为NULL,剩下的三个参数是远程进程句柄、创建的线程函数的地址、线程函数的参数,在填写线程函数的地址的时候,别忘了将它强制转换成LPTHREAD_START_ROUTINE类型哦!具体的可以看下图↓
到这里就可以告一段落了,文中讲的不是特别详细,想要深入了解的粉丝可以私信关键字:“DLL注入源码获取”,注意关键字不能错哦,错了机器人就无法识别发送源码了哦!
效果测试小编选择的目标程序是wps.exe,首先打开wps,然后开始运行我们的注入程序,在这里,小编的dll模块功能是打开系统的写字板应用,在这个过程中,电脑安全软件可能会有提示,我们可以先把它关掉。
然后就可以开始注入了,如下图写字板已经打开,已经成功注入了↓
我们可以查看进程使用的模块列表,在这里找到了我们的dll模块,说明已经成功注入了!
粉丝私信关键字:“DLL注入源码获取”拿源码哦!
,