识别便携式可执行

时间:2013-03-11 12:49:16

标签: winapi visual-c++ exe policy

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

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

另一方面,验证便携式可执行签名对我来说是不够的,因为我不关心可执行文件是否签名。我只想识别想要执行的可执行文件,即使其名称已更改。

对于这种情况,你会提出什么建议?欢迎任何解决方案。

提前致谢

2 个答案:

答案 0 :(得分:0)

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

命名

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

<强>日期:

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

版本信息:

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

位置:

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

<强>尺寸:

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

<强>签名:

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

<强>哈希:

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


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

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

答案 1 :(得分:0)

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