.net程序源代碼如何避免被反編譯
來自專欄 程序員技術分享
許多開發人員仍然不知道可移植的可執行文件(PE)文件是可以被編譯成可讀的源代碼。在學習如何防止或使反編譯器難以對源代碼進行反向編譯之前,我們需要了解一些基本概念。
什麼是可移植的可執行文件?
當源代碼被執行時,它會生成一個可移植的可執行文件。可移植的可執行文件(PE)不是DLL就是EXE。PE文件包含MSIL (Microsoft中間語言)和元數據。MSIL最終由CLR轉換為處理器能夠理解的本機代碼。元數據包含裝配信息,如程序集名稱、版本、文化和公鑰。
如何從DLL或EXE獲取源代碼?
是的,我們可以從DLL或EXE獲取源代碼。為了演示這一點,讓我們先創建一個簡單的應用程序。
打開Visual Studio,創建一個新的項目並選擇基於控制台的應用程序。
添加一些簡單的代碼:
using System; namespace MyConsoleApp{ internal class Program { private static void Main(string[] args) { Console.WriteLine(PublicMethod()); Console.WriteLine(PrivateMethod()); } public static string PublicMethod() { // Your source code here return "Public Method"; } private static string PrivateMethod() { // Your source code here return "Private Method"; } }}
現在編譯這個工程,會在bin/debug目錄下生成一個exe文件
現在我們試著從EXE文件獲取源代碼。
首先,打開Visual Studio命令提示符窗口:
鍵入ildasm
然後點擊回車鍵。 IL DASM is MSIL 是個反編譯程序,可以用來查看中間語言。
會打開IL DASM 窗口,現在我們打開剛剛編譯生成的Exe文件:
如上圖所示,IL DASM會犯編譯EXE文件,很多有用的信息可以被查看,儘管它並沒有完全提供原始的源代碼。我們可以使用市場上免費的反編譯器,比如Telerik JustDecompile和Jet brain dotPeek,通過這些工具我們可以將中間語言轉換成原始的源代碼。
如我們在上面的截圖中看到的,當我們打開EXE和Telerik JustDecompile,我們能夠看到原始的源代碼,這可能致使軟體被盜版,最終會對你造成損失。
如何防止EXE和DLL被反編譯?
保護EXE和DLL不被反編譯到原始源代碼的方法稱為混淆。有很多付費和免費的軟體可以提供混淆代碼的功能,讓.Net程序集代碼變得模糊,不易理解。Dotfucator是一個流行的混淆工具,這工具的社區版是免費的,並且包含在Visual Studio中。如果您有興趣購買其他版本,請查看此比較。Dofuscator社區版的功能有限,專業版非常昂貴。因此,一般我們不會通過使用他們而獲得利潤,相反,我們會在混淆問題上花很多錢。
混淆的最好的替代工具之一是ConfuserEx——它是一個完全免費的開源軟體。你可以去網上下載。
下載後,將zip解壓到一個文件夾中,然後運行ConfuserEx.exe。
一旦您完成了設置目錄並添加DLL或EXE,請到ConfuserEx的Settings選項卡。您可以向Gobal設置添加規則,也可以為每個DLL或EXE設置單獨的規則。
點擊「+」按鈕,你會看到規則下的「True」。現在點編輯規則(下面的按鈕「-」)。
單擊編輯規則,將出現一個新窗口,如下所示。點擊「+」按鈕。
您可以選擇不同的方法來增加保護級別。
只選擇「Anti - IL Dasm」和「Anti - Tamper」,這足以使它足夠強大,阻止反編譯。
點擊Done後,點擊「Protect 」Tab頁,然後點擊「保護」按鈕。
您可以在選擇的輸出目錄中找到受保護的DLL或EXE。
測試運行一下ConfusedEx生成的EXE或DLL,並檢查它是否工作正常。現在嘗試用反編工具反編譯。
正如我們所看到的,由ConfuserEx生成的混亂的DLL或EXE不能再被反編譯。
原文地址:
https://www.codeproject.com/Articles/1245244/Protect-your-Source-Code-from-Decompiling-or-Revhttp://weixin.qq.com/r/o0NTS7-EWeImrfso9xax (二維碼自動識別)
推薦閱讀: