【问题标题】:Win32 Form for dll injection用于dll注入的Win32 Form
【发布时间】:2012-12-14 15:19:57
【问题描述】:

我创建了一个包含表单的 dll,当我们注入 dll 时,表单会打开。 但是当我这样做时的问题,我注入的过程,卡住了,我不能让他注意到。

我做了什么。

DWORD WINAPI MessageLoop(HINSTANCE hInstance)
{
    hWindow = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DLGPROC(WindowProc));

    MSG Msg;
    while(GetMessage(&Msg, 0, 0, 0))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }

    return 0;
}

和注射:

DWORD WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPSTR lpszReserved)
{
    if(dwReason == DLL_PROCESS_ATTACH)
    {
        CreateThread(0, 0, (LPTHREAD_START_ROUTINE)MessageLoop(hInstance), 0, 0, 0);
    }

    return 0;
}

@雷米勒博:

DWORD WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPSTR lpszReserved)
{
    if(dwReason == DLL_PROCESS_ATTACH)
    {
        CreateThread(0, 0, &MessageLoop, hInstance, 0, 0);
    }

    return 0;
}

【问题讨论】:

    标签: c++ winapi dll inject dll-injection


    【解决方案1】:

    您对CreateThread() 的呼叫是错误的。您没有将MessageLoop() 的地址传递给它,而是实际上是在调用MessageLoop()。试试这个:

    DWORD WINAPI MessageLoop(LPVOID lpParameter)
    {
        HINSTANCE hInstance = (HINSTANCE) lpParameter;
        ...
    }
    
    CreateThread(0, 0, &MessageLoop, hInstance, 0, 0);
    

    顺便说一句,CreateThread() 打电话给DllMain() 是不安全的。这在各种 MSDN 文档中都有明确说明。您必须将其移出 DllMain(),例如让 DLL 导出一个在内部调用 CreateThread() 的单独函数,然后在 DLL 加载到内存后让您的注入代码调用导出的函数。

    【讨论】:

    • 现在当我注入 dll 时进程崩溃。也许就像你说的那样,因为 CreateThread()。知道如何使它与其他功能一起使用吗?
    • 您是如何开始注入 DLL 的?您是否将CreateThread() 移出不属于它的DllMain()
    • 我应该为此使用 void 函数吗?还是什么?
    • 我编辑了原始帖子并添加了 dllmain 现在的外观。
    • MessageLoop(hInstance) 正在调用MessageLoop(),然后将返回值传递给CreateThread()。这就是应用程序冻结的原因 - 您的代码在加载 DLL 的线程的上下文中显示对话框并运行消息循环,而不是在您自己的工作线程的上下文中。这就是为什么您需要改用&MessageLoop, hInstance 的原因。您正在告诉CreateThread() 要调用什么函数以及要传递给它的参数。但是正如我所说,您需要完全从DllMain() 中删除CreateThread()。在那里使用它是不安全的。
    猜你喜欢
    • 1970-01-01
    • 2012-02-02
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    相关资源
    最近更新 更多