2015-01-11 46 views
-2

我有一個程序可以將每個模塊加載到一個進程中,並將它們與一個禁止DLL文件的數據庫進行比較,這很好,但它太簡單了,無法繞過(只需更改dll文件的名稱你想要注入的過程)。所以我問如何區分DLL文件。有沒有可以在C#中使用的唯一標識符?謝謝。如何區分DLL文件

編輯:我忘了提及我創建的程序檢查另一個程序的dll文件不是由我用C++編寫的。

+0

有很好的[可以...](http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha256%28v=vs.110%29.aspx) –

+0

當被禁止的文件被簽名,非常容易。但他們可能不是。你應該詳細說明實際情況。 –

+0

@HenkHolterman對不起,他們沒有簽名。 –

回答

0

您可以遍歷在進程How do I list all loaded assemblies?中加載的每個模塊,並查看每個module(如ModuleVersionId)在文件名更改時不會更改的正確值?

+0

你可以使用LoadForReflection並檢查某些分類。但是這個問題並不清楚這些定義。 –

+0

@sevzas我忘了提及我正在檢查其他應用程序上沒有創建的dll文件,所以如果我是對的,我無法訪問「ModuleVersionId」。我搜索了一下,發現「ModuleMemorySize」。我知道這並不是獨一無二的,但尺寸會達到的機率非常低。你怎麼看? –

+0

因此您的檢查程序檢查* other * .net進程中的模塊? – sevzas

0

我不確定這是否是遠程處理它的一種體面的方式,但也許嘗試散列DLL文件並檢查文件的已知可信哈希值?這將要求你已經有一個可信的DLL哈希列表,但應該防止簡單的重命名繞過你當前的安全措施。