我正在运行 Windows 7 SP1 Ultimate(64 位),该操作系统正在向互联网发出一些不受欢迎的和无法识别的调用。
每当我启动游戏时(在这种情况下虚幻竞技场65.55.162.26
) 我注意到 Windows 尝试通过连接到 IP 地址rundll32.exe
。
使用 Fiddler(和/或粗略的 Google 搜索)显示该 IP 与以下主机名相关:
games.metaservices.microsoft.com
music.metadata.windowsmedia.com.akadns.net
info.music.metaservices.microsoft.com
我发现这很可能来自“Windows 游戏资源管理器”(或只是“开始菜单”中的“游戏”)。
但是,即使我禁用游戏资源管理器中所有与在线相关的选项,Windows 仍在尝试建立连接。
我想明确指出的是,这不是由游戏本身引发的。
为什么会发生这种情况,因为我已经禁用了 Windows 游戏资源管理器的所有在线功能,我该怎么做(除了在我的hosts
文件中阻止上述主机名)来阻止它?
我提出这样的原则:当我明确要求操作系统不要这样做时,它就不应该进行调用。
答案1
为什么会发生这种情况?
这一页提出了合理的理由:
Windows 7 中有一个烦人的软件,叫做“游戏资源管理器”,可以通过“开始”菜单中的“游戏”按钮启动。每当启动游戏时,它都会自动从互联网上下载图标、封面和其他微软认为有用的东西。
如何阻止它?
我想象了几种选择(从最干净到最脏):
- 从程序兼容性助手(PCA)中排除可执行文件
support.microsoft.com/en-us/kb/2545347
。 Program Compatibility Assistant
使用服务面板或通过组策略编辑器禁用。- 将提到的主机重定向到 127.0.0.1。我试过了,但对我的情况不起作用——进程只是挂起。然而,这一页这表明它对 Oblivion 有效。
- 限制访问
gameux.dll
。这就是我为“修复” Project Nomads 所做的工作(见下文)。 - 删除
C:\Windows\AppPatch\sysmain.sdb
。第一个链接表明它有效。
我还没有尝试过#1、#2 和#5。
我的经验
我注意到了完全相同的问题,Project Nomads (2002) 在我打开互联网之前无法启动。游戏 exe 文件会启动,rundll32.exe
然后运行C:\Windows\System32\gameux.dll
,而这确实请求了65.55.162.26:443
。
我不想像第一个链接建议的那样尝试删除sysmain.sdb
——也许一些旧程序会崩溃?毕竟这是“兼容性”功能。
相反,我获得了所有权gameux.dll
并从访问列表中删除了我的用户。现在,当我启动游戏时,它显示Access denied to gameux.dll
,我按“确定”,rundll32.exe
进程退出,游戏运行正常。没有执行任何请求,游戏无需互联网连接即可运行。
到底是怎么回事?
来自 Windows Shim 数据库 (SDB) 分析器工具页面 ( tzworks.net/prototype_page.php?proto_id=33
):
Microsoft 的应用程序兼容性框架使用 Shim 数据库来识别是否以及如何在进程启动和/或 DLL 加载期间对应用程序或 DLL 进行填充。默认的 Shim 数据库位于 \Windows\AppPatch\sysmain.sdb,对于普通的 Win7 系统来说,它可以包含数千个条目。
...应用程序兼容性框架允许在 Windows 系统中安装的应用程序进行“动态”修补(即无需重新启动即可进行修改),并且该修补程序可用于生成其他进程和/或将不需要的 DLL 注入到修补的应用程序中。
我不能肯定地说,但我对你的评论的唯一解释
该调用来自 rundll32.exe,它调用的是 Microsoft 特定的主机,而该主机在该游戏开发几年后才存在
Windows 是注射调用gameux.dll
我们无辜的游戏 exe。
Malicious Application Compatibility Shims
如果您担心安全问题,可以参阅一篇论文。
PS:抱歉,我不得不欺骗编辑,让他发布>2 个链接,并获得<10 个评价。