2011-07-03 36 views
0

我有一個可以運行基本代碼的小型腳本引擎。我希望如果用戶保護代碼,那麼除了我的程序,任何人都不能打開代碼。防篡改VB.NET中的文件

現在我找到了一個鏈接:http://www.codeproject.com/KB/aspnet/TamperProofQueryString.aspx它使用Base64編碼加密代碼。它使用密鑰來加密和解密。

我想知道如何將密鑰存儲在我的應用程序中,以便其他人不必知道。我混淆了我的程序,所以字符串等不易讀取。這有幫助。除了在EXE文件本身中使用變量並存儲密鑰之外。我還有哪些其他安全選項?

我的邏輯是使用上面的方法進行加密和解密的安全嗎?我想要足夠的安全性,也許不是很棒的。

再加上上面的代碼的好處是它不需要創建一個臨時文件來解密它,使用戶無法搜索臨時文件等等。

如果有人能提供寶貴的建議,我會很高興。

+1

用戶是否有權訪問該程序或被訪問通過網絡服務? 在第一種情況下,您無法做出完美的安全措施,因爲如果程序包含解密某些內容的所有信息,那麼用戶也可以訪問它。在第二種情況下,您可以使用公鑰加密來使其99%安全。 – Compuholic

+0

雖然我的程序可以訪問我的服務器,但安全性在這裏非常重要。我將從我的節目標題或其他內容中獲取關鍵字的文本。 – Greatchap

回答

2

一遍又一遍地問這個問題。簡而言之,如果您的應用程序可以訪問密鑰,您可以更難地訪問密鑰,但不是不可能的(至少在通用硬件和軟件上)。即使在遊戲控制檯等封閉和鎖定的系統上,私鑰也遲早會從硬件中提取出來。

簡而言之:您想爲用戶提供某種軟件保護以用於僞代碼。這是本地代碼尚未可靠解決的任務,對於解釋代碼,此任務可能更加複雜。

密鑰的好混淆會驅散大多數不是非常熟練的攻擊者。混淆密鑰的最簡單方法是使用程序的一些文本短語作爲密鑰。這使得對於偶爾潛伏者來說密鑰操作不那麼明顯(專業人員知道在應用程序中找到加密密鑰的不同方式)。

另一個問題是用戶的代碼必須解密才能被引擎執行,對吧?而在這個時候,一個普通技術嫺熟的黑客可以捕獲內存並從內存中挑選腳本。

+0

感謝您的投入Eugene。你能解釋一下:「混淆密鑰最簡單的方法就是使用程序的一些文本短語作爲關鍵。」如果我做私鑰=「xyzabc」。並混淆我的應用程序,會沒事。加我的算法加密罰款。 – Greatchap

+0

@Greatchap如果您使用對稱加密算法,請在您的應用程序中使用一些文本常量(例如某些錯誤消息或應用程序標題)並從中派生您的密鑰(請參閱http://stackoverflow.com/questions/6482883/how-to -generate-rijndael-key-and-iv-using-a-passphrase),然後使用已知的加密算法。你引用的代碼是你的場景中的一個可能選項,是的。 –

+0

非常感謝尤金。我將從我的程序的某個部分獲取密鑰的文本。 – Greatchap