逆向思路

PE结构 (可执行文件布局)

现代操作系统的内存分配以页为单位进行管理,而页通过段进行管理,组成了段页式内存管理。 在 x64dbg 内存布局中可以看到程序的 结构布局 信息

以微信 wecall.dll 为例

wecall.dll                
  ".textbss"     可执行代码
  ".text"        可执行代码
  ".rdata"       只读的已初始化数据
  ".data"        已初始化的数据
  ".pdata"       异常信息
  ".idata"       导入表
  ".msvcjmc"           
  ".00cfg"             
  ".rsrc"        资源  
  ".reloc"       基重定位数据

区段分类

在 ida 可以按 CTRL + S 可以查看, 每个区段的大小 偏移量

在可执行文件的PE格式中,通常包含多个区段,这些区段用于存储不同类型的数据和代码。以下是常见的PE区段及其分类和详细说明:

代码段 (Code Section):

  • 名称:.text
  • 分类:代码段
  • 说明:存储程序的机器代码,即可执行的指令部分。这是程序的主要执行逻辑所在。

数据段 (Data Section):

  • 名称:.data
  • 分类:数据段
  • 说明:存储初始化的全局和静态变量,包括已经赋值的数据。

只读数据段 (Read-Only Data Section):

  • 名称:.rdata
  • 分类:数据段
  • 说明:存储只读的全局和静态变量。通常用于存放只读数据,如常量字符串、格式化字符串等。

未初始化数据段 (Uninitialized Data Section):

  • 名称:.bss
  • 分类:数据段
  • 说明:存储未初始化的全局和静态变量。这些变量在程序启动时会被清零。不占用实际的文件空间,只在运行时分配内存。

导入数据段 (Import Data Section):

  • 名称:.idata
  • 分类:数据段
  • 说明:存储程序所需的外部函数或库的引用信息,用于动态链接。包含导入表,用于描述需要从其他DLL中导入的函数。

导出数据段 (Export Data Section):

  • 名称:.edata
  • 分类:数据段
  • 说明:存储可执行文件中需要对外导出的符号信息,用于动态链接。包含导出表,用于描述该文件导出的函数和数据。

资源数据段 (Resource Data Section):

  • 名称:.rsrc
  • 分类:数据段
  • 说明:存储程序所需的资源数据,如图标、位图、字符串等。这些资源可以在运行时通过API访问。

重定位数据段 (Base Relocation Data Section):

  • 名称:.reloc
  • 分类:数据段
  • 说明:存储可执行文件的重定位信息,用于修正在内存中加载的地址。当可执行文件被加载到非原始地址时,这些重定位信息用于将地址调整到正确的位置。

异常处理数据段 (Exception Handling Data Section):

  • 名称:.pdata
  • 分类:数据段
  • 说明:存储异常处理信息,用于C++异常或SEH(Structured Exception Handling)。包含在C++代码中使用的异常处理表。

调试数据段 (Debug Data Section):

  • 名称:.debug
  • 分类:数据段
  • 说明:存储调试信息,用于调试器和其他调试工具。包含符号表、源代码信息、调试信息等。

这些区段是PE格式中常见的一些区段,但实际上可以根据具体的编译器和链接器选项进行定制,因此可能会有更多不同的区段。不同的编程语言和工具链可能会产生不同的区段组合。

文件对齐

为什么要修正内存对齐?

文件对齐 FileAlignment 和区块对齐 SectionAlignment的缘故,在磁盘中的PE文件的块与块表 块与块之间有许多的空白间隙,这些间隙以0为填充,在文件执行中这些空白是没有意义的,所以我们就可以利用这段空白插入我们想执行的一些代码。

PE中规定了三类对齐:数据在内存中的对齐、 数据在文件中的对齐、资源文件资源数据的对齐 1.内存对齐 由于windows操作系统对内存属性的设置以也为单位,所以通常情况下,节在内存中的对齐单位必须至少一个页的大小。 对于32的windowsxp系统来说,这个值是4KB(1000H) 对于64位操作系统来说,这个值就是8KB(2000H) 2.文件对齐(磁盘存储时候的对齐) 文件对齐要小于内存对齐,通常会一个物理扇区的大小作为对齐粒度的值。 512字节 十六进制表示位200H 通常情况下,PE在内存中的尺寸要比文件中的尺寸大

3.资源数据对齐 在资源文件中,资源字节码部分一般要求以双字(4个字节)方式对齐,以后会学习。

pe文件对齐 PE文件笔记十二 修正内存对齐 官页 wiki od ce找数据总结 [调试逆向] CE教程:进阶篇 CE Tutorial Games gtutorial ](https://www.52pojie.cn/forum.php?mod=viewthread&tid=915447)