c++ - 注入(inject)后未执行 DLLMain()

标签 c++ windows dll-injection dllmain

我用 C++ 编写了一个 dll 和注入(inject)器。 dll代码如下:

#include <cstdio>
#include <stdio.h>
#include <windows.h>
#include <string>
#include <fstream>
#include <winsock.h>
using namespace std;
#pragma comment(lib, "wsock32.lib")

extern "C" __declspec(dllexport) void UploadFile()
{
.....
}

INT APIENTRY DLLMain(HMODULE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
    switch(fdwReason)
    {
    case DLL_PROCESS_ATTACH:
        MessageBox(0,"Process Attach","Info",MB_OK);
        UploadFile();
        break;
    case DLL_THREAD_ATTACH:
        MessageBox(0,"Thread Attach","Info",MB_OK);
        UploadFile();
        break;
    case DLL_PROCESS_DETACH:
        break;
    case DLL_THREAD_DETACH:
        break;
    default:
        break;
    }
    return TRUE;
}

dll 将特定文件上传到服务器。我成功地能够使用 LoadLibrary() 和 CreateRemoteThread() 将 dll 注入(inject)“notepad.exe”,但它没有被执行。甚至没有 dllmain() 函数。不知道出了什么问题。

最佳答案

作为Dirk已经说过,DLL 入口点被命名为 DllMain(),而不是 DLLMain()DllMain() 的签名是:

BOOL WINAPI DllMain(
    HINSTANCE hinstDLL,
    DWORD fdwReason,
    LPVOID lpvReserved
);

来自 Best Practices for Creating DLLs , 你永远不应该从 DllMain() 中执行以下任务:

...Call functions in User32.dll or Gdi32.dll. Some functions load another DLL, which may not be initialized...

MessageBox()User32.dll 中实现,因此这可能是 DllMain() 似乎未被调用的可能原因。

使用 DllMain() 执行任何耗时的任务是不明智的,因为它会阻止应用程序加载任何其他需要的 DLL,因为在 DllMain( )。相反,生成一个线程来执行任何耗时的任务。链接文档建议不要使用 CreateThread(),但前提是涉及同步。

关于c++ - 注入(inject)后未执行 DLLMain(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16646487/

相关文章:

c++ - 使用 CreateRemoteThread API 时如何修复 "LPVOID: unknown size"错误?

c++ - 我无法使用 cmake 链接静态库

c++ - 用 C++ 读取文本文件最优雅的方法是什么?

python - 如何在 Windows 上安装 Python 版 pango?

c - 使用 Windows MiniFilter 驱动程序拦截进程访问

c++ - 从通过 CreateRemoteThread 创建的线程调用函数

asp.net - 每个 AuthzInitializeContextFromSid 错误 110 表示什么? "While trying to retrieve the authorization groups, an error (110) occurred."

c++ - 键入 Alt 键时可能会在 char 中解决 "Invalid Octal Digit"

c++ - 有没有一种方法可以忽略 Qt C++ 中的文件名大小写敏感度?

c++ - 如何拦截64位进程中的API方法调用?