首页
社区
课程
招聘
wow64cpu.dll问题
发表于: 2014-7-31 21:21 9287

wow64cpu.dll问题

2014-7-31 21:21
9287
简介

编辑

WOW64 (Windows-on-Windows 64-bit)是一个Windows操作系统的子系统, 它为现有的 32 位应用程序提供了 32 位的模拟,可以使大多数 32 位应用程序在无需修改的情况下运行在 Windows 64 位版本上。它类似于旧的 WOW32 子系统,负责在 Windows 32 位版本下运行 16 位的代码。

硬件本身具有 32 位兼容性模式,可以处理 IA-32 指令的实际执行,而 WOW 层处理诸如在 32 位和 64 位模式之间切换处理器以及模拟 32 位系统的事务。例如,32 位和 64 位程序具有不同的注册表配置单元。还有一个用于 32 位二进制文件的不同的系统目录。64 位二进制文件仍然使用 System32 目录,因此,当 32 位应用程序安装到系统中时,WOW 层会确保将 32 位二进制文件置于一个新的目录 SysWOW64 中。这是通过如下方式实现的:根据应用程序是否运行在 WOW 下,截获对 API 的调用(如 GetSystemDirectory)并返回适当的目录。相同的问题可能会存在于注册表中。因为 32 位和 64 位的 COM 服务器都可以安装在系统上,并位于相同的类标识符 (CLSID) 下,因此 WOW 层需要将对注册表的调用重定向到适当的 32 位或 64 位配置单元中。WOW 层也会处理注册表中某些区域之间的镜像更改,以便使其更简单地支持 32 位和 64 位代码之间的交互操作。

WOW64 非常重要,因为当不关注性能和可伸缩性的问题时,它使您可以利用大多数现有的 32 位代码。它是两种方法的最佳结合。您可以将您的服务迁移到 64 位,同时将 Microsoft 管理控制台 (MMC) 配置管理单元保留为 32 位。Windows 64 位版本包括 MMC 的 32 位和 64 位的版本。当选择保留管理工具为 32 位时,进程间的通讯可能会遇到某些问题,但是只要接口设计正确,诸如远程过程调用 (RPC) 的协议应该可以在 32 位和 64 位进程之间运行。有关 WOW64 的另外一点需要牢记:它并不是为要求高性能的应用程序而设计的。至少,WOW64 子系统需要将 32 位参数扩展到 64 位,并且需要将 64 位的返回值截断为 32 位。在最糟糕的情况下,WOW64 子系统将需要进行内核调用,涉及到的不仅仅是到内核的转换,还有从处理器的 32 位兼容性模式到其本机 64 位模式的转换。在 WOW64 下运行时,应用程序将无法妥当地进行调整。对于那些您要将其保留为 32 位的应用程序而言,请在 WOW64 下测试它们。如果性能不能满足您的期望,您需要考虑将应用程序迁移到 64 位。

之前研究他人的软件发现进程通信被阻断了,我看到他有HOOK WOW64CPU.DLL。

问题:能不能HOOK  WOW64CPU.DLL,阻断进程间的通信,或者让一个32位程序用64位的系统目录。

请说的稍微具体一些,谢谢啦。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 2153
活跃值: (740)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
让一个32位程序用64位的系统目录
不可以,架构不同,指令集不同,地址空间不同
至于你说的hook,不至于找wow64cpu,其他的dll一样可以,看是怎么通讯的了
2014-7-31 21:34
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我也是看到别人弄wow64cpu不明白他干嘛要弄她,但是的确影响通信了。Semaphore之间内存不共享了。
或者换个问题如何让Semaphore之间内存不共享。(不结束内核句柄,不修改共享的内存)。
2014-7-31 21:49
0
雪    币: 2153
活跃值: (740)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
Semaphore是信标吧?
当一个程序去Open一个已经存在的信标时,创建一个新的返回不就行了?
---
另外你说的程序去hook wow64cpu这个模块
我记得在32位空间中是看不到的,如同64位的ntdll一样,真不知道咋hook。
PS:在32位程序空间中,有64位的ntdll,还有wow64cpu(搞不清是32位还是64位),但它们不可见。
2014-7-31 22:14
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
5
32位程序在wow下混合64位代码也不是不可能。
参考:Mixing x86 with x64 code
2014-7-31 23:03
0
雪    币: 56
活跃值: (276)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
很好收藏了
2014-8-1 08:58
0
雪    币: 1555
活跃值: (3103)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
7
不懂  顶起来
2014-8-1 09:20
0
雪    币: 75
活跃值: (688)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
应该是可以的。wowxxx.dll实现的是一个转接层,把32位的调用转到64位调用。这几个dll里面有类似内核里的ssdt的东东,可以在这里面做hook,拦截系统调用,阻止进程通信没问题吧。
只与32位使用64系统目录,我觉得倒是可以在64位转接层增加一个调用接口出来,沿用32调用转到64位调用的机制,在32位中调这个接口。进入了64位模式,操作64位系统目录肯定没问题
2014-8-1 09:53
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
64位系统跑的32位程序,他修改了wow64cpu改掉了几个地方。
诡异的是,打开它的程序,开一个32位程序,之后再关掉它的程序,之后再开这个32位程序都加载了他修改过的wow64cpu,并且通讯都阻断了。
2014-8-1 18:24
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
哪里有32位程序如何在64位系统运行的原理,资料有吗。这个转接是如何实现了,用哪几个关键API实现的。
2014-8-1 18:30
0
游客
登录 | 注册 方可回帖
返回
//