在对我的软件的新版本进行 beta 测试时,一些用户在运行该应用程序时报告了异常。在这两种情况下都是:“应用程序无法正确启动(0xc0000142)”。我也将其视为 0xc0000005。我发现一个本地系统也有这个错误,并且在调试器下运行它时发现,“datamngr.dll”有访问冲突并且在堆上分配失败。我很快发现“datamngr.dll”是间谍软件,并且正在加载,就像它在系统的 AppInit 中一样。
一旦我清除了 AppInit reg 键,这个问题就消失了。我通过进程监视器检查了它,每当注入这个 DLL 时,我的应用程序就会崩溃。我以为它只是编写得很糟糕的间谍软件,但后来我发现其他 DLL 也在做同样的事情(例如 acaptuser32.dll,它是合法软件)。对我来说奇怪的是我的软件的以前版本没有崩溃。两个版本之间有很多很多的变化,所以很难说它是什么。
我从哪里开始?一些在线探索显示 Firefox 等应用程序替换 LoadLibrary 以将 DLL 列入黑名单以防止注入。但我想从更基本的开始——为什么应用程序现在崩溃了,而以前没有?
我意识到这是非常模糊的,但这几乎是不可避免的。我希望我做错的项目的属性中有一些明显的东西。我尝试过打开和关闭 ASLR,打开和关闭 DEP...我尝试过延迟加载 user32.dll 并通过 LoadLibrary 手动加载它(SetErrorMode 设置为忽略错误),但没有什么对我有用。我们已经在 Windows XP 和 Windows 7(32 位和 64 位)上看到了这种情况。
任何关于从哪里开始的指针将不胜感激。如果有人需要其他详细信息,我会提供尽可能多的信息。
干杯