10

科莫迪亚说:

Windows 8 上的 Modern UI 无法进行 DLL 注入,可以将 DLL 注入 Metro 应用程序,但是,您将无法将 Winsock 流量重定向到 localhost。

换句话说,Windows Metro 应用程序在沙盒环境中工作,无法进行 DLL 注入。

让我们看看Nektra是怎么 说的:

我们意识到我们需要使用交叉证书来签署我们的 DLL,就像那些用于签署内核模式驱动程序一样。我们已经有了在 WinRT 应用程序中注入 DLL 的方法:将 DLL 文件复制到 System32 文件夹中,瞧!

如您所见,Komodia 和 Nektra 说的信息相互矛盾,我的问题是 Windows 8 下 DLL 注入背后的真实情况是什么,我可以像 Nektra 说的那样像往常一样将代码注入 Metro 应用程序(NT,win9x)吗?

4

4 回答 4

10

我是 Nektra 文章的作者。当我们想为 Windows 8 附带的有限 Metro Mail 应用程序添加更多功能时,这项研究就开始了。

尽管该过程与桌面应用程序中的过程并不完全相同,因为通常都会暂停应用程序,但我们首先挂钩了 DCOM 服务。

当 DCOM 服务启动 Metro Mail 应用程序时,我们使用众所周知的 CreateRemoteThread/LoadLibrary 调用方法注入 dll。

在最初的测试中,我们尝试注入位于同一文件夹中的 dll,我们的测试被定位并发现,如果 dll 在 system32 中,它可以正常加载。

后来我们做进一步的研究,看看为什么 dll 如果不在 system32 文件夹中就没有加载。

关于挂钩winsock,我们没有测试过,但我认为应该可以,因为至少在台式电脑上,metro 后面有众所周知的dll(kernel32、user32 等),我们挂钩了一些api 没有问题。

于 2013-04-29T20:48:15.223 回答
9

我是 Komodia 文章的作者,我们的文章和 Nektra 没有冲突,可以 hook Metro 应用,或者运行 Metro 应用的沙箱,但是无法连接到 localhost,不是因为 hook 而是由于本地主机连接的 Metro 限制。在我们的第一个测试中,我们使用了我们的 Win7 WFP(这是一个网络驱动程序)并将数据包的 IP 修改为 localhost,这不适用于 Metro 应用程序,NDIS 将无法正常工作,唯一的方法是使用 Microsoft 的WFP 代理重定向。

也许有人最终会找到或已经找到允许本地主机直接连接的黑客,并且与任何黑客一样,需要考虑风险。如果您想要一种经过批准的方法,WFP 代理重定向是唯一可行的方法。

于 2013-04-29T23:50:49.753 回答
4

我特此回答,因为其他人对此不以为然。dll 文件需要对“所有应用程序包”组具有读取/执行权限。有了这个,加载器将允许您在沉浸式应用程序(=metro 应用程序)中加载任意 dll。

奇迹

于 2015-08-18T03:37:53.240 回答
2

在最初的测试中,我们尝试注入位于同一文件夹中的 dll,我们的测试被定位并发现,如果 dll 在 system32 中,它可以正常加载。

是的,因为 System32 在Metro(Windows 商店)应用程序的搜索顺序中。它没有魔法。

同样,您的测试文件夹可能不在应用程序的 DLL 搜索顺序中(System32、应用程序的包依赖关系图等),因此加载程序不会为应用程序找到您的 DLL。

于 2013-05-01T14:01:17.453 回答