[.NET]透過SmartAssembly進行程式碼混淆的編譯

[.NET]透過SmartAssembly進行程式碼混淆的編譯

為什麼會用到混淆器…

起因是因為公司希望改善資安上的一些程序,因此想要把一些比較敏感性的資訊不要以明碼的方式放在程式碼中

例如在Web.Config中放入資料庫的連線字串等等

所以我稍微找了一下相關的資料,最後選擇了SmartAssembly這個混淆器作為混淆程式碼編譯的使用

以下我就用一個很簡單的方式,說明如何進行程式碼的混淆編譯吧

 

首先,我建立了一個Config的類別庫,並在裡面加入一個Database的類別

然後在裡面宣告一個ConnectionString的資料庫連線字串

image

然後建立一個前端程式,並加上顯示該字串的功能

image

當然結果很正常,可以將字串顯示出來

image

然後我作了一次發佈的動作,將這個Web發佈到磁碟上,然後用反組譯的程式將Config.dll這個檔案打開並反組譯它

image

DLL裡的敏感字串都被反組譯了

這時候就輪到SmartAssembly上場嘍

 

1.打開SmartAssembly這個程式,並選擇[New Project]

image

2.選擇要混淆的元件,或是執行檔

image

3.選擇混淆後的檔案,要存放的路徑

image

3.接著SmartAssembly會跳出許多的設定可供選擇,這個地方可以針對需要的內容去作設定,不過我現在要作的,只是將元件內較為敏感的字串作混淆,所以選擇[String Encoding],並把[I wnat to hide important information by encoding all the strings in my software]打勾,當然,也可以針對專案的需求進行其他的設定

image

4.設定完後,按下[Build]的按鈕進行編譯,完成後會將結果顯示在畫面上

image

image

這時,我們再透過反組譯的工具去將新編譯好的dll打開來看,會發現原本字串的地方都看不到內容了

image

雖然說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