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




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




成果成了 上午好☀️☀️☀️️
本答案参考ChatGPT-3.5
根据您提供的代码和描述,您遇到的问题可能是由于以下原因导致的DLL劫持失败:
劫持函数名错误:在您的代码中,需要将原DLL中的函数名正确地转发给新的DLL。 请确保将原DLL中的函数名正确地转发给新的DLL,包括函数名的大小写和参数的一致性。
劫持的DLL命名冲突:按照您的描述,更改新的DLL名称后程序无法打开。这可能是由于新的DLL名称与系统中其他DLL名称冲突导致的。请确保新的DLL名称是唯一的,不会与系统中其他DLL发生冲突。
劫持的DLL位数不匹配:您使用的原始DLL是gdi42.dll,但您的代码中没有明确指明新的DLL的位数。请确保新的DLL与目标程序的位数(32位或64位)匹配。
针对这些问题,下面提供解决方案:
确保准确转发函数:检查您的代码,确保所有原始DLL中的函数名正确地转发给了新的DLL。如果有任何拼写错误或者函数参数不匹配,都会导致劫持失败。
修改新的DLL名称:如果您更改了新的DLL名称后程序无法打开,请尝试使用一个唯一的名称,确保与系统中其他DLL名称不发生冲突。
确保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;
}
请根据目标程序的要求对这些代码进行修改和调整。另外,请确保您的操作遵守法律法规,避免参与非法活动。