32位程序在64位系统下运行重定向问题

By | 2020-07-15

1、重定向

自xp系统开始,64位的系统引入了新技术:文件重定向和注册表重定向
这个技术是为了在64位系统下将32位程序和64程序分离开
在64位平台上运行32位程序的模拟器被称为WOW64
WOW64全称为”Windows 32 on Windows 64″

2、注册表重定向

在X64系统里面,一些特殊的注册表键会被分为2个独立的部分

(1)32位程序对注册表某些位置的操作存在重定向

比如对HKLM/Software访问,会被WOW64重定向至HKLM/Software/Wow6432Node

具体存在重定向的注册表位置可参考如下链接:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa384253(v=vs.85).aspx

(2)64位程序对注册表的操作不存在重定向

(3)补充

HKLM/Software/Wow6432Node下保存的均为32位程序的注册表信息

如果在HKLM\Software\Wow6432Node\Microsoft\CurrentVersion\Run添加启动项来运行dll,系统默认会执行32位的rundll32.exe(路径为:c:\windows\SysWOW64\rundll32.exe)来加载dll,加载的dll必须是32位(如果是64位会出错)

当然,如果在HKLM\Software\Microsoft\Windows\CurrentVersion\Run添加启动项来运行dll,则默认为64位rundll32.exe,加载64位dll文件

3、文件重定向

同样,文件系统也存在2个独立的部分

(1)32位程序对%systemroot%/system32 的操作存在重定向

32位文件会被重定向到%systemroot%/SysWOW64

(2)64位程序对文件操作不存在重定向

(3)补充

%systemroot%/SysWOW64下的都为32位程序,在里面可以找到32位的cmd、calc等

小结

基于以上的分析,整理出了如下操作注册表键值和文件系统的方法

32位程序在64系统下执行的时候,如果有对注册表和文件的操作,重定向的细节必须考虑。

对注册表操作:

访问HKLM\Software\的实际路径为HKLM\Software\Wow6432Node\

对文件操作:

访问c:\windows\Sysnative\ 的实际路径为 c:\windows\system32\
访问c:\windows\system32\ 的实际路径为 c:\windows\SysWOW64\

引用Stuart@ukstufus文章中的两幅图,能够帮助大家更清晰的认识其中的细节。

感谢Stuart@ukstufus的分享。解决了我的问题,也让我有了更清楚的认识。

《Persistence Architecture Matters》的链接:
https://labs.mwrinfosecurity.com/blog/persistence-architecture-matters/

更多学习资料:

发表回复

您的电子邮箱地址不会被公开。