gpt4 book ai didi

windows - 为什么注入(inject)的任何 DLL 都会使主机进程崩溃?

转载 作者:可可西里 更新时间:2023-11-01 10:39:04 24 4
gpt4 key购买 nike

在对我的软件的新版本进行 Beta 测试时,一些用户报告了运行该应用程序时出现的异常情况。在这两种情况下都是:“应用程序无法正确启动 (0xc0000142)”。我也看到它是 0xc0000005。我发现一个本地系统也有这个错误,并发现在调试器下运行它时,“datamngr.dll”有访问冲突并且在堆上分配失败。我很快发现“datamngr.dll”是 spy 软件,并且像在系统的 AppInit 中一样被加载。

一旦我清除了 AppInit 注册表项,这个问题就消失了。我通过 Process Monitor 检查了它,每当注入(inject)这个 DLL 时,我的应用程序就会崩溃。我以为它只是写得很糟糕的 spy 软件,但后来我发现其他 DLL 也在做同样的事情(例如 acaptuser32.dll,它是合法软件)。对我来说奇怪的是我的软件的以前版本不会崩溃。这两个版本之间有很多很多变化,所以很难说是什么。

我从哪里开始?一些在线探索显示 Firefox 等应用程序将 LoadLibrary 替换为黑名单 DLL,以免被注入(inject)。但我想从更基本的问题开始——为什么应用程序现在会崩溃,而以前不会?

我意识到这是非常模糊的,但这几乎是不可避免的。我希望在我做错的项目的属性中有一些明显的东西。我试过打开和关闭 ASLR,打开和关闭 DEP...我试过延迟加载 user32.dll 并通过 LoadLibrary 手动加载它(将 SetErrorMode 设置为忽略错误),但没有任何效果。我们已经看到这种情况发生在 Windows XP 和 Windows 7(32 位和 64 位)上。

任何关于从哪里开始的指示将不胜感激。如果有人需要其他详细信息,我会提供尽可能多的信息。

干杯

最佳答案

我确实找到了解决办法。我使用 Process Monitor 来比较 DLL 在有和没有 DLL 注入(inject)器的版本中的加载顺序。然后让我印象深刻的一件事是我首先包含加载 .NET(通过 LoadLibrary)的 C++ DLL。由于 CLR 是如此庞大,我决定尝试延迟加载该 DLL 和所有 .NET DLL。就是这样 - 我的问题已经解决了。

所以正如 Raymond Chen 所说 -- 排序是脆弱的。如果其他人遇到这个问题,我建议只调整您的 DLL 加载顺序。

关于windows - 为什么注入(inject)的任何 DLL 都会使主机进程崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9171031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com