如何隐藏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的大小;

原文地址:https://www.cnblogs.com/nchxmoon/p/4458568.html