摘 要:介紹了.NET環境下的一種軟件保護方法——混淆:通過對MSIL代碼進行字符串加密、名稱混淆、流程混淆等技術,以加大反編譯的難度,從而達到對.NET產品的保護;列舉了目前常用的混淆工具,并分析了它們的優劣。
關鍵詞:軟件保護;.NET;MSIL;混淆;加密
0 引言
作為一種編程平臺,Microsoft.NET比微軟公司先前推出的其他技術平臺更為復雜。.NET提供了對多種編程語言以及(在理論上說)多重平臺的支持,在傳統的兩個代碼層之間添加一個中間代碼層。這里,傳統的兩層分別是源代碼層和編譯后的本機代碼層。新加的代碼層給.NET平臺帶來了額外的靈活性,不過,反過來卻又增加了系統的復雜性。
在Microsoft.NET框架內,應用程序可以用好多種高級程序語言編寫、創建,例如VB.NET、C#乃至COBOL.NET等等,都可以編寫.NET應用程序。而通過每一種遵守.NET規范的編程語言所編寫的程序首先都得通過一種初始編譯步驟從源代碼變成.NET的公共標準語言:MSIL(Microsoft IntermediateLanguage,微軟中介語言),然后,在執行時臨時由JIT解釋成機器代碼執行(如圖1所示)。MSIL自身是一種完整的、和對象相關的語言,通過它才可能實現多種高級語言來編寫.NET應用程序。但使用ILDASM可以很容易地反匯編成一個文本文件,這個文本文件比較容易看懂,還可以修改后使用ILASM重新編譯成EXE文件。這就給軟件保護提出了新的難題。

1 保護軟件與常用做法
對上述問題,在不同場合可以采取不同的解決方案:
(1)Web service或者remote方式調用將核心代碼和數據放到服務器上。
(2)Jeffrey Richter認為:如果有非常重要的代碼,而且認可Native Code有100%的安全,則可以考慮使用Native Code的DLL+Interop。……