关于PE可执行文件的修改
E_OPTIONAL_HEADER { WORD Magic; //标志字(总是010bh) BYTE MajorLinkerVersion; //连接器版本号 BYTE MinorLinkerVersion; // DWORD SizeOfCode; //代码段大小 DWORD SizeOfInitializedData; //已初始化数据块大小 DWORD SizeOfUninitializedData; //未初始化数据块大小 DWORD AddressOfEntryPoint; //PE装载器准备运行的PE文件的第一个指令的RVA,若要改变整个执行的流程,可以将该值指定到新的RVA,这样新RVA处的指令首先被执行。(许多文章都有介绍RVA,请去了解) DWORD BaseOfCode; //代码段起始RVA DWORD BaseOfData; //数据段起始RVA DWORD ImageBase; //PE文件的装载地址 DWORD SectionAlignment; //块对齐 DWORD FileAlignment; //文件块对齐 WORD MajorOperatingSystemVersion;//所需操作系统版本号 WORD MinorOperatingSystemVersion;// WORD MajorImageVersion; //用户自定义版本号 WORD MinorImageVersion; // WORD MajorSubsystemVersion; //win32子系统版本。若PE文件是专门为Win32设计的 WORD MinorSubsystemVersion; //该子系统版本必定是4.0否则对话框不会有3维立体感 DWORD Win32VersionValue; //保留 DWORD SizeOfImage; //内存中整个PE映像体的尺寸 DWORD SizeOfHeaders; //所有头+节表的大小 DWORD CheckSum; //校验和 WORD Subsystem; //NT用来识别PE文件属于哪个子系统 WORD DllCharacteristics; // DWORD SizeOfStackReserve; // DWORD SizeOfStackCommit; // DWORD SizeOfHeapReserve; // DWORD SizeOfHeapCommit; // DWORD LoaderFlags; // DWORD NumberOfRvaAndSizes; // IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; //IMAGE_DATA_DIRECTORY 结构数组。每个结构给出一个重要数据结构的RVA,比如引入地址表等 } IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32; typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; //表的RVA地址 DWORD Size; //大小 } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; PE文件头后是节表,在winnt.h下如下定义
以上结构就是在winnt.h中关于PE文件头的定义,如何我们用C/C++来进行PE可执行文件操作,就要用到上面的所有结构,它详细的描述了PE文件头的结构。 3、修改PE可执行文件 现在让我们把一段代码写入任何一个PE格式的可执行文件,代码如下:
好,现在让我们看看该把这些代码写到那。现在用Tdump.exe显示一个PE格式得可执行文件信息,可以发现如下描述:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |