是否有程序知道它是否在編譯和構建後被修改? 我想阻止.exe在構建之後被修改。檢測修改後的.exe(內部版本)
回答
您可以使用私鑰簽名EXE和公鑰來檢查簽名。近20年來我一直沒有使用過EXE文件格式,但是我記得有些空間可以存儲這樣的簽名。當然,你正在檢查的那部分文件將不得不排除簽名本身。然而,如果你試圖做到這一點,以防止破解你的EXE,那麼你的運氣不好:破解者只會修補驗證簽名的代碼。
微軟在http://msdn.microsoft.com/en-us/library/8s9b9yaz%上有一個代碼簽名工具。 28VS.80%29.aspx這可能有幫助。 – Adriaan 2009-08-11 13:12:23
程序是否有可能知道它自建成以來是否被修改過?
是的。程序其餘部分的校驗和可以存儲在獨立的資源字符串中。
程序是否可能知道它是否被構建後被惡意修改?
不可以。校驗和,甚至執行和比較它的函數都可以修改。
你在說什麼Tamper Aware and Self Healing Code?
的製品演示檢測 硬件故障或未經授權 貼劑;修補可執行文件 以嵌入預期的散列值 .text部分;並演示 修復惡意代碼(例如, 未授權的二進制修補程序)的效果 的過程。文章中提出的 想法同樣很好地工作 是否可執行文件 已修補在磁盤或內存中。 但是,自我修復發生在 內存中。
最受歡迎的編譯器有一個開關來填充PE標頭的「Checksum」字段,或者,您可以將它留空並提供您自己的定製值。無論如何,這是存儲這些數據的「標準」地方。
不幸的是,沒有辦法阻止某個人篡改二進制文件,因爲您必須將檢查內部的exe文件檢測出來,然後才能修補它們。
解決此問題的一種方法是加密某些函數,並使用某些已知數據的校驗和作爲關鍵字(例如另一個函數的校驗和)。然後,當你離開該功能時,你會重新加密它。顯然,你需要拿出你自己的序言/尾聲代碼來處理這個問題。如果你的程序是多線程的,那麼這是不太合適的,但如果你是單線程的或者只是輕微的線程化(並且可以訪問函數並控制所有入口點),那麼如果你將。
這是大多數'包裝員'的一個步驟,它只是加密.text/.data /。rdata/etc部分,並在運行時將其解密。這些非常容易「轉儲」,因爲您只需運行程序,掛起其所有線程,然後將內存轉儲到文件。例如,這種攻擊對抗Themida(最具侵略性的包裝商之一)。從那裏你需要做的就是重建IAT,修復一些重定位等。
當然,攻擊者仍然可以使用調試器來轉儲未加密的代碼,從而「解壓」exe文件,但顯然沒有什麼是萬無一失的。
- 1. 我可以修改exe文件的內部版本
- 2. 檢測VSPackage內部的Visual Studio版本
- 3. C++版本,他們會自動檢測exe的版本嗎?
- 4. 檢測OpenJDK的修補版本
- 5. 在版本庫中修改版本而無需修改版本
- 6. 是否可以修改Travis-CI上的失敗內部版本
- 7. 如何檢測設備的iOS版本的內部版本號(例如13A452)
- 8. 舊版本版本檢測
- 9. 檢測UIView修改
- 10. Emacs - 攔截文件,然後用外部程序打開並修改它,然後打開修改後的版本
- 11. 如何檢測vcredist_x86.exe的特定版本是否已安裝?
- 12. 使用jscript檢測exe的版本和公司名稱
- 13. 檢測文件的修改
- 14. 批處理文件: - 檢測Windows版本和運行exe文件
- 15. 檢測PowerPoint版本
- 16. 檢測iOS版本
- 17. 將Octopack nuget版本號更改爲teamcity的內部版本號
- 18. 我們如何檢測訪問服務器的代碼的修改版本?
- 19. 新版本的Xcode內部版本號
- 20. Redmine修改版本號
- 21. 檢測的iOS 7.1版本
- 22. 檢測JavaScript的版本
- 23. 檢測Twitter的iOS版本?
- 24. 檢測的文件版本
- 25. 檢測內部ngIf
- 26. playerglobal.swc內部版本
- 27. 「cordova build ios」後版本和內部版本重置
- 28. 修改的InstallShield X(10.5版)的exe文件清單
- 29. 從Windows內部修改SMBIOS
- 30. Xcode的內部版本號
誰應該做檢測?可執行文件本身還是外部進程?如果是後者,則可以爲未更改的可執行文件提供MD5校驗和或類似內容。 – 2009-08-11 12:49:15
MikeD,你能詳細說明你的意圖嗎?是爲了防止篡改或構建過程的一部分?你能相信任何能夠訪問構建過程的人嗎? – Adriaan 2009-08-11 13:11:39