【问题标题】:Prevent DLL from being injected twice防止DLL被二次注入
【发布时间】:2023-01-16 03:01:58
【问题描述】:

我用 C++ 制作了一个 DLL,它被注入到另一个程序中。 当多次注入程序崩溃时,所以我希望 DLL 首先检查它是否已经被注入,如果是,它将执行一些代码,比如显示消息框或只是退出

【问题讨论】:

  • 查看您在 dll 附加代码中所做的事情。除非你即时生成 dll 的模块名称,否则只会加载一个实际图像。

标签: c++ dll


【解决方案1】:

这可以使用 EnumProcessModules 来完成

    BOOL isInjected() {
        const char ProcessName = "Process.exe"; 
        std::string DllName = "MyDll.dll"; 


        DWORD dwProcessId = NULL;
        HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        if (hSnapshot == INVALID_HANDLE_VALUE)
            return false;

        PROCESSENTRY32 pe{};
        pe.dwSize = sizeof(PROCESSENTRY32);
        if (Process32First(hSnapshot, &pe))
        {
            do
            {
                if (_tcsicmp(pe.szExeFile, _T(ProcessName)) == 0)
                {
                    dwProcessId = pe.th32ProcessID;
                    break;
                }
            } while (Process32Next(hSnapshot, &pe));
        }

        CloseHandle(hSnapshot);

        HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcessId);
        if (hProcess == NULL)
        {
            return false;
        }

        HMODULE hMods[1024];
        DWORD cbNeeded;
        if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
        {
            int amount = 0;
            for (unsigned int i = 0; i < (cbNeeded / sizeof(HMODULE)); i++)
            {
                TCHAR szModName[MAX_PATH];
                if (GetModuleFileNameEx(hProcess, hMods[i], szModName, sizeof(szModName) / sizeof(TCHAR)))
                {
                    std::string str1 = szModName;

                    if (str1.find(DllName) != std::string::npos) amount++;
                }
            }
            if (amount >= 2) return true;
        }

        return false;
    }

【讨论】:

    猜你喜欢
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多