2

我目前正在用 C++ 编写一些测试代码,这些代码会混淆 PE 文件以了解其文件格式结构。我的项目设置为编译为 64 位。在我的代码中,我打开 %SystemRoot%\system32\calc.exe 并读取 IMAGE_DOS_HEADER 和 IMAGE_NT_HEADERS 结构。同时,我在 Notepad++ 中使用十六进制编辑器插件打开了相同的 calc.exe。我将代码读取的值与 Notepad++ 进行了比较,发现它们不同。我将 calc.exe 从 System32 复制到 C:\Temp\calc.exe,现在值匹配。

Notepad++ 似乎是一个 32 位应用程序(尚未检查 PE 文件,但由于它默认安装到 Program Files (x86),因此这似乎是一个安全的假设)。

这是 WinSxS 在工作吗?或者还有什么原因造成的?哪个文件实际上被提供给打开 %SystemRoot%\system32\calc.exe 的 32 位应用程序?

只是好奇。提前感谢您对此有所了解。

4

3 回答 3

5

是的,这是 WOW 重定向器。您会看到 C:\Windows\SysWOW64 中也有一个 calc.exe。这是您使用 %SystemRoot%\System32\calc.exe 路径时打开的文件。

这可以暂时禁用以使用Wow64DisableWow64FsRedirection访问文件的 64 位版本

可以在文件系统重定向器中找到更多详细信息

于 2011-04-28T16:52:08.670 回答
1

如果我没记错的话,当一个 32 位应用程序尝试打开system32目录时,它会自动重定向到syswow64目录。

于 2011-04-28T16:50:39.570 回答
1

禁用 WowFs 重定向是不必要的,有时甚至不是一个选项(例如,当您试图让 Notepad++ 打开 system32 目录中的文件时)。您可以使用虚拟目录 %windir%\Sysnative 而不是 %windir%\System32 (您不会在资源管理器中看到它,但您可以在地址栏中键入它)

WOW64 在三个 DLL 中实现:wow64.dll、wow64cpu.dll 和 wow64win.dll(以及 32 位 NTDLL)。重定向(除其他外)在 wow64.dll 中实现,CPU 仿真/帮助程序在 wow64cpu.dll 中实现,并且 wow64win.dll 包含对 win32k.sys(负责 Windows GUI 的内核模式驱动程序)的 thunk。

于 2011-04-28T22:57:54.857 回答