1.分类
(1)结构重叠
(2)空间调整
(3)数据转移
(4)数据压缩
2.结构重叠
(1) 简介
在不影响运行的前提下将某些数据结构字段进行重叠,并修正需要修正的字段
(2)条件
被覆盖中的数据是某一个结构不重要的部分;2个结构共用重叠部分的值,这样就需要这两个结构在重叠部分值相同.
(3)个人感觉用途不大,只能缩小PE文件大小,而且缩小大小不会很多
3.空间调整
(1)简介
将可变大小的部分进行扩大,并修正需要修正的字段
(2)例如
修改IMAGE_DOS_HEADER的e_lfanew的值来扩大IMAGE_DOS_HEADER的大小
这里需要修正的字段:
IMAGE_OPTIONAL_HEADER32.AddressOfEntryPoint
IMAGE_OPTIONAL_HEADER32.SizeOfImage
IMAGE_OPTIONAL_HEADER32.SizeOfHeaders
IMAGE_SECTION_HEADER.VirtualAddress
IMAGE_SECTION_HEADER.PointerToRawData
..等等
4.数据转移
(1)简介
将pe中某处数据转移到另一个位置.包括数据和代码.常用于病毒.软件加解密
5.数据压缩
如果指令代码比较长,先对其压缩,在PE头中放一段解压代码.代码入口指向解压代码,解压完了后跳到正常代码处执行
6.可用空间
1.文件头空间
IMAGE_DOS_HEADER 除了e_magic和e_lfanew字段的之外的
IMAGE_FILE_HEADER TimeDateStamp,PointerToSymbolTable,NumberOfSymbols
IMAGE_OPTIONAL_HEADER MajorVersionLinker,MinorVersionLinker,SizeOfCode,SizeOfInitializedData,SizeOfUninitializedData BaseOfCode
BaseOfData, MajorImageVersion MinorImageVersion MajorSubsystemVersion MinorSubsystemVersion, MajorOperatingSystemVersion;
MinorOperatingSystemVersion; CheckSum;LoaderFlags
IMAGE_DATA_DIRECTORY 从0开始第0个字段,3-8个字段, 第15个字段
IMAGE_SECTION_HEADER PointerToRelocations; PointerToLinenumbers; NumberOfRelocations; NumberOfLinenumbers;Name
7.需要注意的地方
可以没有节表,但是IMAGE_FILE_HEADER.NumberOfSection至少为1
内存对齐>=文件对齐
将代码和数据所在的节的属性改为可读可写可执行
特殊字段可能需要修正:
IMAGE_OPTIONAL_HEADER32.NumberOfRvaAndSizes
IMAGE_OPTIONAL_HEADER32.SizeOfCode
IMAGE_OPTIONAL_HEADER32.AddressOfEntryPoint
IMAGE_OPTIONAL_HEADER32.SectionAlignment
IMAGE_OPTIONAL_HEADER32.FileAlignment
IMAGE_OPTIONAL_HEADER32.SizeOfImage
IMAGE_OPTIONAL_HEADER32.SizeOfHeaders
IMAGE_FILE_HEADER.SizeOfOptionalHeader
IMAGE_FILE_HEADER.NumberOfSymbols
IMAGE_DOS_HEADER.e_lfanew