2013-03-11 100 views
1

我想寫一個程序,允許或阻止進程,同時根據策略打開文件。識別便攜式可執行文件

我可以通過檢查程序的名稱來進行控制。但是,這是不夠的,因爲用戶可以更改名稱來通過策略。即讓我們說策略不允許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

回答

0

有很多方法來識別可執行文件。下面是一個簡單的列表:

名稱:

最簡單,最直接的方法是通過名稱來識別文件。但它是最容易改變的事情之一,你已經排除了。

日期:

文件有一個訪問,創建和修改日期,以及它們是由操作系統管理。他們不是萬無一失的,或者甚至不準確。 此外,他們很容易改變。

版本信息:

因爲我們正在談論的可執行文件,那麼大多數可執行文件已經連接到它的版本信息。例如,原始文件名,文件版本,產品版本,公司,說明等。如果您確定用戶無法通過編輯可執行文件修改它們,則可以檢查這些字段。它不要求您保留允許的文件的數據庫。但是,它確實需要你有一些比較的東西,比如公司名稱或產品名稱。此外,如果某人制作了一個具有相同值 的可執行文件,他們可以運行而不是允許的文件並繞過您的保護。

地點:

如果該文件位於一個特定的地方,並通過文件系統訪問權限保護,它不能改變,那麼你可以使用它。例如,您可以將允許的文件放在用戶(無管理員權限)只能讀取/執行它們的文件夾中,但不能重命名/移動。然後用它的位置標識文件。如果它從這個位置運行,那麼允許它,否則阻止它。這是好的,因爲它不需要允許/阻止文件的數據庫,它只是比較位置,它是一個有效的,然後允許,並且您可以繼續添加和移除文件到允許位置 而不影響您的程序。

尺寸:

如果文件中有一個特定的文件大小,您可以快速檢查它的大小和進行比較。但它不可靠,因爲文件可以更改/修補,而且大小沒有任何變化。您也可以通過應用CRC校驗來檢測文件內容是否更改。 但是,大小和CRC都可以改變。此外,這需要你有一個文件名和它們的大小/ CRC的列表,並保持最新。

簽名:

迪安娜提到,你可以自簽署您的可執行文件。然後檢查簽名是否符合你的要求,並根據該要求進行允許/拒絕。這似乎是一個好方法,如果 你可以簽署所有你想允許的可執行文件。它不要求您保留允許的文件的更新列表。

哈希:

ARX還指出,你可以哈希文件。它是最慢的方法之一,因爲它要求文件在每次執行時被散列,然後與文件列表進行比較。但它非常可靠,因爲它可以唯一標識每個文件並且很難破解。但是,您需要保留每個文件散列的最新數據庫。


最後,取決於你的需要和選擇,可以將兩個或更多的方式混合在一起,以得到你想要的結果。像,檢查文件名稱+位置等。

我希望我涵蓋了大部分的事情,但我相信有更多的方法。任何人都可以自由編輯我的帖子,以包含我錯過的任何內容。

0

我會建議使用簽名,如果它有一個,或否則哈希。 Office等經常更新的應用程序更有可能進行簽名,而從互聯網下載的較小應用程序不可能更新,因此應該有一致的哈希值。