逆向启程(4):第四周培训

第四周培训

第四周学习任务 1.nssctf上5-10题,写出wp 2.了解pe文件系统中的dos头,pe头部分,安装winhex破解版 3.了解VA,IMAGEBase,RVA,FA具体指什么 4.编程判断主机字节序(了解大小端序) 以上内容均写入博客。

一.了解pe文件系统中的dos头,pe头部分

初识PE文件--dos头、pe头 - cunren - 博客园 (这个网站讲的巨全面)

首先如何判断是否为PE文件

1.我们可以通过010Editor,winhex等工具来观察头信息,是不是MZ

2.通过PEiD这个工具直接得出

PE 结构包含的结构体有 DOS 头、PE 标识、文件头、可选头、目录结构、节表等。

image

关于DOS头

无论是32位或64位可执行文件,其文件的头部必定是IMAGE_DOS_HEADER

typedef struct _IMAGE_DOS_HEADER {      // DOS .EXE header
    WORD   e_magic;                     // Magic number
    WORD   e_cblp;                      // Bytes on last page of file
    WORD   e_cp;                        // Pages in file
    WORD   e_crlc;                      // Relocations
    WORD   e_cparhdr;                   // Size of header in paragraphs
    WORD   e_minalloc;                  // Minimum extra paragraphs needed
    WORD   e_maxalloc;                  // Maximum extra paragraphs needed
    WORD   e_ss;                        // Initial (relative) SS value
    WORD   e_sp;                        // Initial SP value
    WORD   e_csum;                      // Checksum
    WORD   e_ip;                        // Initial IP value
    WORD   e_cs;                        // Initial (relative) CS value
    WORD   e_lfarlc;                    // File address of relocation table
    WORD   e_ovno;                      // Overlay number
    WORD   e_res[4];                    // Reserved words
    WORD   e_oemid;                     // OEM identifier (for e_oeminfo)
    WORD   e_oeminfo;                   // OEM information; e_oemid specific
    WORD   e_res2[10];                  // Reserved words
    LONG   e_lfanew;                    // File address of new exe header
  } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

.

MZ文件头和Dos Stub

MZ文件头:IMAGE_DOS_HEADER 结构体,其大小占64个字节,并且该结构中的最后一个LONG类型e_lfanew成员指向PE文件头的位置为中的PE文件头标志的地址。

这里有两个比较有用的成员信息:

1、e_magic,用于判断PE文件的标识。如果不是MZ即不是十六进制值:0x5A4D。计算机存储顺序是低位在前高位在后,所以存储为:0x4D5A。

2、e_lfanew,这里是指pe的偏移量,用于找到pe头的位置

如下阴影区域:

image

DOS stub:dos存根,在IMAGE_DOS_HEADER和IMAGE_NT_HEADERS之间存在一DOS存根,这其实是一段汇编代码:

PE文件是运行在32位或64位操作系统下的。

其功能是当该EXE运行在16位环境下,输出一段文字:“This program cannot be run in DOS mode”,然后并退出该进程。

在pe文件利用的时候,我们可以把payload写入到当前区域,诸如存放我们的shellcode,在读取时,获取dos头字节数,减去MZ头字节数,即为dos存根字节大小。然后拿去操作加载shellcode等。

image

PE头:

在MS-DOS头下main,就是PE头,PE头是PE相关结构NT映像头(IMAGE_NT_HEADER)的简称,其中包含许多PE装载器用到的重要字段。

IMAGE_NT_HEADER数据结构定义:

typedef struct _IMAGE_NT_HEADERS {
  DWORD                   Signature;
  IMAGE_FILE_HEADER       FileHeader;
  IMAGE_OPTIONAL_HEADER32 OptionalHeader;
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;

将文件标识为 PE 映像的 4 字节签名。字节为“PE\0\0”。这个字段是PE文件的标志字段,通常设置成00004550h,其ASCII码为PE00,这个字段是PE文件头的开始,前面的DOS_HEADER结构中的字段e_lfanew字段就是指向这里。

剩下的都可以看那个网站里面的,特别好

了解VA,IMAGEBase,RVA,FA具体指什么

1. VA (Virtual Address) - 虚拟地址

VA 是指进程在虚拟内存中访问数据时使用的地址。现代操作系统使用虚拟内存技术,使得每个进程认为它拥有独立的内存空间。实际上,这些虚拟地址会被操作系统映射到物理内存中的某个位置。虚拟地址通常被用于进程的地址空间,操作系统负责将虚拟地址映射到物理内存(或交换到硬盘上)。

在 Windows 中,进程通过虚拟地址访问其可执行文件的代码、数据和堆栈等。

2. IMAGEBase - 可执行文件基址

IMAGEBase 是 Windows 可执行文件(如 .exe.dll)的一个字段,指示程序加载到虚拟内存时的基地址。它是该文件在内存中加载时的起始地址。这个基地址通常由操作系统指定,当程序被加载到内存时,操作系统会将可执行文件的内容放置在指定的虚拟地址范围内。

  • IMAGEBase 在 PE(Portable Executable)文件头的 Optional Header 部分定义。

  • 对于一个 Windows 可执行文件,当它加载到内存中时,操作系统将从 IMAGEBase 地址开始加载该文件的内容。

例子

  • 如果一个程序的 IMAGEBase0x00400000,那么程序加载到内存时,其起始位置会从虚拟地址 0x00400000 开始。

3. RVA (Relative Virtual Address) - 相对虚拟地址

RVA 是相对于某个模块的 IMAGEBase 的偏移地址。在 Windows 可执行文件中,程序中的各个部分(如代码、数据、符号表等)都有一个 RVA,表示该部分相对于 IMAGEBase 的偏移量。

简言之,RVA 是一种相对地址,它不包含实际的加载基地址,而是仅仅指示了某个数据项相对于模块加载基地址的位置。

  • 例如,如果某个数据段的 RVA0x1000,而程序的 IMAGEBase0x00400000,那么该数据段的虚拟地址就是 0x00401000IMAGEBase + RVA)。

RVA 与 VA 的关系

  • RVA 是相对于模块的 IMAGEBase 的偏移量,而 VA 是加载到虚拟内存中的实际地址。通过将 RVA 加上 IMAGEBase,可以得到文件加载到内存中的实际虚拟地址(VA)。

4. FA (File Address) - 文件地址

FA 是指文件中的物理地址,通常是指文件中数据的实际偏移量。它表示文件中某个数据项在磁盘文件中的位置,而不是在内存中的位置。

  • 当程序从磁盘加载时,文件中的内容会被映射到虚拟内存中。

  • FARVA 是不同的,因为 FA 是相对于文件本身的偏移,而 RVA 是相对于加载到内存后的偏移。

FA 与 RVA 的关系

  • 在 PE 文件中,文件中的各个部分(如代码段、数据段等)都有一个文件偏移(FA),而相对于 IMAGEBase 的偏移是 RVA。在加载过程完成后,文件中的 FA 会通过映射转换为内存中的 RVA

关系总结

  • VA (Virtual Address):程序加载到虚拟内存中的地址。

  • IMAGEBase:可执行文件的基地址,即它加载到内存时的起始地址。

  • RVA (Relative Virtual Address):相对于 IMAGEBase 的偏移量,用于指示文件或模块中数据的位置。

  • FA (File Address):文件中的物理地址或偏移,表示文件数据的实际位置。

具体例子

假设你有一个 PE 文件,其中:

  • IMAGEBase0x00400000

  • 一个数据段的 RVA0x00100000,即这个数据段相对于 IMAGEBase 的偏移。

  • 文件中该数据段的 FA(文件地址)为 0x00020000

那么:

  • 该数据段在内存中的虚拟地址 VAIMAGEBase + RVA = 0x00400000 + 0x00100000 = 0x00500000

  • 该数据段在文件中的物理位置是 FA = 0x00020000

这些概念在程序分析、调试和逆向工程中非常重要,尤其是在需要从磁盘文件解析和加载可执行文件时。。

编程判断主机字节序(了解大小端序)

在编程中,判断主机的字节序(即大小端序)是一个非常常见的问题,尤其是在跨平台开发中。字节序指的是多字节数据(例如 intfloat 等)在内存中的存储顺序。常见的字节序有两种:

  • 大端序(Big-Endian):高位字节存储在低地址端,低位字节存储在高地址端。

  • 小端序(Little-Endian):低位字节存储在低地址端,高位字节存储在高地址端。

(SCI三维路径规划对比)25年最新五种智能算法优化解决无人机路径巡检三维路径规划对比(灰雁算法真菌算法吕佩尔狐阳光生长研究(Matlab代码实现)内容概要:本文档主要介绍了一项关于无人机三维路径巡检规划的研究,通过对比2025年最新的五种智能优化算法(包括灰雁算法、真菌算法、吕佩尔狐算法、阳光生长算法等),在复杂三维环境中优化无人机巡检路径的技术方案。所有算法均通过Matlab代码实现,并重点围绕路径安全性、效率、能耗和避障能力进行性能对比分析,旨在为无人机在实际巡检任务中的路径规划提供科学依据和技术支持。文档还展示了多个相关科研方向的案例与代码资源,涵盖路径规划、智能优化、无人机控制等多个领域。; 适合人群:具备一定Matlab编程基础,从事无人机路径规划、智能优化算法研究或自动化、控制工程方向的研究生、科研人员及工程技术人员。; 使用场景及目标:① 对比分析新型智能算法在三维复杂环境下无人机路径规划的表现差异;② 为科研项目提供可复现的算法代码与实验基准;③ 支持无人机巡检、灾害监测、电力线路巡查等实际应用场景的路径优化需求; 阅读建议:建议结合文档提供的Matlab代码进行仿真实验,重点关注不同算法在收敛速度、路径长度和避障性能方面的表现差异,同时参考文中列举的其他研究案例拓展思路,提升科研创新能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值