Win7 和 Win8 PE 加载器的区别?

逆向工程 二元分析 聚乙烯 可执行 二进制格式 视窗-8
2021-06-22 11:25:29

是否知道 Window 7 和 Windows 8 PE 加载程序之间的区别是什么?

我正在尝试手工制作一个简单的可执行 PE 映像文件。它在 Windows 7 中运行良好,但被 Windows 8 拒绝。

该文件在此处链接:http : //lars.nocrew.org/tmp/W7-ok.exe

Microsoft (R) COFF/PE Dumper Version 8.00.50727.762

Dump of file W7-ok.exe
PE signature found
File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
             14C machine (x86)
               0 number of sections
               0 time date stamp Thu Jan 01 00:00:00 1970
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
             10F characteristics
                   Relocations stripped
                   Executable
                   Line numbers stripped
                   Symbols stripped
                   32 bit word machine

OPTIONAL HEADER VALUES
             10B magic # (PE32)
            0.00 linker version
               0 size of code
               0 size of initialized data
               0 size of uninitialized data
             24C entry point (0040024C)
               0 base of code
               0 base of data
          400000 image base (00400000 to 0040025B)
               4 section alignment
               4 file alignment
            0.00 operating system version
            0.00 image version
            4.00 subsystem version
               0 Win32 version
             25C size of image
             230 size of headers
               0 checksum
               3 subsystem (Windows CUI)
               0 DLL characteristics
               0 size of stack reserve
               0 size of stack commit
               0 size of heap reserve
               0 size of heap commit
               0 loader flags
               2 number of directories
               0 [       0] RVA [size] of Export Directory
             1B8 [       0] RVA [size] of Import Directory


  Summary
1个回答

不同之处在于 Windows 8 要求所有常规结构(导出、导入、TLS、异常处理程序、重定位……即数据目录条目描述的所有内容)都完全位于一个部分内。唯一的例外是绑定导入表,它存储在任何部分的外部,以避免“污染”内容,因为绑定导入表数据在使用后会被丢弃。无论如何,在存在 ASLR 的情况下,绑定导入表也毫无意义,因为地址几乎永远不会匹配。

在没有任何部分的情况下,您必须找到 DLL 基础并自己解决导入问题。

如果您创建一个单独的部分来保存您的导入表,那么它将在两种环境中加载。