在进行PE文件格式病毒分析的时候,经常要使用到PE文件格式的解析,尤其是对LoadPE形式的病毒的分析,经常要查看PE文件格式的偏移,特地从博客《PE文件格式的偏移参考》中转载收录一份,之前在网上也看到比较不错的有关PE文件偏移的博客,但忘了收录。在进行PE文件格式的病毒分析时,还会经常参考这篇博客《PE文件格式学习笔记》,博主关于PE文件格式的学习笔记写的不错,其他的参考书籍《加密与解密(第3版)》、《黑客免杀攻防》,顺便提一句《黑客免杀攻防》这本书关于PE文件格式的解析比较不错,但是错误也不少,整体来说这本书对于学习PC上的逆向分析和内核攻防还是很不错的。

Complete PE Offset Reference

While there is a lot of data and various parts of the structure are at varying positions there are still a lot of useful fixed and relative offsets that will help when disassembling/examining PE files. Resource information and the such like are omitted - there are good tools available to manipulate these e.g. ResHacker.

The DOS Header

OFFSET

SIZE

NAME

EXPLANATION

00

WORD

e_magic

Magic DOS signature MZ (4Dh 5Ah)

02

WORD

e_cblp

Bytes on last page of file

04

WORD

e_cp

Pages in file

06

WORD

e_crlc

Relocations

08

WORD

e_cparhdr

Size of header in paragraphs

0A

WORD

e_minalloc

Minimum extra paragraphs needed

0C

WORD

e_maxalloc

Maximum extra paragraphs needed

0E

WORD

e_ss

Initial (relative) SS value

10

WORD

e_sp

Initial SP value

12

WORD

e_csum

Checksum

14

WORD

e_ip

Initial IP value

16

WORD

e_cs

Initial (relative) CS value

18

WORD

e_lfarlc

File address of relocation table

1A

WORD

e_ovno

Overlay number

1C

WORD

e_res[4]

Reserved words

24

WORD

e_oemid

OEM identifier (for e_oeminfo)

26

WORD

e_oeminfo

OEM information; e_oemid specific

28

WORD

e_res2[10]

Reserved words

3C

DWORD

e_lfanew

Offset to start of PE header

The PE Header

Offsets shown  are from the beginning of this section.

00

DWORD

Signature

PE Signature PE.. (50h 45h 00h 00h)

04

WORD

Machine

014Ch = Intel 386, 014Dh = Intel 486, 014Eh = Intel 586, 0200h = Intel 64-bit, 0162h=MIPS

06

WORD

NumberOfSections

Number Of Sections

08

DWORD

TimeDateStamp

Date & time image was created by the linker

0C

DWORD

PointerToSymbolTable

Zero or offset of COFF symbol table in older files

10

DWORD

NumberOfSymbols

Number of symbols in COFF symbol table

14

WORD

SizeOfOptionalHeader

Size of optional header in bytes (224 in 32bit exe)

16

WORD

Characteristics

see below

18

**********

START OF OPTIONAL HEADER

**************************************

18

WORD

Magic

010Bh=32-bit executable image

020Bh=64-bit executable image

0107h=ROM image

1A

BYTE

MajorLinkerVersion

Major version number of the linker

1B

BYTE

MinorLinkerVersion

Minor version number of the linker

1C

DWORD

SizeOfCode

size of code section or sum if multiple code sections

20

DWORD

SizeOfInitializedData

as above

24

DWORD

SizeOfUninitializedData

as above

28

DWORD

AddressOfEntryPoint

Start of code execution, optional for DLLs, zero when none present

2C

DWORD

BaseOfCode

RVA of first byte of code when loaded into RAM

30

DWORD

BaseOfData

RVA of first byte of data when loaded into RAM

34

DWORD

ImageBase

Preferred load address

38

DWORD

SectionAlignment

Alignment of sections when loaded in RAM

3C

DWORD

FileAlignment

Alignment of sections in file on disk

40

WORD

MajorOperatingSystemVersion

Major version no. of required operating system

42

WORD

MinorOperatingSystemVersion

Minor version no. of required operating system

44

WORD

MajorImageVersion

Major version number of the image

46

WORD

MinorImageVersion

Minor version number of the image

48

WORD

MajorSubsystemVersion

Major version number of the subsystem

4A

WORD

MinorSubsystemVersion

Minor version number of the subsystem

4C

DWORD

Reserved1

50

DWORD

SizeOfImage

Amount of memory allocated by loader for image. Must be a multiple of SectionAlignment

54

DWORD

SizeOfHeaders

Offset of first section, multiple of FileAlignment

58

DWORD

CheckSum

Image checksum (only required for kernel-mode drivers and some system DLLs).

5C

WORD

Subsystem

0002h=Windows GUI, 0003h=console

5E

WORD

DllCharacteristics

0001h=per-process library initialization

0002h=per-process library termination

0003h=per-thread library initialization

0004h=per-thread library termination

60

DWORD

SizeOfStackReserve

Number of bytes reserved for the stack

64

DWORD

SizeOfStackCommit

Number of bytes actually used for the stack

68

DWORD

SizeOfHeapReserve

Number of bytes to reserve for the local heap

6C

DWORD

SizeOfHeapCommit

Number of bytes actually used for local heap

70

DWORD

LoaderFlags

This member is obsolete.

74

DWORD

NumberOfRvaAndSizes

Number of directory entries.

78

**********

START OF DATA DIRECTORY

**************************************

78

DWORD

IMAGE_DATA_DIRECTORY0

RVA of Export Directory

7C

DWORD

size of Export Directory

80

DWORD

IMAGE_DATA_DIRECTORY1

RVA of Import Directory (array of IIDs)

84

DWORD

size of Import Directory (array of IIDs)

88

DWORD

IMAGE_DATA_DIRECTORY2

RVA of Resource Directory

8C

DWORD

size of Resource Directory

90

DWORD

IMAGE_DATA_DIRECTORY3

RVA of Exception Directory

94

DWORD

size of Exception Directory

98

DWORD

IMAGE_DATA_DIRECTORY4

Raw Offset of Security Directory

9C

DWORD

size of Security Directory

A0

DWORD

IMAGE_DATA_DIRECTORY5

RVA of Base Relocation Directory

A4

DWORD

size of Base Relocation Directory

A8

DWORD

IMAGE_DATA_DIRECTORY6

RVA of Debug Directory

AC

DWORD

size of Debug Directory

B0

DWORD

IMAGE_DATA_DIRECTORY7

RVA of Copyright Note

B4

DWORD

size of Copyright Note

B8

DWORD

IMAGE_DATA_DIRECTORY8

RVA to be used as Global Pointer (IA-64 only)

BC

DWORD

Not used

C0

DWORD

IMAGE_DATA_DIRECTORY9

RVA of Thread Local Storage Directory

C4

DWORD

size of Thread Local Storage Directory

C8

DWORD

IMAGE_DATA_DIRECTORY10

RVA of Load Configuration Directory

CC

DWORD

size of Load Configuration Directory

D0

DWORD

IMAGE_DATA_DIRECTORY11

RVA of Bound Import Directory

D4

DWORD

size of Bound Import Directory

D8

DWORD

IMAGE_DATA_DIRECTORY12

RVA of first Import Address Table

DC

DWORD

total size of all Import Address Tables

E0

DWORD

IMAGE_DATA_DIRECTORY13

RVA of Delay Import Directory

E4

DWORD

size of Delay Import Directory

E8

DWORD

IMAGE_DATA_DIRECTORY14

RVA of COM Header (top level info & metadata...

EC

DWORD

size of COM Header         ...in .NET executables)

F0

DWORD

ZERO (Reserved)

Reserved

F4

DWORD

ZERO (Reserved)

Reserved

F8

**********

START OF SECTION TABLE

*******Offsets shown from here********

00

8 Bytes

Name1

Name of first section header

08

DWORD

misc (VirtualSize)

Actual size of data in section

0C

DWORD

virtual address

RVA where section begins in memory

10

DWORD

SizeOfRawData

Size of data on disk (multiple of FileAlignment)

14

DWORD

pointerToRawData

Raw offset of section on disk

18

DWORD

pointerToRelocations

Start of relocation entries for section, zero if none

1C

DWORD

PointerToLinenumbers

Start of line-no. entries for section, zero if none

20

WORD

NumberOfRelocations

This value is zero for executable images.

22

WORD

NumberOfLineNumbers

Number of line-number entries for section.

24

DWORD

Characteristics

see end of page below

00

8 Bytes

Name1

Name of second section header

**********

Repeats for rest of sections

**************************************

The Export Table

Offsets shown from beginning of table (given at offset 78 from start of PE header). The following 40 Bytes repeat for each export library (DLL whose functions are imported by the executable) and ends with one full of zeroes.

OFFSET

SIZE

NAME

EXPLANATION

00

DWORD

Characteristics

Set to zero (currently none defined)

04

DWORD

TimeDateStamp

often set to zero

08

WORD

MajorVersion

user-defined version number, otherwise zero

0A

WORD

MinorVersion

as above

0C

DWORD

Name

RVA of DLL name in null-terminated ASCII

10

DWORD

Base

First valid exported ordinal, normally=1

14

DWORD

NumberOfFunctions

Number of entries in EAT

18

DWORD

NumberOfNames

Number of entries in ENT

1C

DWORD

AddressOfFunctions

RVA of EAT (export address table)

20

DWORD

AddressOfNames

RVA of ENT (export name table)

24

DWORD

AddressOfNameOrdinals

RVA of EOT (export ordinal table)

The Import Table

Offsets shown from beginning of table (given at offset 80 from start of PE header). The following 5 DWORDS repeat for each import library (DLL whose functions are imported by the executable) and ends with one full of zeroes.

OFFSET

SIZE

NAME

EXPLANATION

00

DWORD

OriginalFirstThunk

RVA to Image_Thunk_Data

04

DWORD

TimeDateStamp

zero unless bound against imported DLL

08

DWORD

ForwarderChain

pointer to 1st redirected function (or 0)

0C

DWORD

Name1

RVA to name in null-terminated ASCII

10

DWORD

FirstThunk

RVA to Image_Thunk_Data

Image Characteristics Flags

FLAG

EXPLANATION

0001

Relocation info stripped from file

0002

File is executable (no unresolved external references)

0004

Line numbers stripped from file

0008

Local symbols stripped from file

0010

Lets OS aggressively trim working set

0020

App can handle >2Gb addresses

0080

Low bytes of machine word are reversed

0100

requires 32-bit WORD machine

0200

Debugging info stripped from file into .DBG file

0400

If image is on removable media, copy and run from swap file

0800

If image is on a network, copy and run from swap file

1000

System file

2000

File is a DLL

4000

File should only be run on a single-processor machine

8000

High bytes of machine word are reversed

Section Characteristics Flags

FLAG

EXPLANATION

00000008

Section should not be padded to next boundary

00000020

Section contains code

00000040

Section contains initialised data (which will become initialised with real values before the file is launched)

00000080

Section contains uninitialised data (which will be initialised as 00 byte values before launch)

00000200

Section contains comments for the linker

00000800

Section contents will not become part of image

00001000

Section contents comdat (Common Block Data)

00008000

Section contents cannot be accessed relative to GP

00100000 to 00800000

Boundary alignment settings

01000000

Section contains extended relocations

02000000

Section can be discarded (e.g. .reloc)

04000000

Section is not cacheable

08000000

Section is pageable

10000000

Section is shareable

20000000

Section is executable

40000000

Section is readable

80000000

Section is writable

PE文件格式偏移参考的更多相关文章

  1. Reverse Core 第二部分 - 13章 - PE文件格式

    @date: 2016/11/24 @author: dlive ​ PE (portable executable) ,它是微软在Unix平台的COFF(Common Object File For ...

  2. PE文件格式详解,第一讲,DOS头文件格式

    PE文件格式详解,第一讲,DOS头文件格式 今天讲解PE文件格式的DOS头文件格式 首先我们要理解,什么是文件格式,我们常说的EXE可执行程序,就是一个文件格式,那么我们要了解它里面到底存了什么内容 ...

  3. PE文件格式详解,第二讲,NT头文件格式,以及文件头格式

    PE文件格式详解,第二讲,NT头文件格式,以及文件头格式 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) PS:本篇博客 ...

  4. PE文件格式详解,第三讲,可选头文件格式,以及节表

    PE文件格式详解,第三讲,可选头文件格式,以及节表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶可选头结构以及作 ...

  5. 深入理解 Win32 PE 文件格式

    深入理解 Win32 PE 文件格式 Matt Pietrek 这篇文章假定你熟悉C++和Win32. 概述 理解可移植可执行文件格式(PE)可以更好地了解操作系统.如果你知道DLL和EXE中都有些什 ...

  6. PE文件格式详解(下)

    作者:MSDN译者:李马 预定义段 一个Windows NT的应用程序典型地拥有9个预定义段,它们是.text..bss..rdata..data..rsrc..edata..idata..pdata ...

  7. PE文件格式分析

    PE文件格式分析 PE 的意思是 Portable Executable(可移植的执行体).它是 Win32环境自身所带的执行文件格式.它的一些特性继承自Unix的Coff(common object ...

  8. PE文件格式对定位病毒特征码的作用

    本文主要从杀毒软件查杀病毒的原理出发,分析PE文件格式在杀毒软件定位病毒特征码中的作用.杀毒软件通过快速准确定位病毒特征码,对伪装,隐藏,变种病毒进行查杀. 一.杀毒软件查杀病毒的原理概述 对于操作系 ...

  9. PE文件格式介绍

    Useful Tools: 1. WDK安装目录下搜下depends.exe,这个工具可以查看.exe文件依赖的.dll,以及用到的dll中的api. 2.PE文件格式分析器: 有很多的PE格式分析器 ...

随机推荐

  1. Codeforces (ccpc-wannafly camp day2) L. Por Costel and the Semipalindromes

    题目链接:http://codeforces.com/gym/100923/problem/L 分析:题目要求序列首尾相同,在此基础上的字典序第k个:因为只存在a,b所以我们把它等效成0和1的话,字典 ...

  2. pytorch(11)模型创建步骤与nn.Module

    模型创建与nn.Module 网络模型创建步骤 nn.Module graph LR 模型 --> 模型创建 模型创建 --> 构建网络层 构建网络层 --> id[卷积层,池化层, ...

  3. 【转载】关于grad_tensors的解惑

    转载:https://www.cnblogs.com/marsggbo/p/11549631.html 平常都是无脑使用backward,每次看到别人的代码里使用诸如autograd.grad这种方法 ...

  4. Python3基础-目录

    Python3基础-目录(Tips:长期更新Python3目录) 第一章 初识Python3  1.1 Python3基础-前言  1.2 Python3基础-规范 第二章 Python3内置函数&a ...

  5. java 方法详解

    什么是方法 方法的定义和调用 值传递与引用传递 值传递:指的是在方法调用时,传递的是参数是按值的拷贝传递. 特点:传递的是值的拷贝,也就是传递后就互不相关了. 引用传递:指的是在方法调用时,传递的参数 ...

  6. Vmware虚拟机CentOS7、Ubuntu20系统设置静态IP,且主机和虚拟机系统能相互ping通。

    目录 前言 一.VMware虚拟系统centos7设置静态IP 1.1 打开VMware虚拟网络配置窗口 1.2 方法1:通过DHCP服务给主机动态分配IP,同时设置centos静态IP 1.2.1 ...

  7. Windows下常用测试命令

      (1)ping 127.0.0.1 (测试本地网卡,127.0.0.1是本地循环地址,如果本地址无法Ping通,则表明本地机TCP/IP协议不能正常工作) (2)ping 127.0.0.1  - ...

  8. ts装饰器的用法,基于express创建Controller等装饰器

    TS TypeScript 是一种由微软开发的自由和开源的编程语言.它是 JavaScript 的一个超集,而且本质上向这个语言添加了可选的静态类 型和基于类的面向对象编程. TypeScript 扩 ...

  9. Apache配置 6. 访问日记切割

    日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件 (1)配置 (1)配置 # vim /usr/local/apache2 .4/conf/extra/httpd-vh ...

  10. 一篇看懂JVM底层详解,利用class反编译文件了解文件执行流程

    JVM之内存结构详解 JVM内存结构 java虚拟机在执行程序的过程中会将内存划分为不同的区域,具体如图1-1所示. 五个区域 JVM分为五个区域:堆.虚拟机栈.本地方法栈.方法区(元空间).程序计数 ...