OllyDbg 下 Wine dll 的奇怪行为

逆向工程 ollydbg dll 葡萄酒
2021-07-11 13:41:21

我注意到了一些奇怪的事情。OllyDbg 似乎正确加载了 Wine 自己的 dll。但是当我在 OllyDBG 中检查 PE 标头时,它与我期望的不同。在所有其他情况下,文件内容与 OllyDbg 中的 PE 头完全匹配。但是在 Wine 库的情况下,甚至文件签名也不同。

文件中的前三个字节:4D 5A 40 OllyDbg 内存转储:4D 5A 90

然后加载库的其余部分也不同。我没有注意到我检查过的几个 Windows dll 的这种行为。谷歌搜索也没有帮助。有人知道这是怎么回事吗?

更多发现

差异示例

在文件中 - OllyDbg PE 标头

DOS_PEOffset 60 - 40

第 3 - 2 节的数量

尽管我自己的文件分析期望导出表 RVA 和导出表大小为 0,但 OllyDbg 似乎能够读取导出的 Wine dll 符号。请注意,我自己的分析在正常的 Windows dll 文件上正常工作。

以上差异来自 oleaut32.dll,但我在检查其他 Wine dll 时发现类似。Wine dll 的位置:~/.wine/drive_c/windows/system32

我使用的是 wine-1.4.1 和 OllyDbg 2.01。

1个回答

文件中的前三个字节:4D 5A 40 OllyDbg 内存转储:4D 5A 90

从 Wine 的加载器代码可以看出 https://github.com/mirrors/wine/blob/master/libs/wine/loader.c

dos->e_magic    = IMAGE_DOS_SIGNATURE;
dos->e_cblp     = 0x90;                           <-- hardcoded 0x90 val
dos->e_cp       = 3;
dos->e_cparhdr  = (sizeof(*dos)+0xf)/0x10;
dos->e_minalloc = 0;
dos->e_maxalloc = 0xffff;
dos->e_ss       = 0x0000;
dos->e_sp       = 0x00b8;

第 3 - 2 节的数量

我不知道,但也许 WINE 处理带有 IMAGE_SCN_MEM_DISCARDABLE 标志的部分(仅在 Windows 中的 r0 驱动程序中使用),所以当您站在 EntryPoint 上时 - 这些部分尚未映射?