【发布时间】:2020-11-02 01:58:54
【问题描述】:
我想在没有 Windows API 调用的情况下对 Windows EXE 文件进行二进制分析(因为我会从另一个操作系统进行)。我想区分 2 x 2 类型:
- 它是窗口程序还是命令行程序?
- 是 Win32 还是 Win64 程序?
希望有通用的位结构可以查询。
【问题讨论】:
-
这能回答你的问题吗? PE File Parsing c/c++
我想在没有 Windows API 调用的情况下对 Windows EXE 文件进行二进制分析(因为我会从另一个操作系统进行)。我想区分 2 x 2 类型:
希望有通用的位结构可以查询。
【问题讨论】:
链接Microsoft PE and COFF Specification 很有用,但有点棘手。这是我现在的结果:
每个 Windows 程序都有一个 DOS 程序块,显示诸如“此程序无法在 DOS 下运行”之类的文本或类似文本。 DOS 块的长度可以不同。 “真正的 Windows 程序”部分稍后开始。 Windows 程序的起始偏移地址编码在字节偏移 0x3c 和 0x3d 中。 0x3d 保存 hi 值,0x3c 保存 lo 值。所以你得计算256*(0x3d) + (0x3c)才能得到真实Windows程序的偏移地址。
真正的 Windows 程序以四个字节开始:“PE”,然后是两个空字节。第五个和第六个字节如果是Win32程序是0x4c01,如果是Win64程序是0x6486。
要检查程序是否基于文本,您必须读取偏移字节(从“PE”=0x00 开始计数)0x5c。值 3 表示基于文本,2 表示窗口 GUI 程序。
【讨论】: