如何隐藏DLL中,导出函数的名称?(转)
一、引言
很多时候,我们写了一个Dll,不希望别人通过DLL查看工具,看到我们的导出函数名称。可以通过以下步骤实现:
1. 在def函数中做如下定义:
LIBRARY EXPORTS HideFuncName @1 NONAME
通过添加NONAME关键字,隐藏函数名,这样的话,用Dependency Walker来查看该Dll,只能看到如下结果:
2. 如何调用该Dll中的函数,通过ID的方式调用,代码如下:
1 typedef void (WINAPI *FPHideFuncName)(); 2 DWORD dwErrCode = 0; 3 wstring str = CProcHelper::GetCurrentProcessPath(); 4 str += L"\\Tool\\resconfig.dll"; 5 HMODULE hModule = LoadLibrary(str.c_str()); 6 if (NULL != hModule) 7 { 8 FPHideFuncName fp = (FPHideFuncName)GetProcAddress(hModule, (char*)1); // 通过ID获取函数地址 9 //FPHideFuncName fp = (FPHideFuncName)GetProcAddress(hModule, "HideFuncName"); 10 if (NULL != fp) 11 { 12 fp(); 13 } 14 dwErrCode = GetLastError(); 15 }
二、小结:
1. 只适合于内部使用的DLL;
2. 通过函数名导出,还能减小DLL的大小;
时间: 2024-10-05 15:57:21