C# 如何区分DLL文件

C# 如何区分DLL文件,c#,visual-studio-2010,dll,dll-injection,C#,Visual Studio 2010,Dll,Dll Injection,我有一个程序,可以将每个模块加载到一个进程中,并将它们与一个禁止的DLL文件数据库进行比较,这个数据库工作得很好,但它太简单,无法绕过(只需更改要注入进程的DLL文件的名称)。所以我在问如何区分DLL文件。是否有可以在C#中使用的唯一标识符?谢谢 编辑:我忘了提到我正在创建的程序检查了我没有用C++编写的另一个程序的DLL文件。 < p>你可以遍历一个进程中加载的每个模块,看看是否有一个正确的文件,比如文件名被改变时,它不会改变。这是一种不错的处理方法,但也许可以尝试对DLL文件进行散列,并对照

我有一个程序,可以将每个模块加载到一个进程中,并将它们与一个禁止的DLL文件数据库进行比较,这个数据库工作得很好,但它太简单,无法绕过(只需更改要注入进程的DLL文件的名称)。所以我在问如何区分DLL文件。是否有可以在C#中使用的唯一标识符?谢谢


<>编辑:我忘了提到我正在创建的程序检查了我没有用C++编写的另一个程序的DLL文件。

< p>你可以遍历一个进程中加载的每个模块,看看是否有一个正确的文件,比如文件名被改变时,它不会改变。这是一种不错的处理方法,但也许可以尝试对DLL文件进行散列,并对照已知的受信任的文件散列进行检查?这将要求您已经拥有一个受信任的dll哈希列表,但应防止简单地重命名以绕过当前的安全措施。

当对禁止的文件进行签名时,很容易做到这一点。但他们可能不是。您应该详细说明实际情况。@HenkHolterman抱歉,不,它们没有签名。然后您必须为被禁止的DLL提供更好的定义/签名。这里不太可能有人能想出什么主意。你可以使用LoadForReflection并检查某些类别。但是,关于定义的问题并不清楚。@sevzas我忘了提到我正在检查其他应用程序上的dll文件,这些文件不是我创建的,因此如果我是对的,我就无法访问“ModuleVersionId”。我搜索了更多,找到了“ModuleMorysize”。我知道这并不是独一无二的,但尺寸符合要求的可能性很低。你怎么看?你的checker程序检查了其他.net进程中的模块?然后你使用的是ProcessModule类,它提供的功能不多。有一件事我注意到了:您维护了一个禁止DLL的列表,但所有的评论都暗示了一个允许DLL的列表。@如果我误导了您,sevzas很抱歉。我从进程中获取所有模块,并检查是否存在任何禁止的DLL(我不希望将DLL注入进程)。