1

我想编写一个程序,根据策略在打开文件时允许或阻止进程。

我可以通过检查程序的名称来进行控制。但是,这还不够,因为用户可以更改名称以通过策略。即假设策略不允许a.exe 访问txt 文件,而b.exe 是允许的。如果用户用 b.exe 更改 a.exe,我无法阻止它。

另一方面,验证可移植可执行签名对我来说还不够,因为我不在乎可执行文件是否签名。我只想识别要执行的可执行文件,即使其名称已更改。

对于这种情况,您有什么建议?欢迎任何解决方案。

提前致谢

4

2 回答 2

0

我会建议使用签名,如果它有一个,否则使用哈希。频繁更新的应用程序(例如 Office)更有可能被签名,而从 Internet 下载的较小应用程序不太可能永远更新,因此应该具有一致的哈希值。

于 2013-03-19T21:56:48.950 回答
0

有很多方法可以识别可执行文件。这是一个简单的列表:

姓名:

最简单直接的方法是通过文件名来识别文件。但这是最容易改变的事情之一,你已经排除了这一点。

日期:

文件具有访问、创建和修改日期,并由操作系统管理。它们并非万无一失,甚至可能不准确。而且,它们很容易改变。

版本信息:

由于我们谈论的是可执行文件,因此大多数可执行文件都附有版本信息。例如,原始文件名、文件版本、产品版本、公司、描述等。如果您确定用户无法通过编辑可执行文件来修改它们,则可以检查这些字段。它不需要您保留允许文件的数据库。但是,它确实需要您有一些可以比较的东西,例如公司名称或产品名称。此外,如果有人制作了具有相同值的可执行文件,他们可以运行而不是允许运行的可执行文件并绕过您的保护。

地点:

如果文件位于特定位置并受文件系统访问权限保护,并且无法更改,则可以使用该文件。例如,您可以将允许的文件放在用户(没有管理员权限)只能读取/执行它们,但不能重命名/移动的文件夹中。然后识别文件及其位置。如果它从这个位置运行,则允许它,否则阻止它。这很好,因为它不需要允许/阻止文件的数据库,它只是比较位置,它是有效的,然后允许,并且您可以继续在允许的位置添加和删除文件而不会影响您的程序。

尺寸:

如果文件具有特定的文件大小,您可以快速检查其大小并进行比较。但它是不可靠的,因为文件可以更改/修补并且大小没有任何变化。您可以通过应用 CRC 检查来检测文件内容是否更改来避免这种情况。但是,大小和 CRC 都可以更改。此外,这要求您拥有文件名及其大小/CRC 的列表,并保持最新状态。

签名:

Deanna 提到您可以对可执行文件进行自签名。然后检查签名是否与您的签名匹配并基于此允许/拒绝。如果您可以签署您想要允许的所有可执行文件,这似乎是一个好方法。它不需要您保留允许文件的更新列表。

哈希:

arx 还指出,您可以对文件进行哈希处理。它是最慢的方法之一,因为它需要在每次执行文件时对文件进行哈希处理,然后与文件列表进行比较。但它非常可靠,因为它可以唯一识别每个文件并且很难破解。但是,您需要保持每个文件哈希的最新数据库。


最后,根据您的需求和选择,您可以将两种或多种方式混合在一起以获得您想要的结果。比如,检查文件名+位置等。

我希望我涵盖了大部分内容,但我相信还有更多方法。任何人都可以自由编辑我的帖子以包含我错过的任何内容。

于 2013-03-14T08:56:33.513 回答