Detours破坏了.NET应用程序

时间:2014-08-21 15:38:39

标签: .net 64-bit native detours

我创建了一个小型的C#桌面应用程序,它只有一个按钮来执行此操作:

OpenFileDialog of = new OpenFileDialog();
of.ShowDialog();    

在Build I下的项目设置未选中"首选32位"这样创建的进程将是本机架构应用程序

然后我尝试使用Detours DetourCreateProcessWithDlls()来使用本机64位DLL注入此过程 (我使用非自由64位绕道而行)

这个过程开始很好但是当我点击按钮时它就会挂起而没有任何反应。

即使DLL注入什么都不做,也会发生这种情况。

从我能够调试它可能与导入表的重写有关,绕道会注入DLL,但我找不到出错或挂起的位置。

Detours中是否存在与此相关的已知错误?
我尝试联系不存在的Microsoft以获得支持,但尚未收到任何回复。

1 个答案:

答案 0 :(得分:1)

虽然微软可以为这个已知错误提供更新版本(如您在评论中所述),但我们还设法通过取消注释modules.cpp中的以下代码部分并注释掉__debugbreak调用来手动修复它:

#if 0
    if (pder->pclr != NULL && pder->clr.Flags != ((PDETOUR_CLR_HEADER)pder->pclr)->Flags) {
        // If we had to promote the 32/64-bit agnostic IL to 64-bit, we don't want
        // to restore its IAT.
        __debugbreak();
        return TRUE;
    }
#endif

此部分实际上导致DetourRestoreAfterWith函数在AnyCPU编译进程的情况下避免尝试恢复IAT。较新的Detours版本只是实现特定的逻辑来处理这种情况。