如何在llmain中调用MessageBox

Howto call MessageBox in dllmain

本文关键字:调用 MessageBox llmain      更新时间:2023-10-16

我正在创建一个在dll注入POC(概念验证)中使用的小dll。我正在使用代码块的c++ ide。

我的dll的main (dllmain)看起来像这样:

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    MessageBox(0, "myfirstdll loaded", "SUCCESS STATUS", MB_OK);
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH:
            // attach to process
            // return FALSE to fail DLL load
            break;
        case DLL_PROCESS_DETACH:
            // detach from process
            break;
        case DLL_THREAD_ATTACH:
            // attach to thread
            break;
        case DLL_THREAD_DETACH:
            // detach from thread
            break;
    }
    return TRUE; // succesful
}

现在,当我加载dll(使用LoadLibrary)从客户端程序(希望,它加载!),我的消息框不弹出。这很令人沮丧,因为我正在做poc。我知道安全问题盛行,当我们做kernel32.dll等密集的业务在dllmain,但是,我的问题在这里不是安全;我只需要在dllmain中弹出一个消息框。

那么,我如何使我的消息框弹出时,dll加载?

请参阅此问题以了解DllMain中的大量限制。这不仅仅是安全问题。user32导出的任何内容都属于这一类。

换句话说,您不能在DllMain中使用MessageBox。使用OutputDebugString之类的东西代替,它在kernel32中,不显示任何UI。

有很多有用的东西,只是不能在DllMain中完成。阅读Raymond Chen博客上的所有相关文章获取更多信息。甚至不能延迟SetTimer的执行,因为该函数在user32.dll中,并且该库可能尚未加载。