成为顶级黑客--汇编与反汇编(二)

这次要介绍PE文件结构,了解了PE文件架构,就是.exe文件的排版结构,我们才能解释软件的逆向工程。

PE文件总体结构

成为顶级黑客--汇编与反汇编(二)

PE文件的架构结构

exe文件从磁盘加载到内存,各部份的先后顺序是保持不变的,但由于磁盘(一般200H)和内存(一般1000H)区块的对齐大小不一样,所以同一内容在磁盘和在内存中的地址是不一样的。

UltraEdit 是一套功能强大的文本编辑器,可以编辑文本、十六进制、ASCII 码,完全可以取代记事本(如果电脑配置足够强大),内建英文单字检查、C++ 及 VB 指令突显,可同时编辑多个文件,而且即使开启很大的文件速度也不会慢。

成为顶级黑客--汇编与反汇编(二)

测试文件

成为顶级黑客--汇编与反汇编(二)

测试文件PE的基本信息,后续会详解

//9_1.cpp

#include<iostream>

using namespace std;

template<typename>

T abs(T x)

{ return x<0?-x:x; }

oid main()

{ int n=-5;

double d=-5.5;

cout<
float X=3.0f;

cout<
cout<

另外要注意,PE文件中存放的地址值都是内存中的地址,这要根据这个地址找到内容在Ultraedit的地址,需要将此RVA址转换成文件偏移。还要注意DOS头/PE头/块表,映射到内存时属同一区块而且是第一区块,所以此三者上的RVA和文件偏移地址是相等的。

成为顶级黑客--汇编与反汇编(二)

PE文件磁盘与内存映像结构图

DS头部

DOS头的作用是兼容MS-DOS操作系统中的可执行文件,对于32位PE文件来说,DOS所起的作用就是显示一行文字,提示用户:我需要在32位windows上才可以运行。

成为顶级黑客--汇编与反汇编(二)

PE文件的DOS头文件

上边在十六进制文本编缉器中,直接转向e_lfanew指向的000000E0可以正好找到PE头。MZ是DOS可执行文件标志,红的圈出来的是e_lfanew指向PE文件头。

成为顶级黑客--汇编与反汇编(二)

测试文件DOS头文件分析

DOS stub

提示用户:我需要在32位windows上才可以运行,在右边清晰可见。里面是UCHAR [160]个字节。40-D0正好 16X10 =160。

成为顶级黑客--汇编与反汇编(二)

struct IMAGE_DOS_STUB DosStub的位置范围

e_magic:一个WORD类型,值是一个常数0x4D5A,用文本编辑器查看该值位‘MZ’,可执行文件必须都是'MZ'开头。

e_lfanew:为32位可执行文件扩展的域,用来表示DOS头之后的NT头相对文件起始地址的偏移。

DOS stub是当操作系统不支持PE文件时执行的部分,一般由编译器自己生成内容是输出“This program cannot be run in MS-DOS mode”等提示。

PE文件头的位置由e_lfanew指出而不是在固定位置,所以DOS stub允许你改成自己想要执行的代码,想写多长写多长;但一般直接不理会。

"
/<typename>/<iostream>


分享到:


相關文章: