识别便携式可执行文件

问题描述:

我想写一个程序,允许或阻止进程,同时根据策略打开文件。识别便携式可执行文件

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

另一方面,验证可移植可执行签名对我来说是不够的,因为我不关心可执行文件是否签名。我只是想识别即使名称改变也想执行的可执行文件。

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

在此先感谢

+3

使用[散列函数](http://en.wikipedia.org/wiki/SHA-2)来识别可执行文件。 – arx 2013-03-11 13:38:53

+0

@arx我曾经想过,但它需要所有可执行文件的最新版本。另外,我检查了ms office 2007(winword.exe)作为一个例子,在三台不同的计算机上,它们的长度是否相同。他们都是不同的。这使我认为相同应用程序的可执行文件可能在不同的计算机上有所不同,这取决于某些原因 – 2013-03-11 13:53:57

+1

将会有很多版本的winword.exe,具体取决于,例如,应用了哪些更新。但它在每台计算机上不应该不同。任何其他标识未签名exe的方式(例如版本资源中的名称)都很容易被欺骗。 – arx 2013-03-11 14:47:37

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

名称:

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

日期:

文件有一个访问,创建和修改日期,以及它们是由操作系统管理。他们不是万无一失的,或者甚至不准确。 此外,他们很容易改变。

版本信息:

因为我们正在谈论的可执行文件,那么大多数可执行文件已经连接到它的版本信息。例如,原始文件名,文件版本,产品版本,公司,说明等。如果您确定用户无法通过编辑可执行文件修改它们,则可以检查这些字段。它不要求您保留允许的文件的数据库。但是,它确实需要你有一些比较的东西,比如公司名称或产品名称。此外,如果某人制作了一个具有相同值 的可执行文件,他们可以运行而不是允许的文件并绕过您的保护。

地点:

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

尺寸:

如果文件中有一个特定的文件大小,您可以快速检查它的大小和进行比较。但它不可靠,因为文件可以更改/修补,而且大小没有任何变化。您也可以通过应用CRC校验来检测文件内容是否更改。 但是,大小和CRC都可以改变。此外,这需要你有一个文件名和它们的大小/ CRC的列表,并保持最新。

签名:

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

哈希:

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


最后,取决于你的需要和选择,可以将两个或更多的方式混合在一起,以得到你想要的结果。像,检查文件名称+位置等。

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

我会建议使用签名,如果它有一个,或否则哈希。 Office等经常更新的应用程序更有可能进行签名,而从互联网下载的较小应用程序不可能更新,因此应该有一致的哈希值。