本文需要了解基本的PE文件概念
我们在分析软件的时候,经常会使用工具,对某个EXE进行修改,以实现破解。本文介绍这种方法的基本原理。
修改EXE实现破解,需要知道待修改的磁盘地址,而实际过程中,我们一般是通过调试,得到关键区域的内存地址,因此需要将内存地址转换为磁盘地址,方法如下:
Windows平台PE文件,节区头(Section Header)是非常重要的数据结构。头文件定义如下:
#define IMAGE_SIZEOF_SHORT_NAME 8
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
union {
DWORD PhysicalAddress;
DWORD VirtualSize;
} Misc;
DWORD VirtualAddress;
DWORD SizeOfRawData;
DWORD PointerToRawData;
DWORD PointerToRelocations;
DWORD PointerToLinenumbers;
WORD NumberOfRelocations;
WORD NumberOfLinenumbers;
DWORD Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
地址转换过程中,需要使用到的是VirtualAddress(内存中节区起始地址)以及PointerToRawData(磁盘文件中节区起始位置&