2009-08-11 25 views
0

是否有程序知道它是否在編譯和構建後被修改? 我想阻止.exe在構建之後被修改。檢測修改後的.exe(內部版本)

+0

誰應該做檢測?可執行文件本身還是外部進程?如果是後者,則可以爲未更改的可執行文件提供MD5校驗和或類似內容。 – 2009-08-11 12:49:15

+0

MikeD,你能詳細說明你的意圖嗎?是爲了防止篡改或構建過程的一部分?你能相信任何能夠訪問構建過程的人嗎? – Adriaan 2009-08-11 13:11:39

回答

0

即使你知道..誰知道你過的人這樣的預防,將改變電腦的時間到您的構建時間不是修改此exe ..

所以它不能預防..

+1

因此也是安全的基石原則。你無法保證任何東西的安全,只能讓它獲得更高的價值。 – Chad 2009-08-11 12:53:32

+0

我的意思是它很容易破解,我認爲如果需要預防,這不是一個.. – ufukgun 2009-08-11 12:56:15

1

您可以使用私鑰簽名EXE和公鑰來檢查簽名。近20年來我一直沒有使用過EXE文件格式,但是我記得有些空間可以存儲這樣的簽名。當然,你正在檢查的那部分文件將不得不排除簽名本身。然而,如果你試圖做到這一點,以防止破解你的EXE,那麼你的運氣不好:破解者只會修補驗證簽名的代碼。

+0

微軟在http://msdn.microsoft.com/en-us/library/8s9b9yaz%上有一個代碼簽名工具。 28VS.80%29.aspx這可能有幫助。 – Adriaan 2009-08-11 13:12:23

0

程序是否有可能知道它自建成以來是否被修改過?

是的。程序其餘部分的校驗和可以存儲在獨立的資源字符串中。

程序是否可能知道它是否被構建後被惡意修改?

不可以。校驗和,甚至執行和比較它的函數都可以修改。

0

你在說什麼Tamper Aware and Self Healing Code

的製品演示檢測 硬件故障或未經授權 貼劑;修補可執行文件 以嵌入預期的散列值 .text部分;並演示 修復惡意代碼(例如, 未授權的二進制修補程序)的效果 的過程。文章中提出的 想法同樣很好地工作 是否可執行文件 已修補在磁盤或內存中。 但是,自我修復發生在 內存中。

0

最受歡迎的編譯器有一個開關來填充PE標頭的「Checksum」字段,或者,您可以將它留空並提供您自己的定製值。無論如何,這是存儲這些數據的「標準」地方。

不幸的是,沒有辦法阻止某個人篡改二進制文件,因爲您必須將檢查內部的exe文件檢測出來,然後才能修補它們。

解決此問題的一種方法是加密某些函數,並使用某些已知數據的校驗和作爲關鍵字(例如另一個函數的校驗和)。然後,當你離開該功能時,你會重新加密它。顯然,你需要拿出你自己的序言/尾聲代碼來處理這個問題。如果你的程序是多線程的,那麼這是不太合適的,但如果你是單線程的或者只是輕微的線程化(並且可以訪問函數並控制所有入口點),那麼如果你將。

這是大多數'包裝員'的一個步驟,它只是加密.text/.data /。rdata/etc部分,並在運行時將其解密。這些非常容易「轉儲」,因爲您只需運行程序,掛起其所有線程,然後將內存轉儲到文件。例如,這種攻擊對抗Themida(最具侵略性的包裝商之一)。從那裏你需要做的就是重建IAT,修復一些重定位等。

當然,攻擊者仍然可以使用調試器來轉儲未加密的代碼,從而「解壓」exe文件,但顯然沒有什麼是萬無一失的。