2011-10-26 125 views
7

我在客戶端程序中內置了一些安全性,該程序從網上下載DLL並調用該DLL內的函數。該DLL是強命名的,並且DLL中的函數使用Assembly.GetCallingAssembly()來確定調用程序集,以便我可以準確地找到調用它的程序的路徑。從那裏我們對組件進行散列檢查,並驗證它是否正確。確定真正的調用程序集的方法

我們有一些人已經以完全信任模式獲得了自己的附件,並且能夠在調用GetCallingAssembly調用時指向真正的可執行文件,同時它們運行修改後的版本。有什麼其他的GetCallingAssembly,我可以用來獲得真正的來電者?一些調用堆棧或可能提供真正可執行文件的東西,因爲GetCallingAssembly似乎很容易被欺騙。

+0

嘗試'GetEntryAssembly'方法來代替 – hazzik

+0

請注意,如果您允許完全信任,他們也可以修補GetEntryAssembly。如果您允許完全信任,他們還可以修補您下載的DLL並禁用哈希檢查。 –

回答

0

我不知道它是多麼的安全,但我用這個在過去獲得的啓動路徑:

string startup_path = 
    Path.GetDirectoryName(typeof(SomeClassInDll).Assembly.Location); 
+0

我認爲這個人正在使用某種改變CallingAssembly的工具,如果他們禁用我們檢測到的哈希,它會用從dll內部生成的哈希將哈希函數發送回服務器,dll會更改某些密鑰在其中將會改變響應,它將該密鑰散列,加上程序集的散列以確定它是否被修改,並且它們正在使用正確的散列程序集。我試圖找到一些方法,我可以看看這可能有點難以欺騙。像調用堆棧可能? – willthiswork89

相關問題