如何隱藏DLL中,導出函數的名稱?

1、引言ide

不少時候,咱們寫了一個Dll,不但願別人經過DLL查看工具,看到咱們的導出函數名稱。能夠經過如下步驟實現:函數

1. 在def函數中作以下定義:工具

LIBRARY
EXPORTS
HideFuncName @1 NONAME

經過添加NONAME關鍵字,隱藏函數名,這樣的話,用Dependency Walker來查看該Dll,只能看到以下結果:spa

 

2. 如何調用該Dll中的函數,經過ID的方式調用,代碼以下:code

 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     }

 

2、小結:blog

1. 只適合於內部使用的DLL;string

2. 經過函數名導出,還能減少DLL的大小;ast

相關文章
相關標籤/搜索