编程实现感染PE文件加载DLL
PE文件是Windows系统可执行文件采用的普遍格式,像我们平时接触的EXE、DLL、OCX,甚至SYS文件都是属于PE文件的范畴。很多Win32病毒都是基于感染PE文件来进行传播的。今天我们就来尝试一下通过感染PE文件使其加载指定的DLL。 PE文件功能 众所周知,在Windows程序中需要调用各种各样的系统API,这些API被微软封装在不同的DLL文件中,这些DLL会在进程启动时(或者需要时)加载进进程的地址空间。我们调用一个API都是基于如下的汇编代码: 00411A3E mov esi,esp 00411A40 push 100h 00411A45 lea eax,[strDllDir] 00411A4B push eax 00411A4C call dword ptr [__imp__GetWindowsDirectoryA @8 (42B180h)] 这些汇编代码是针对如下代码的反汇编结果: char strDllDir[256]; GetWindowsDirectory(strDllDir,256); 可见,调用一个系统API是在参数压栈后调用call命令执行系统调用GetWindowsDirectory()的。上文说过,系统调用是通过DLL引入进程的,但是不同进程引入的DLL地址并不相同,程序是如何知道这个Call应该调用什么地址呢