吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8667|回复: 29
收起左侧

[原创] 学破解必备,PE文件结构,菜鸟进来看看,忘记的大大也来看看吧!

  [复制链接]
Anonymous、 发表于 2014-3-17 21:11
本帖最后由 Anonymous、 于 2014-3-19 15:57 编辑

第一次发帖,请多多指教,最近在学PE格式,就整理了一份资料..........
第二篇帖子,实践哦!!!!!

http://www.52pojie.cn/thread-245213-1-1.html


IMAGE_DOS_HEADER STRUCT
  {
    +0h       WORD   e_magic                        ; MZ签名     'MZ'字符
    +2h       WORD   e_cblp                           ; 文件长度%512
    +4h       WORD   e_cp                              ; 文件长度/512
    +6h       WORD   e_crlc                            ; 重定位项数   重定位表的表项计数
    +8h       WORD   e_cparhdr                      ; 文件头所需段数 文件头的大小。文件头后面就是指令。
    +0ah      WORD   e_minalloc                     ; 运行需最小段数
    +0ch      WORD   e_maxalloc                    ; 运行需最大段数
    +0eh      WORD   e_ss                              ; 代码的初始化堆栈SS
    +10h      WORD   e_sp                             ; 代码的初始化堆栈指针SP
    +12h      WORD   e_csum                        ; 校验和为0
    +14h      WORD   e_ip                              ;  DOS 代码的初始化指令入口[指针IP]
    +16h      WORD   e_cs                             ;   初始CS
    +18h      WORD   e_lfarlc                         ; 重定位表位置
    +1ah      WORD   e_ovno                        ; 覆盖号
    +1ch      WORD   e_res[4]                       ; 保留字
    +24h      WORD   e_oemid                      ; OEM标识符
    +26h      WORD   e_oeminfo                   ; OEM信息
    +29h      WORD   e_res2[10]                  ; 保留字
    +3ch      DWORD  e_lfanew                    ; PE文件头偏移,指定了PE文件头的位置
  } IMAGE_DOS_HEADER ENDS


IMAGE_NT_HEADERS STRUCT                                                                                      ; NT,即PE文件头
  {
    +0h       DWORD Signature                                                                                       ; PE文件标识
    +4h       IMAGE_FILE_HEADER FileHeader                 
            {
                     typedef struct _IMAGE_FILE_HEADER
             {
                                                                  +04h     WORD   Machine                             ; 运行平台
                                                                  +06h     WORD   NumberOfSections             ; 文件的区块数目
                                                                  +08h     DWORD  TimeDateStamp               ; 文件创建日期和时间
                                                                  +0Ch     DWORD  PointerToSymbolTable     ; 指向符号表(主要用于调试)
                                                                 +10h     DWORD  NumberOfSymbols            ; 符号表中符号个数(同上)
                                                                  +14h     WORD   SizeOfOptionalHeader         ;IMAGE_OPTIONAL_HEADER32 结构大小
                                                                    +16h     WORD   Characteristics                  ; 文件属性
               } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER
            }
    +18h      IMAGE_OPTIONAL_HEADER32 OptionalHeader
            {
                    typedef struct _IMAGE_OPTIONAL_HEADER
                        {
                                                            +18h     WORD   Magic                                      ; 标志字, ROM 映像(0107h),普通可执行文件(010Bh)
                                                            +1Ah     BYTE   MajorLinkerVersion                    ; 链接程序的主版本号
                                                            +1Bh     BYTE   MinorLinkerVersion                     ; 链接程序的次版本号
                                                            +1Ch     DWORD  SizeOfCode                           ; 所有含代码的节的总大小
                                                            +20h     DWORD  SizeOfInitializedData               ; 所有含已初始化数据的节的总大小
                                                            +24h     DWORD  SizeOfUninitializedData           ; 所有含未初始化数据的节的大小
                                                            +28h     DWORD  AddressOfEntryPoint            ; 程序执行入口RVA
                                                            +2Ch     DWORD  BaseOfCode                         ; 代码的区块的起始RVA
                                                            +30h     DWORD  BaseOfData                          ; 数据的区块的起始RVA
                                                            +34h     DWORD  ImageBase                           ; 程序的首选装载地址
                                                            +38h     DWORD  SectionAlignment                 ; 内存中的区块的对齐大小
                                                            +3Ch     DWORD  FileAlignment                        ; 文件中的区块的对齐大小
                                                            +40h     WORD   MajorOperatingSystemVersion; 要求操作系统最低版本号的主版本号
                                                            +42h     WORD   MinorOperatingSystemVersion; 要求操作系统最低版本号的副版本号
                                                            +44h     WORD   MajorImageVersion                 ; 可运行于操作系统的主版本号
                                                            +46h     WORD   MinorImageVersion                 ; 可运行于操作系统的次版本号
                                                            +48h     WORD   MajorSubsystemVersion         ; 要求最低子系统版本的主版本号
                                                            +4Ah     WORD   MinorSubsystemVersion         ; 要求最低子系统版本的次版本号
                                                            +4Ch     DWORD  Win32VersionValue              ; 莫须有字段,不被病毒利用的话一般为0
                                                            +50h     DWORD  SizeOfImage                         ; 映像装入内存后的总尺寸
                                                            +54h     DWORD  SizeOfHeaders                      ; 所有头+ 区块表的尺寸大小
                                                            +58h     DWORD  CheckSum                           ; 映像的校检和
                                                            +5Ch     WORD   Subsystem                            ; 可执行文件期望的子系统
                                                            +5Eh     WORD   DllCharacteristics                    ; DllMain()函数何时被调用,默认为0
                                                            +60h     DWORD  SizeOfStackReserve              ; 初始化时的栈大小
                                                            +64h     DWORD  SizeOfStackCommit              ; 初始化时实际提交的栈大小
                                                            +68h     DWORD  SizeOfHeapReserve               ; 初始化时保留的堆大小
                                                            +6Ch     DWORD SizeOfHeapCommit                ; 初始化时实际提交的堆大小
                                                            +70h     DWORD LoaderFlags                           ; 与调试有关,默认为0
                                                            +74h     DWORD NumberOfRvaAndSizes          ; 下边数据目录的项数,这个字段自WindowsNT发布以来一直是16
                                                            DataDirectory     [IMAGE_NUMBEROF_DIRECTORY_ENTRIES]          ; 数据目录表,次结构重复16次!!!!!!
                                                                            {
                                                                                            IMAGE_DATA_DIRECTORY STRUCT
                          VirtualAddress DWORD                                                                       ;数据的起始RVA
                          isize DWORD                                                                                      ;数据块的长度
                          IMAGE_DATA_DIRECTORY ENDS
                                                                             }
                    } IMAGE_OPTIONAL_HEADER32 ENDS
                  } IMAGE_NT_HEADERS ENDS
                }     


typedef struct _IMAGE_SECTION_HEADER
  {
        BYTE Name[IMAGE_SIZEOF_SHORT_NAME]               ; 节表名称,如“.text”;IMAGE_SIZEOF_SHORT_NAME=8
        union
                    {
                    DWORD PhysicalAddress                                   ; 物理地址
                    DWORD VirtualSize                                            ;真实长度,这两个值是一个联合结构,可以使用其中的任何一个,一般是取后一个
                    } Misc
          DWORD    VirtualAddress                                          ; 节区的RVA 地址
          DWORD    SizeOfRawData                                        ; 在文件中对齐后的尺寸
          DWORD    PointerToRawData                                  ; 在文件中的偏移量
          DWORD    PointerToRelocations                              ; 在OBJ 文件中使用,重定位的偏移
          DWORD    PointerToLinenumbers                            ; 行号表的偏移(供调试使用地)
          WORD     NumberOfRelocations                               ; 在OBJ 文件中使用,重定位项数目
          WORD     NumberOfLinenumbers                            ; 行号表中行号的数目
          DWORD Characteristics                                          ; 节属性如可读,可写,可执行等
    } IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;


PE结构详细图.jpg

PE结构详细图.zip

453.44 KB, 下载次数: 97, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 1热心值 +1 收起 理由
马斯维尔 + 1 不错。

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

1215686225 发表于 2014-3-19 14:06
看不懂,貌似很厉害的样子。
fzcm 发表于 2014-3-19 11:50
 楼主| Anonymous、 发表于 2014-3-17 21:12
 楼主| Anonymous、 发表于 2014-3-17 21:16
gxlnet 发表于 2014-3-17 21:15
看不到不着调什么

什么????
马斯维尔 发表于 2014-3-17 21:24
不错。还带偏移的。挺方便的
 楼主| Anonymous、 发表于 2014-3-17 21:26
马斯维尔 发表于 2014-3-17 21:24
不错。还带偏移的。挺方便的

大大,求热心值....
晓风☆残月 发表于 2014-3-17 21:37
感谢分享!!支持!!!
吾爱破解14 发表于 2014-3-19 09:50
没学过计算机语言,只能羡慕了啊
blmk 发表于 2014-3-19 10:05
果然我还是需要复习一下PE
易〓空 发表于 2014-3-19 11:38
没学过计算机语言,只能羡慕了
poloalto 发表于 2014-3-19 11:41
看懂一部分
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-30 04:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表