前言

DLL注入是我在大一的时候接触的一种技术,那时候还不懂,最近结合小程序详细的理解了一下。

DLL注入是将代码注入到一个远程进程中,并让远程进程调用LoadLibrary()函数,从而强制远程进程加载一个DLL程序到进程中。而当DLL被加载时就会运行DLL中的DllMain()函数,所以就会为恶意代码的执行提供机会,而因为DLL本身是由感染后的进程加载的同时PE文件也并没有对系统进行过多的敏感操作,所以这种技术具有相当强的一种隐蔽性。

图解

lua 注入dll_lua 注入dll

程序分析

这里的程序是由一个PE文件和一个DLL文件构成,毫无疑问,DLL文件是需要注入的,里面也会有相应的恶意代码,执行一下之后,启动explorer.exe就会出现异常,每分钟都会出现弹窗。

首先我们来分析一下主要的PE文件。进入main()函数是这样的

lua 注入dll_进程句柄_02

首先加载了psapi.dll并且导入了三个函数,EnumProcessModules(),EnumProcesses(),GetModuleBaseNameA()。

然后获取DLL的路径,调用EnumProcesses()获取内存中所有进程的PID,形成一个数组,让数组中的每一个进程的pid成为参数传入sub_401000()。

所以我们进入sub_401000(),这个函数长这样

lua 注入dll_lua 注入dll_03

应该是对pid相应的进程名与explorer.exe进行比对,如果相同就返回1,进入后面的操作

获取explorer.exe的句柄,使用VirtualAllocEx()函数动态的在explorer.exe中分配一块内存,成功之后指向那块内存的指针会保存在lpParameter中,与进程句柄一起作为参数传入WriteProcessMemory(),写入的数据就是DLL的路径。

然后Kernel32.dll中的LoadLibraryA()函数加载DLL也会被CreateRemoteThread()函数强行调用,从而执行DLL注入。

而我们看到DLL中就会有弹窗的相关代码。

lua 注入dll_进程句柄_04

lua 注入dll_加载_05

lua 注入dll_lua 注入dll_06

DLL注入技术是比较经典的技术,我本身也觉得比较厉害,所以还是值得一学