2008-08-29 56 views
8

我想將配置文件綁定到我的可執行文件。我想通過在可執行文件中存儲文件的MD5散列來實現這一點。這應該讓除可執行文件以外的任何人修改文件。如何將信息存儲在我的可執行文件中.Net

本質上,如果有人在程序之外修改此文件,程序將無法再次加載它。

編輯:該程序處理信用卡信息,以便能夠以任何方式更改配置可能是潛在的安全風險。該軟件將分發給大量客戶。理想情況下,客戶端應該具有直接與可執行文件綁定的配置。這將有望使黑客無法獲得假冒配置。

該配置仍然需要編輯,儘管如此編譯每個客戶的個人副本不是一種選擇。


重要的是這是動態的。這樣我可以在配置更改時將散列綁定到配置文件。

回答

11

更好的解決方案是儲存MD5時,它編譯到您的應用...您的應用程序可以那麼就參考這個常量字符串在配置文件中。但是MD5並不僅僅是配置文件,還包括MD5中的一些祕密的「key」值,比如固定的guid。

write(MD5(SecretKey + ConfigFileText)); 

然後,您只需刪除該MD5並重新散列該文件(包括您的密鑰)。如果MD5是相同的,那麼沒有人修改它。這可以防止某人修改它並重新應用MD5,因爲他們不知道您的密鑰。

請記住,這是一個相當薄弱的解決方案(就像你建議的那樣),因爲他們可以輕鬆追蹤到你的程序中以找到密鑰或存儲MD5的位置。

更好的解決方案是使用公鑰系統並簽署配置文件。這又是一個弱點,因爲這需要將私鑰存儲在本地機器上。幾乎所有包含在本地PC上的東西都可以被足夠的努力繞過。

如果您真的想要將信息存儲在您的可執行文件中(我會勸阻),那麼您可以嘗試在EXE結尾附加它。這通常是安全的。修改可執行程序是病毒,如行爲,大多數操作系統安全性也會試圖阻止你。如果您的程序位於Program Files目錄中,並且您的配置文件位於Application Data目錄中,並且用戶以非管理員身份(在XP或Vista中)登錄,則您將無法更新EXE。

更新:如果您使用的非對稱加密我不在乎,RSA或量子密碼,如果你是存儲您在用戶的計算機上的按鍵(你必須做,除非你的路線這一切通過網絡服務),那麼用戶可以找到您的密鑰,即使這意味着在運行時檢查CPU上的寄存器!你只是爲自己購買一個適度的安全級別,所以堅持一些簡單的事情。爲了防止修改,我建議的解決方案是最好的。爲了防止讀取然後對其進行加密,並且如果您在本地存儲密鑰,則使用AES Rijndael。

更新: FixedGUID/SecretKey可以替代地在安裝時生成並存儲在註冊表中的某處「祕密」。或者,您可以在每次從硬件配置中使用它時生成它。然後你變得越來越複雜。如何做到這一點以允許適度的硬件更改將採取6個不同的簽名,並將您的配置文件散列6次 - 每次簽名一次。將每一個與第二個祕密值結合起來,如上面提到的GUID(全局或安裝時生成)。然後當你檢查你分別驗證每個散列。只要他們有6個(或者任何你的寬容),那麼你接受它。下一次你寫它時,你用新的硬件配置來散列它。這可以讓他們慢慢地換掉硬件,並獲得一個全新的系統。 。 。也許這是一個弱點。這一切都歸結於你的寬容。基於更嚴格的容差存在變化。

更新:對於信用卡系統,你可能想考慮一些真正的安全。您應該保留安全和加密顧問的服務。更多信息需要交換。他們需要分析您的具體需求和風險。另外,如果你想要.NET的安全性,你需要先從一個非常好的.NET混淆器(just Google it)開始。 .NET程序集是輕鬆拆卸和獲取源代碼並閱讀所有祕密的方式。不要聽起來像一個破碎的記錄,但依賴於用戶系統安全的任何事情從一開始就有根本的缺陷。

+0

就在一張小紙條上,即使用C++編寫,如果你發送/存儲祕密,你冒着被冒着冒險的危險(這是這裏的關鍵部分)。在這裏獲得適當安全的唯一可靠途徑就是永遠不要發送祕密。很可能您需要某種兩部分加密方式,從而使用用戶和您自己的私鑰。正如Jim所說,你需要一個適當的安全分析師和專業建議。 – Gregory 2009-12-30 04:32:19

-2

只是使持有MD5哈希一個常量字符串和驗證配置文件

1

出於純粹的好奇心,如果文件被更改,從來不想加載文件的理由是什麼?

爲什麼不只保留所有在可執行文件中編譯的配置信息?爲什麼要打擾外部文件呢?

編輯

我剛剛看了你的編輯這個是信用卡信息的程序。這構成了一個非常有趣的挑戰。

我認爲,爲了這種安全級別,某種非常重要的加密是必要的,但我不知道如何處理這類事情,以至於不能僅僅提取加密祕密來自可執行文件。

正在驗證某種在線源的可能性嗎?

1

我建議你使用不對稱密鑰加密來加密你的配置文件,無論它們存儲在可執行文件中,還是不可以。

如果我沒記錯的話,RSA就是其中的一個變種。

對於它的解釋,請參閱Public-key cryptography維基百科

存放在你的可執行文件的「閱讀」鍵,並保持自己的「寫作」的關鍵。所以沒有人可以修改配置。

這樣做的優點是:

  • 沒有人,除非他們有「寫」鍵可以修改配置,因爲任何修改將腐敗它完全,即使他們知道「讀書」鍵計算其他密鑰需要很長的時間。
  • 修改保證。
  • 這並不難 - 現在有很多庫可用。還有很多密鑰生成程序可以生成真正長的密鑰。

做一些研究,但如何正確地實施它們。

相關問題