鱼C论坛

 找回密码
 立即注册
查看: 4302|回复: 3

[学习笔记] 《解密系列-系统篇》第二讲:PE结构详解2

[复制链接]
发表于 2018-1-11 22:24:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 shuiyu 于 2018-1-12 20:53 编辑

越努力,越幸运。欢迎大家来看我的笔记,不对的请各位大佬指正,谢谢
一、MS - DOS 头部
(1)每个PE文件是以一个DOS程序开始的,有了它,一旦程序在DOS下执行,DOS才能识别出这是有效的执行体。PE 文件的第一个字节起始于一个传统的MS-DOS 头部,被称作 IMAGE_DOS_HEADER。(其实上是一个结构体)
(2)IMAGE_DOS_HEADER结构体。(最左边为文件头的偏移量)
1.PNG 2.PNG
(3)只要记住下面两个就行了。IMAGE_DOS_HEADER STRUCT
  1. {
  2. +0h        WORD       e_magic     // Magic DOS sigbature MZ(4Dh 5Ah)    DOS可执行文件标记(MZ为两个字节)
  3. +3ch        DWORD    e_lfanew    // Offset to start of PE header       指向PE文件头
  4. }
复制代码


二、PE 文件头
(1)PE 文件头(PE Header)紧挨着DOS stub
PE Header 是PE相关结构NT映像头(IMAGE_NT_HEADER)的简称,里边包含着许多PE装载器用到的重要字段。
(2)执行体在支持PE文件结构的操作系统中执行时,PE装载器将从IMAGE_DOS_HEADER结构中的e_lfanew字段里找到PE Header的起始偏移量,加上基地址就得到PE文件头的指针。
  1. PNTHeader = ImageBase + dosHeader -> e_lfanew    (即:PE文件头=基址+e_lfanew)
复制代码


三、IMAGE_NT_HEADER 结构
(1)
  1. IMAGE_NT_HEADERS STRUCT
  2. {
  3. +0h        DWORD                             Signature            
  4. +4h        IMAGE_FILE_HEADER                 FileHeader
  5. +18h      IMAGE_OPTIONAL_HEADER32            OptionlHeader //可选择的32位文件头
  6. }IMAGE_NT_HEADERS ENDS
复制代码

(2)Signature字段:在一个有效的PE文件里,Signature字段被设置为00004550h,ASCII码字符是"PE00"。标志着PE文件头的开始。"PE00"字符串是PE文件头的开始,DOS头部的e_lfanew字段正是指向这里。如下图所示:
3.PNG
圆圈中的广告是什么?在DOS运行这个程序的时候,首先会进行一个DOS的可执行体,会先提示圆圈中内容。

(3)IMAGE_FILE_HEADER也是结构(所以就变成结构里面得结构了)
  1. typedef  struct_IMAGE_FILE_HEADER
  2. {
  3.         WORD        Machine;-------------------------------//运行平台
  4.         WORD        NumberOfSections;------------------//文件的区块数目
  5.         DWORD        TimeDateStamp;---------------------//文件创建日期和时间
  6.         DWORD        PointerToSymbolTable;-------------//指向符号表(主要用于调试)
  7.         DWORD        NumberOfSymbols;------------------//符号表中符号个数(主要用于调试)
  8.         WORD        SizeOfOptionalHeader;--------------//IMAGE_FILE_HEADER32结构大小
  9.         WORD        Characteristics;//文件属性
  10. }IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER;
复制代码

该结构如下图所示:(每个框就代表一个成员(参数))
4.PNG

(4)关于IMAGE_FILE_HEADER里面成员(参数)的详情介绍:
5.PNG 6.PNG 7.PNG 8.PNG





谢谢小甲鱼带来的视频教程,感谢!!
本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记,不对的请各位大佬指教,谢谢




本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-7 18:16:46 | 显示全部楼层
这么好的贴我居然沙发了,感谢楼主让我轻松理解并copy
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-26 15:11:59 | 显示全部楼层
楼主你的
三、IMAGE_NT_HEADER 结构
(3)IMAGE_FILE_HEADER也是结构(所以就变成结构里面得结构了)
WORD        SizeOfOptionalHeader;--------------//IMAGE_FILE_HEADER32结构大小

这里注释写错了,应该是 //IMAGE_OPTIONAL_HEADER3结构大小2不是IMAGE_FILE_HEADER32结构大小
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-5 08:46:34 | 显示全部楼层
有没有办法在加密时降低时间复杂度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-23 20:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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