寫 .NET 應用程式也有一段時間了,大多數的應用程式都是放在 Server 端的應用,如 SharePoint Webpart 及 Web Service 等,最近的一個專案是較另類的,寫的是視窗的應用程式,由於是要將程式 Deploy 到使用者手上的,特地將以前不是那麼在意的 De-Compiler 程式找了出來跑跑看,嚇了我一大跳,這玩意兒不就是 Open Source 嘛?!

我使用的是 Remotesoft 的 Salamander .NET decompiler,先前曾經嘗試著用它來 De-Compiler 幾個 SharePoint 2003 Server 的應用組件,為的是瞭解原 Class 的運作模式,現在應用到了自己寫的視窗程式中,發現所有程式碼都露了出來。本來在 Deploy .NET 的應用程式的時候,我們通常都會使用 VS.NET 2003 所附的 Dotfuscator Community Edition 來對 MSIL 進行模糊化的動作,但是,這個動作並不會對程式中的字串進行編碼,其它商用的模糊化工具或許可以增加點閱讀難度,但是還是會使這些資料曝光,實際上是,只要 .NET Framework 可以解釋你的 MSIL,那就可以利用軟體反向工程來作解碼的動作。某些敏感性高的字串資料,如 SQL 的連線 UserID / Password 放在程式碼中是很不安全的!!記住,無論使用了多高明的模糊器,你只能拿來欺騙自己,讓自己多一份安心。

我們可以由 .NET 執行的機制中清楚的知道,在你編譯你的程式碼之後,所得到的並不是一個 Native Code,它實際上是一個 MSIL,當你執行 MSIL 的時候,你的 .NET Framework For Windows 會轉換它,成為該平台上的 Native code (這時就跟 CPU 與硬體有關了) 然後再執行。所以只要 .NET Framework 可以解釋 MSIL,反組譯當然也不成問題。這個機制也成就了另一個好處,那就是『跨平台』,.NET 應用程式實際上是可以跨平台執行的。如果有一個 .NET Framework For Linux (微軟不開發,但是我們已經有了個 MONO 的 Open Source Project),相同的 MSIL 程式也會由這個 Framework 來解釋為該平台上的 Native code (硬體系統架構不同) 執行,所以你的程式才能夠跨平台執行。

類似 PHP Script 需要 PHP 來執行,Zend Optimizer 可以用來解釋由 Zend Encoder 所編碼的 PHP 程式,也許有一天,你的 .NET Framework 可以被額外組件『加料』,然後用來執行一個編碼過的 MSIL,只是目前市場上還沒看到這樣的產品出現。

所以以現在來說,支持 .NET Framework 就是同等於 支持開放源碼,因為所有的 Code 幾乎都是 Open 的了,網路上已經有太多的解碼工具,該是找個地方來存放你的敏感資料,或者多利用加解密的 Class 來進行適度的編碼,然後再放進程式裡。

是不是可以說微軟已經開始支持 Open Source 了?! 因為他們可是很努力的在推 .NET 呢!!


PS. 我那天說要 Post 的這篇已經 Po 上來了,Rickz 欠繳的東西也該上網了吧~~~ 當天同行的幾位該摧稿囉!

附圖一 (模糊化過的 MSIL 反組譯結果)
msil-1.png

附圖二 (未模糊化過的 MSIL 反組譯結果)
msil-2.png

最後修改日期: 2004-08-18