簡體   English   中英

如何在.Net中的可執行文件中存儲信息

[英]How do I store information in my executable in .Net

我想將配置文件綁定到我的可執行文件。 我想通過在可執行文件中存儲文件的MD5哈希來做到這一點。 除了可執行文件之外,任何人都應該修改文件。

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

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

配置仍然需要是可編輯的,因此不能為每個客戶編譯單個副本。


重要的是這是動態的。 這樣我就可以在配置發生變化時將哈希綁定到配置文件中。

更好的解決方案是將MD5存儲在配置文件中。 但是MD5不僅僅是配置文件中的MD5,而是在MD5中包含一些秘密的“鍵”值,如固定的guid。

write(MD5(SecretKey + ConfigFileText));

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

請記住,這是一個相當弱的解決方案(正如您所建議的那樣),因為他們可以輕松跟蹤您的程序以找到密鑰或MD5的存儲位置。

更好的解決方案是使用公鑰系統並簽署配置文件。 再次這是弱的,因為這將需要私鑰存儲在他們的本地機器上。 幾乎任何包含在本地PC上的東西都可以通過足夠的努力來繞過。

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

更新:如果您使用非對稱加密,RSA或Quantum加密,我不在乎您是否將密鑰存儲在用戶的計算機上(除非您通過Web服務將其全部路由,否則必須執行此操作),然后用戶可以找到您的鍵,即使它意味着在運行時檢查CPU上的寄存器! 你只是給自己買一個中等程度的安全性,所以堅持使用簡單的東西。 為了防止修改我建議的解決方案是最好的。 要防止讀取然后加密,如果您在本地存儲密鑰,請使用AES Rijndael。

更新:也可以在安裝時生成FixedGUID / SecretKey,並將其存儲在注冊表中的“秘密”位置。 或者,您可以在每次從硬件配置中使用它時生成它。 然后你變得越來越復雜了。 如何執行此操作以允許適度級別的硬件更改將采用6種不同的簽名,並對配置文件進行6次哈希處理 - 每次一次。 將每個值與第二個秘密值組合在一起,如上面提到的GUID(全局或安裝時生成)。 然后,當您檢查時,分別驗證每個哈希。 只要他們有6個中的3個(或任何你的容忍度),那么你接受它。 下次編寫時,使用新硬件配置對其進行哈希處理。 這允許他們隨着時間的推移慢慢更換硬件並獲得一個全新的系統。 也許這是一個弱點。 這一切都歸結為你的寬容。 基於更嚴格的公差存在變化。

更新:對於信用卡系統,您可能需要考慮一些真正的安全性。 您應該保留安全和加密顧問的服務 需要交換更多信息。 他們需要分析您的具體需求和風險。

此外,如果您希望使用.NET安全性,則需要首先使用非常好的.NET混淆器( 僅限Google )。 .NET程序集是一種易於反匯編和獲取源代碼並閱讀所有秘密的方法。 聽起來不像是破紀錄,但任何依賴於用戶系統安全性的東西從一開始就存在根本性的缺陷。

出於純粹的好奇心,如果文件被更改,你永遠不想加載文件的理由是什么?

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

編輯

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

我認為,對於這種安全級別,某些非常重要的加密是必要的,但我不知道處理那種事情的方式,加密機密不能只從可執行文件中提取。

是否可以通過某種在線來源進行身份驗證?

我建議您使用Assymmetric Key Encryption來加密您的配置文件,無論它們存儲在何處,都在可執行文件內。

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

有關它的說明,請參閱Wikipedia上的公鑰加密

將“讀取”鍵存儲在可執行文件中,並為自己保留“寫入”鍵。 所以沒有人可以修改配置。

這具有以下優點:

  • 沒有人可以修改配置,除非他們有“寫”鍵,因為任何修改都會完全破壞它,即使他們知道“讀取”鍵,計算另一個鍵需要很長時間。
  • 修改保證。
  • 這並不難 - 現在有很多圖書館可供使用。 還有很多密鑰生成程序可以生成真正非常長的密鑰。

盡管如此,還是要對如何正確實施它們進行一些研究。

只需創建一個包含md5哈希的const字符串並將其編譯到您的應用程序中...您的應用程序可以在驗證配置文件時引用此const字符串

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM