[.NET]透過SmartAssembly進行程式碼混淆的編譯
為什麼會用到混淆器…
起因是因為公司希望改善資安上的一些程序,因此想要把一些比較敏感性的資訊不要以明碼的方式放在程式碼中
例如在Web.Config中放入資料庫的連線字串等等
所以我稍微找了一下相關的資料,最後選擇了SmartAssembly這個混淆器作為混淆程式碼編譯的使用
以下我就用一個很簡單的方式,說明如何進行程式碼的混淆編譯吧
首先,我建立了一個Config的類別庫,並在裡面加入一個Database的類別
然後在裡面宣告一個ConnectionString的資料庫連線字串
然後建立一個前端程式,並加上顯示該字串的功能
當然結果很正常,可以將字串顯示出來
然後我作了一次發佈的動作,將這個Web發佈到磁碟上,然後用反組譯的程式將Config.dll這個檔案打開並反組譯它
DLL裡的敏感字串都被反組譯了
這時候就輪到SmartAssembly上場嘍
1.打開SmartAssembly這個程式,並選擇[New Project]
2.選擇要混淆的元件,或是執行檔
3.選擇混淆後的檔案,要存放的路徑
3.接著SmartAssembly會跳出許多的設定可供選擇,這個地方可以針對需要的內容去作設定,不過我現在要作的,只是將元件內較為敏感的字串作混淆,所以選擇[String Encoding],並把[I wnat to hide important information by encoding all the strings in my software]打勾,當然,也可以針對專案的需求進行其他的設定
4.設定完後,按下[Build]的按鈕進行編譯,完成後會將結果顯示在畫面上
這時,我們再透過反組譯的工具去將新編譯好的dll打開來看,會發現原本字串的地方都看不到內容了
雖然說SmartAssembly這一套混淆器很好用,但是單Build Server的授權費用就要765美金
再加上每一個開發者都需要購買使用授權,費用其實不便宜,個人使用的話會太貴
但是用在公司的保密及安全上,這是值得投資的一項支出的
SmartAssembly 6
http://www.red-gate.com/products/dotnet-development/smartassembly/
其他參考文章
小試SmartAssembly .NET混淆器
http://blog.darkthread.net/post-2013-04-05-smartassembly.aspx