码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-04-27 00:11:40      阅读:396      评论:0      收藏:0      [点我收藏+]

标签:

一、引言

很多时候,我们写了一个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的大小;

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

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!