2012-12-08 70 views
0

我有一個運行時加載的共享庫mylib.so。我需要確保它加載在正確的mylib.so/mylib.dll中。是否有確保正確共享庫加載的跨平臺(Win/Mac/Linux)方法。確保.DLL/.so的安全性

我正在考慮對.dll執行校驗和,但我不確定如何檢索在運行時加載的實際.dll文件。 (這是所有在C++)

+0

如果您沒有可信任的硬件,您的軟件解決方案將成爲安全展示。如果這是一個銀行或更安全的類型的應用程序,國家安全局的標準可能是適當的。如果你正在嘗試諸如版權保護之類的東西,它只會在沒人關心的情況下工作。 – Yakk

+0

我猜你可以使用['LoadLibraryEx(...,LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE)'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms684179 \(v = vs.85 \ ).aspx)並在加載DLL之前進行某種驗證,但我懷疑它實際上是受益者(儘管您可能會意外加載錯誤的版本)。 – user786653

+0

另一種選擇是使用靜態庫。然後所有的代碼都在你的EXE文件中,問題就消失了。 –

回答

0

對於Windows唯一的解決辦法,看看

HMODULE h = GetModuleHandle("mylib"); 
char name[ 300 ]; 
DWORD rc = GetModuleFileName(h, name, sizeof(name)); 

我不是說這有助於或阻礙實際的安全性。

+0

這隻有在「mylib」加載到進程中時纔會起作用,此時任何安全的希望都爲時已晚(如果有的話)。 – user786653

+0

是的 - 我還沒有找到一個可行的解決方案。 – proteneer