如何隐藏DLL中,导出函数的名称?

一、引言

很多时候,我们写了一个Dll,不希望别人通过DLL查看工具,看到我们的导出函数名称。可以通过以下步骤实现:

1. 在def函数中做如下定义:

LIBRARY
EXPORTS
HideFuncName @ NONAME

通过添加NONAME关键字,隐藏函数名,这样的话,用Dependency Walker来查看该Dll,只能看到如下结果:

如何隐藏DLL中,导出函数的名称?

2. 如何调用该Dll中的函数,通过ID的方式调用,代码如下:

 typedef void (WINAPI *FPHideFuncName)();
DWORD dwErrCode = ;
wstring str = CProcHelper::GetCurrentProcessPath();
str += L"\\Tool\\resconfig.dll";
HMODULE hModule = LoadLibrary(str.c_str());
if (NULL != hModule)
{
FPHideFuncName fp = (FPHideFuncName)GetProcAddress(hModule, (char*)1);  // 通过ID获取函数地址
//FPHideFuncName fp = (FPHideFuncName)GetProcAddress(hModule, "HideFuncName");
if (NULL != fp)
{
fp();
}
dwErrCode = GetLastError();
}

二、小结:

1. 只适合于内部使用的DLL;

2. 通过函数名导出,还能减小DLL的大小;

上一篇:CSS层


下一篇:SP3精密星历简介