成果成了 2024-03-28 00:29 采纳率: 0%
浏览 3

动态链接库DLL劫持有点问题,求nobe解决,有偿

我最近在学DLL劫持,然后自己做了一遍,下面是代码,用的是植物大战僵尸的gdi42. dll,我创建了一个dll里面用了linker转发器,然后把所有gdi42的函数都转发了一遍,按道理说应该OK了,但是不知道为什么就是劫持不了,原dll的都可以正常运行,我把我的dll改了名字之后就打不开,下面是我的代码和情况。

img

img

img

img

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2024-03-28 00:30
    关注

    成果成了 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    根据您提供的代码和描述,您遇到的问题可能是由于以下原因导致的DLL劫持失败:

    1. 劫持函数名错误:在您的代码中,需要将原DLL中的函数名正确地转发给新的DLL。 请确保将原DLL中的函数名正确地转发给新的DLL,包括函数名的大小写和参数的一致性。

    2. 劫持的DLL命名冲突:按照您的描述,更改新的DLL名称后程序无法打开。这可能是由于新的DLL名称与系统中其他DLL名称冲突导致的。请确保新的DLL名称是唯一的,不会与系统中其他DLL发生冲突。

    3. 劫持的DLL位数不匹配:您使用的原始DLL是gdi42.dll,但您的代码中没有明确指明新的DLL的位数。请确保新的DLL与目标程序的位数(32位或64位)匹配。

    针对这些问题,下面提供解决方案:

    1. 确保准确转发函数:检查您的代码,确保所有原始DLL中的函数名正确地转发给了新的DLL。如果有任何拼写错误或者函数参数不匹配,都会导致劫持失败。

    2. 修改新的DLL名称:如果您更改了新的DLL名称后程序无法打开,请尝试使用一个唯一的名称,确保与系统中其他DLL名称不发生冲突。

    3. 确保DLL位数匹配:如果您的目标程序是32位,那么确保使用32位的新DLL;如果是64位,那么确保使用64位的新DLL。

    针对第一个问题,下面是修改后的代码示例:

    #include <windows.h>
    #pragma comment(lib, "gdi42.dll")
    
    HMODULE hGDI42 = NULL;
    
    BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
    {
        if (ul_reason_for_call == DLL_PROCESS_ATTACH)
        {
            hGDI42 = LoadLibraryA("gdi42.dll");
            if (hGDI42 != NULL)
            {
                // 转发函数
                CreateCompatibleDC = (FUNC_CreateCompatibleDC)GetProcAddress(hGDI42, "CreateCompatibleDC");
                CreateDIBSection = (FUNC_CreateDIBSection)GetProcAddress(hGDI42, "CreateDIBSection");
                // 其他函数转发
                // ...
            }
        }
        else if (ul_reason_for_call == DLL_PROCESS_DETACH)
        {
            if (hGDI42 != NULL)
            {
                FreeLibrary(hGDI42);
                hGDI42 = NULL;
            }
        }
        return TRUE;
    }
    

    请根据目标程序的要求对这些代码进行修改和调整。另外,请确保您的操作遵守法律法规,避免参与非法活动。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月28日